【问题标题】:Kubernetes pod Rollback and RestartKubernetes pod 回滚和重启
【发布时间】:2020-07-15 10:51:09
【问题描述】:

Deployment 资源对象在我们的集群中仍然不受支持且未启用。 我们正在使用 Pod 资源对象 Yaml 文件。如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: sample-test
  namespace: default
spec:
  automountServiceAccountToken: false
  containers:

我已经探索了 Pod 的补丁和 Put rest api(Kubectl 补丁和替换) - 它将更新到新的映像版本并重新启动 Pod。

我需要以下帮助:

  1. 镜像版本相同时,不会更新,pod不会重启。 我如何才能重新启动 Pod,是否有任何 API 用于此或任何替代 方法。因为我的 pod 还引用了 configmap 和 secret。在我之后 对秘密进行更改,我想重新启动 pod 以便它可以更新 价值。
  2. 假设当补丁应用到新容器映像并且失败状态为失败时,我想回滚到以前的版本,我如何在不使用部署的情况下使用独立 pod 来实现这一点。有没有其他方法。

【问题讨论】:

  • 为什么你用的K8s这么老的版本,不支持部署?

标签: kubernetes kubectl kubernetes-pod


【解决方案1】:

为您的方案实现解决方案,可以这样处理:

镜像版本相同时,不会更新,pod不会重启。我如何才能重新启动 Pod,是否有任何 API 或任何替代方法。因为我的 pod 还引用了 configmap 和 secret。在我对秘密进行更改后,我想重新启动 pod 以便它可以获取更新的值

每次创建一个新的 secret/configmap 并更新 pod yaml 以使用新的 configmap/secret 而不是旧名称。

假设当补丁应用到新容器映像并且失败状态为失败时,我想回滚到以前的版本,我如何在不使用部署的情况下使用独立 pod 来实现这一点。有没有替代方法

在更新 Pod 之前,像这样使用 kubectl 获取当前的 Pod yaml,

kubectl get pod <pod-name> -o yaml -n <namespace>

获取yaml后,生成新的pod yaml并应用。如果失败,清理新创建的资源(configmaps & secrets)并应用旧版本的pod实现回滚

【讨论】:

  • 我想说的是每个资源 yaml。从所有资源中获取所有 yaml kubectl get all -o yaml > getall.yaml 会更容易不是吗?修改所需的
  • 当我们使用 patch/put rest api(kubectl patch/replace) - 我们无法更改 pod 卷中的 configmap 和 secrets 名称。我猜只有容器图像可以更新。下面是 pod 的快照。
  • apiVersion:v1 种类:Pod 元数据:名称:测试命名空间:默认规范:容器:图像:存储库/大型:1.2 名称:测试端口:- containerPort:443 hostPort:443 名称:https 协议: TCP volumeMounts: - mountPath: /test/secrets name: test-secrets hostname: test imagePullSecrets: - name: testrepo-pull nodeName: test volumes: - name: test-secrets secret: defaultMode: 256 secretName: test-secret1
  • 更新问题中的 pod yaml。很难在评论中查看
  • 附件是上面有问题的yaml的快照
猜你喜欢
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
相关资源
最近更新 更多