【问题标题】:Updating kubernetes pod更新 Kubernetes pod
【发布时间】:2024-01-01 00:36:01
【问题描述】:

我有这个用于 kubernetes 的 deployment.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: smart-flats
  labels:
    app: smart-flats
spec:
  type: NodePort
  selector:
    app: smart-flats
  ports:
  - protocol: TCP
    port: 5000
    name: http
    
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: smart-flats
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: smart-flats
    spec:
      containers:
      - name: smart-flats
        image: sleezy/go-hello-world:<VERSION>
        env:
        - name: SECRETKEY
          value: "${CONFIG_SECRETKEY}"
        ports:
        - containerPort: 5000
        livenessProbe:
          httpGet:
            path: /health
            port: 5000
          initialDelaySeconds: 30
          timeoutSeconds: 1

但是当我尝试推送新版本的应用程序时,kubectl get pods 仍然显示第一个并且没有更新版本,我该怎么办?每次推送新版本时,我都需要更新 pod。谢谢!

【问题讨论】:

    标签: kubernetes gitlab-ci


    【解决方案1】:

    首先推荐kind: Deployment,而不是kind: ReplicationController,详情见here。更新规范后,您可以使用kubectl set image deployment smart-flats smart-flats=sleezy/go-hello-world:&lt;new version&gt; 更新映像版本。您的 pod 将使用新的映像版本自动重启。

    【讨论】:

      【解决方案2】:
      • ReplicationController 确保指定数量的 pod 副本在任何时候都在运行。它们不直接支持滚动更新。简单来说,它们只会维护指定数量的 pod,不会监控 pod 的映像版本。

      • 使用修改后的/新映像运行 pod 的更简单方法,将更改推送到复制控制器后,只需删除现有/旧的 pod。将使用新图像创建新 pod。 [或]

      • 正如@gohm'c 建议的部署而不是复制集或复制控制器将是更好的选择。

      【讨论】: