使用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仓库时,可以自动构建并部署容器镜像到集群中。

下一次,我们将总结关于使用容器注册表构建触发器的持续集成流程。

广告
将在 10 秒后关闭
bannerAds