更新 kubernetes 部署将创建新的 pod

Updating kubernetes deployment will create new pod

我有一个现有的 kubernetes 部署,运行 没问题。现在我想用一些我将在 pod 中使用的新环境变量来编辑它。 编辑部署将删除并创建新的 pod,或者将更新现有的 pod。 我的要求是我想在 edit/update 部署时创建一个新的 pod。

如果您想创建一个新的 pod,则需要为其创建一个新的部署。按照设计,部署正在管理属于它们的 pods 的副本。

Kubernetes 总是会重新创建您的 pods 以防您 change/create 环境变量。

让我们一起检查一下,创建一个没有任何环境变量的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

让我们检查并记下这些 pod 名称,以便稍后进行比较:

$ kubectl get pod 
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-56db997f77-9mpjx   1/1     Running   0          8s
nginx-deployment-56db997f77-mgdv9   1/1     Running   0          8s
nginx-deployment-56db997f77-zg96f   1/1     Running   0          8s

现在让我们编辑此部署并包含一个环境变量,使清单如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        env:
          - name: STACK_GREETING
            value: "Hello from the MARS"
        ports:
        - containerPort: 80

完成编辑后,让我们检查我们的 pod 名称,看看它是否发生了变化:

$ kubectl get pod 
nginx-deployment-5b4b68cb55-9ll7p   1/1     Running   0          25s
nginx-deployment-5b4b68cb55-ds9kb   1/1     Running   0          23s
nginx-deployment-5b4b68cb55-wlqgz   1/1     Running   0          21s

如我们所见,所有 pod 名称都已更改。让我们检查一下我们的环境变量是否得到应用:

$ kubectl exec -ti nginx-deployment-5b4b68cb55-9ll7p -- sh -c  'echo $STACK_GREETING'
Hello from the MARS

如果您更改 var 甚至删除它,也会发生相同的行为。所有 pods 都需要删除并重新创建才能进行更改。