使用Kubernetes部署/更新容器的最佳实践?

时间:2020-03-31 11:25:10

标签: docker kubernetes

我试图了解如何使用Kubernetes部署容器。我是这个主题的新手,因此目前我正在虚拟机中测试所有这些想法。

我正在使用Git,Jenkins,Docker,Docker Hub和Kubernetes。

此外,我有一个主节点和一个从节点。

我创建了一个YAML部署文件来启动pod并创建一个新容器。

kubectl apply -f deployment.yaml

然后我公开部署。

kubectl expose deployment my-app --type=LoadBalancer --name=my-app

要部署的YAML文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: app
spec:
  selector:
    matchLabels:
      app: app
      role: master
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: app
        role: master
        tier: backend
    spec:
      containers:
      - name: appcontainer
        image: repository:1.0
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 8085
      imagePullSecrets:
      - name: regcred

现在我已经完成所有工作,例如,我对该映像进行了新的更新,并且在完成部署后,需要将该新映像(例如,1.0升级为1.1)。我需要知道执行此操作的正确方法。

因为我想我做错了,就像我试图在使用新映像创建的容器上粉碎映像一样,并且我不知道是否正确的方法是使用新的YAML文件进行部署以及Kubernetes是否可以构建一个带有该映像的新容器,并因此杀死了旧的部署,但是如果这样做正确,我不知道该怎么办。

2 个答案:

答案 0 :(得分:1)

使用新图像update a deployment的最简单方法是运行:

kubectl set image deployment/my-app appcontainer=repository:1.1 --record

通过这种方式,它将首先使用较新版本的映像创建一个新的pod,一旦成功部署,它将根据您在replicas字段中指定的副本数终止旧的pod。 >

您可以通过运行

来检查更新状态
kubectl rollout status deployment.v1.apps/my-app

答案 1 :(得分:0)

您要寻找的解决方案称为Rolling update。您可以像这样更新deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: app
spec:
  selector:
    matchLabels:
      app: app
      role: master
      tier: backend
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  replicas: 1
  template:
    metadata:
      labels:
        app: app
        role: master
        tier: backend
    spec:
      containers:
      - name: appcontainer
        image: repository:1.0
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 8085
      imagePullSecrets:
      - name: regcred

请注意滚动更新配置:

strategy:
  rollingUpdate:
    maxSurge: 1
    maxUnavailable: 0
  type: RollingUpdate

maxSurge表示部署首次部署期间可以运行的额外Pod的数量。 maxUnavailable大约是在发布期间可以取下的广告连播数量。这些值可以是整数值-吊舱的确切数量或吊舱的百分比。您可以调整这些值以适合您的用例。

然后,您可以在Yaml中更改图片标签,然后执行kubectl apply来更新图片。