使用Kubernetes在Google容器引擎上部署容器集群-配置文件部分
首先
在前一篇文章中,我们总结了在Google容器引擎上使用Kubernetes构建容器集群的步骤。
使用Kubernetes在Google容器引擎上部署容器集群的入门教程。
这次我们将总结关于通过设置文件的设置步骤。
将当前正在运行的容器群集的配置导出到YAML文件中。
将YAML文件导出
导出部署配置文件
$ kubectl get deployment/nodejs-deploy -o yaml --export > deploy.yaml
执行上述命令后,将生成一个名为deploy.yaml的文件。
打开该文件,您会看到以下内容。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "2"
creationTimestamp: null
generation: 1
labels:
run: nodejs-deploy
name: nodejs-deploy
selfLink: /apis/extensions/v1beta1/namespaces//deployments/nodejs-deploy
spec:
replicas: 5
selector:
matchLabels:
run: nodejs-deploy
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: nodejs-deploy
spec:
containers:
- command:
- node
- app/server.js
image: asia.gcr.io/kubernetes-demo-172306/nodejs:2.0
imagePullPolicy: IfNotPresent
name: nodejs-deploy
ports:
- containerPort: 3000
protocol: TCP
resources:
limits:
cpu: 200m
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status: {}
导出Service设置文件
$ kubectl get service/nodejs-deploy -o yaml --export > service.yaml
使用上述命令将生成一个名为 service.yaml 的文件。
打开此文件,其内容如下所示。
请将 clusterIP: 注释掉,否则如果继续使用此配置文件会导致错误。
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
run: nodejs-deploy
name: nodejs-deploy
selfLink: /api/v1/namespaces//services/nodejs-deploy
spec:
#clusterIP: <unknown>
ports:
- nodePort: 31828
port: 80
protocol: TCP
targetPort: 3000
selector:
run: nodejs-deploy
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer: {}
从配置文件部署
让我们删除所有正在运行的服务和部署,并根据输出的配置文件重新创建相同的环境。
首先需要删除Service和Deployment。
$ kubectl delete deployment,service --all
deployment "nodejs-deploy" deleted
service "nodejs-deploy" deleted
# しばらく待つとPodも削除される
$ kubectl get pod
No resources found.
请确认上篇文章中提到的,无法访问http://负载均衡器的IP地址。
接下来,将从输出的配置文件中创建部署和服务。
$ kubectl create -f deploy.yaml
deployment "nodejs-deploy" created
$ kubectl create -f service.yaml
service "nodejs-deploy" created
# ロードバランサーに外部IPが紐付いたかを確認
$ kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.27.240.1 <none> 443/TCP 3d
nodejs-deploy 10.27.245.186 35.xxx.xxx.110 80:31828/TCP 1m
请访问http://,并确认是否显示”Hello GKE World!”。
使用滚动更新在部署中修改设置文件。
假设应用程序的源代码已更改,并替换了Pod容器镜像,在这种情况下,我们尝试进行滚动更新。
打开 deploy.yaml 文件,并将 image: asia.gcr.io/kubernetes-demo-172306/nodejs:2.0 的标签更改为 1.0。
该标签对应的容器镜像不是上一篇文章中创建的 “Hello GKE World!”,而是用于在浏览器中显示 “Hello World!” 的容器镜像。
# image: asia.gcr.io/kubernetes-demo-172306/nodejs:2.0
image: asia.gcr.io/kubernetes-demo-172306/nodejs:1.0
使用apply命令来应用配置文件的内容。
$ kubectl apply -f deploy.yaml
deployment "nodejs-deploy" configured
# Pod一覧を見るとRolling Updateでコンテナが置き換わっていくのを確認できる
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nodejs-deploy-105340789-bq3fj 1/1 Running 0 4s
nodejs-deploy-105340789-fdzq4 0/1 ContainerCreating 0 1s
nodejs-deploy-105340789-lsctr 1/1 Running 0 12s
nodejs-deploy-105340789-qs20q 1/1 Running 0 12s
nodejs-deploy-105340789-tcr4d 1/1 Running 0 4s
nodejs-deploy-4273761010-c7r2w 0/1 Terminating 0 12m
nodejs-deploy-4273761010-j8m8j 0/1 Terminating 0 12m
请再次访问 http://,以确认消息已经更改为“Hello World!”。
删除GKE演示环境
这次的示威活动到此为止结束了。
如果不采取措施,将会在GCP上产生费用,如果不需要,请使用下方命令进行删除。
$ kubectl delete -f deployment.yaml
$ kubectl delete -f service.yaml
$ gcloud container clusters delete nodejs-cluster
总结
我使用的方法是使用kubectl命令构建容器集群,并通过这个容器集群输出YAML文件来创建配置文件。
当然,您也可以从一开始就使用YAML文件创建配置文件,并构建容器集群。
通过在 Git 存储库中管理此配置文件,可以通过配置更改进行部署,并通过拉取请求进行审查,通过多人查阅可以防止配置错误等操作,从而实现更加有效的运维。
此外,GCP提供了一个用于持续集成容器集群运维的服务(Container Registry Build Trigger)。利用该服务,当代码被推送到Git仓库时,可以自动构建并部署容器镜像到集群中。
下一次,我们将总结关于使用容器注册表构建触发器的持续集成流程。