摘要:分別提下docker方式安裝與yaml安裝,如何與k8s體系結合使用,proget用于做nuget包管理以及鏡像倉庫。是自動化部署的一個環節。
docker安裝方式
docker network create proget
[password]是sqlserver密碼
docker run --name proget-sql \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=[password]' \
-e 'MSSQL_PID=Express' --net=proget --restart=unless-stopped \
-d mcr.microsoft.com/mssql/server:2017-latest
docker exec -it proget-sql /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '[password]' \
-Q 'CREATE DATABASE [ProGet] COLLATE SQL_Latin1_General_CP1_CI_AS'
docker run -d -v proget-packages:/var/proget/packages -p 80:80 \
--link=proget-sql --net=proget \
--name=proget --restart=unless-stopped -e PROGET_DB_TYPE=SqlServer \
-e PROGET_DATABASE='Data Source=localhost; Initial Catalog=ProGet; User ID=sa; Password=[password]' \
inedo/proget:latest
有免費版本的,需要
獲取proget密鑰
Kubernetes安裝方式YAML
在rancher導入yaml或者自己看界面做一個都行,記得把[password]替換成自己的數據庫密碼
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
field.cattle.io/creatorId: user-nsfrs
field.cattle.io/publicEndpoints: '[{"addresses":["192.168.101.136"],"port":30323,"protocol":"TCP","serviceName":"basic:proget-nodeport","allNodes":true}]'
kubectl.kubernetes.io/last-applied-configuration: '{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{"deployment.kubernetes.io/revision":"4","field.cattle.io/creatorId":"user-nsfrs","field.cattle.io/publicEndpoints":"[{\"addresses\":[\"192.168.3.36\"],\"port\":30323,\"protocol\":\"TCP\",\"serviceName\":\"basic:proget-nodeport\",\"allNodes\":true}]"},"creationTimestamp":"2019-12-06T09:20:45Z","generation":5,"labels":{"cattle.io/creator":"norman","workload.user.cattle.io/workloadselector":"deployment-basic-proget"},"name":"proget","namespace":"basic","resourceVersion":"21780","selfLink":"/apis/apps/v1/namespaces/basic/deployments/proget","uid":"001db8a6-f7e4-4d3f-80e4-565548dd8214"},"spec":{"progressDeadlineSeconds":600,"replicas":1,"revisionHistoryLimit":10,"selector":{"matchLabels":{"workload.user.cattle.io/workloadselector":"deployment-basic-proget"}},"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0},"type":"RollingUpdate"},"template":{"metadata":{"annotations":{"cattle.io/timestamp":"2019-12-06T09:26:24Z","field.cattle.io/ports":"[[{\"containerPort\":80,\"dnsName\":\"proget-nodeport\",\"kind\":\"NodePort\",\"name\":\"progetport\",\"protocol\":\"TCP\"}]]"},"creationTimestamp":null,"labels":{"workload.user.cattle.io/workloadselector":"deployment-basic-proget"}},"spec":{"containers":[{"env":[{"name":"PROGET_DATABASE","value":"Data
Source=localhost; Initial Catalog=ProGet; User ID=sa; Password=[password]"},{"name":"PROGET_DB_TYPE","value":"SqlServer"}],"image":"inedo/proget:latest","imagePullPolicy":"Always","name":"proget","ports":[{"containerPort":80,"name":"progetport","protocol":"TCP"}],"resources":{},"securityContext":{"allowPrivilegeEscalation":false,"privileged":false,"readOnlyRootFilesystem":false,"runAsNonRoot":false},"stdin":true,"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","tty":true,"volumeMounts":[{"mountPath":"/var/proget/packages","name":"progetvol"}]},{"env":[{"name":"ACCEPT_EULA","value":"Y"},{"name":"MSSQL_PID","value":"Express"},{"name":"MSSQL_SA_PASSWORD","value":"[password]"}],"image":"mcr.microsoft.com/mssql/server:2017-latest","imagePullPolicy":"Always","name":"proget-sql","resources":{},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{},"privileged":false,"readOnlyRootFilesystem":false,"runAsNonRoot":false},"stdin":true,"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","tty":true,"volumeMounts":[{"mountPath":"/var/opt/mssql","name":"progetvol"}]}],"dnsPolicy":"ClusterFirst","restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"terminationGracePeriodSeconds":30,"volumes":[{"hostPath":{"path":"/proget-sql","type":"DirectoryOrCreate"},"name":"progetvol"}]}}},"status":{"availableReplicas":1,"conditions":[{"lastTransitionTime":"2019-12-06T09:20:45Z","lastUpdateTime":"2019-12-06T09:28:48Z","message":"ReplicaSet
\"proget-b96bcb84d\" has successfully progressed.","reason":"NewReplicaSetAvailable","status":"True","type":"Progressing"},{"lastTransitionTime":"2019-12-06T09:29:10Z","lastUpdateTime":"2019-12-06T09:29:10Z","message":"Deployment
has minimum availability.","reason":"MinimumReplicasAvailable","status":"True","type":"Available"}],"observedGeneration":5,"readyReplicas":1,"replicas":1,"updatedReplicas":1}}'
creationTimestamp: "2019-12-08T15:05:10Z"
generation: 23
labels:
cattle.io/creator: norman
workload.user.cattle.io/workloadselector: deployment-basic-proget
name: proget
namespace: basic
resourceVersion: "101210"
selfLink: /apis/apps/v1/namespaces/basic/deployments/proget
uid: 0010e308-3e24-4b34-945b-67723b7589ac
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
workload.user.cattle.io/workloadselector: deployment-basic-proget
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
annotations:
cattle.io/timestamp: "2019-12-11T15:09:19Z"
field.cattle.io/ports: '[[{"containerPort":80,"dnsName":"proget-nodeport","kind":"NodePort","name":"progetdns","protocol":"TCP"}]]'
creationTimestamp: null
labels:
workload.user.cattle.io/workloadselector: deployment-basic-proget
spec:
containers:
- env:
- name: PROGET_DATABASE
value: Data Source=localhost; Initial Catalog=ProGet; User ID=sa; Password=[password]
- name: PROGET_DB_TYPE
value: SqlServer
image: inedo/proget:latest
imagePullPolicy: Always
name: proget
ports:
- containerPort: 80
name: progetdns
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: false
privileged: false
readOnlyRootFilesystem: false
runAsNonRoot: false
stdin: true
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
tty: true
volumeMounts:
- mountPath: /var/proget/packages
name: progetvol
- env:
- name: ACCEPT_EULA
value: "Y"
- name: MSSQL_PID
value: Express
- name: MSSQL_SA_PASSWORD
value: [password]
image: mcr.microsoft.com/mssql/server:2017-latest
imagePullPolicy: Always
name: proget-sql
resources: {}
securityContext:
allowPrivilegeEscalation: false
privileged: false
readOnlyRootFilesystem: false
runAsNonRoot: false
stdin: true
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
tty: true
volumeMounts:
- mountPath: /var/opt/mssql
name: progetvol
dnsConfig: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- hostPath:
path: /proget-sql
type: DirectoryOrCreate
name: progetvol
status:
availableReplicas: 1
conditions:
- lastTransitionTime: "2019-12-10T15:27:50Z"
lastUpdateTime: "2019-12-10T15:27:50Z"
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
- lastTransitionTime: "2019-12-08T15:05:10Z"
lastUpdateTime: "2019-12-11T15:08:03Z"
message: ReplicaSet "proget-7f9b7b9db5" has successfully progressed.
reason: NewReplicaSetAvailable
status: "True"
type: Progressing
observedGeneration: 23
readyReplicas: 1
replicas: 1
updatedReplicas: 1
在數據庫容器創建表
image.png
執行創建表語句 改一下[password]
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '[password]' -Q 'CREATE DATABASE [ProGet] COLLATE SQL_Latin1_General_CP1_CI_AS'
容器倉庫使用
前置條件
創建一個容器倉庫
這個Repository URL可以在高級設置的 Web.BaseUrl 修改
image.png
vim /etc/docker/daemon.json
看看你的容器倉庫地址,在docker的daemon.json加入以下配置
{ "insecure-registries":["192.168.101.136:30323"] }
重啟下docker
systemctl daemon-reload
systemctl restart docker
登錄
docker login 192.168.101.136:30323
//根據提示分別輸入用戶名和密碼,用戶密碼是
上傳鏡像
docker push 192.168.101.136:30323/carson/nginx:v1
拉取鏡像
docker pull 192.168.101.136:30323/carson/nginx:v1
鏡像格式 [倉庫地址]/[鏡像所屬用戶]/[鏡像名稱]:[鏡像版本]
注意:發布鏡像時候[鏡像所屬用戶]必須和login的用戶名一致否則無法發布,實在無法一致那么就直接把鏡像改名
docker tag 192.168.101.136:30323/carson/nginx:v1 192.168.101.136:30323/[你要改的名字]/nginx:v1
在k8s拉取鏡像
k8s和私有倉庫通訊需要創建一個secret
參數 | 是什么有什么作用 |
---|---|
docker-registry | 在proget設置Integrations & Extensibility里的API Keys創建 |
namespace | k8s指定的命名空間,這個secret非全局的 |
docker-server | 在proget的鏡像倉庫里的Repository URL |
kubectl create secret docker-registry [key] --namespace=[k8s命名空間] \
--docker-server=http://192.168.101.136:30323/md --docker-username=[用戶名] \
--docker-password=[用戶密碼]
然后你可以在工作負載直接部署該容器了
image.png
Nuget管理使用
發布比較簡單就不說了
拉取要注意
添加自己的倉庫地址 nuget.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="AspNetCore" value="https://dotnet.myget.org/F/aspnetcore-ci-dev/api/v3/index.json" />
<add key="AspNetCoreTools" value="https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json" />
<add key="NuGet" value="https://api.nuget.org/v3/index.json" />
<!--這里添加自己的包地址 -->
<add key="MyNuGet" value="http://192.168.101.136:30323/nuget/my" />
</packageSources>
</configuration>
restore時候
dotnet restore "xxx/xxx.csproj" --configfile "xxx/nuget.config"