【问题标题】:How to redeploy google cloud platform using kubectl如何使用 kubectl 重新部署谷歌云平台
【发布时间】:2020-06-17 10:02:14
【问题描述】:

我正在尝试找到一个快速命令来在 Kubernetes 中重新部署一个 pod。

  1. 目前,我将我的 docker 镜像推送到了谷歌云。
  2. 然后我列出我的 pod
kubectl -n pringadi get pods
        NAME                                                        READY   STATUS      RESTARTS   AGE
        audit-server-757ffd5dd-ztn5s                                 1/1     Running     0          38m
        configs-service-75c98f68c7-q928q                            1/1     Running     0          36m       
  1. 我编辑部署配置 kubectl edit deployment audit-server
  2. 更新/更改图像名称。
  3. 保存并退出。

Kubernetes 立即识别更改并重新部署 audit-server

问题: 如果我将我的 docker 镜像(一个较新的镜像)推送到同名的谷歌云(第 4 步)并且只想基于当前镜像重新部署 audit-server 怎么办。有这个命令吗?继续编辑部署配置是一项繁琐的工作(第 3 步)

【问题讨论】:

    标签: kubernetes google-cloud-platform kubectl


    【解决方案1】:

    完全不清楚您要做什么,但请猜测一下:

    kubectl set image deploy audit-server "*=us.gcr.io/whatever/whateverelse:12345" 将在您的部署中碰撞图像,而无需调用您的编辑器

    或者,使用类似 skaffold 或其竞争对手的东西来不断推送和重新加载 Pod 以进行开发

    【讨论】:

    • 该命令将审计服务器中的所有图像名称重写为新值。是否可以使该命令更具体?
    • 当然,是的;您只是没有指定有关您的部署的任何内容,因此任何人都无法猜测您的设置。其中的* 应替换为容器的名称(例如:my-app=us.gcr.io/whatever/whatever 以使用 rabello 的示例描述符)
    • 谢谢!我认为关键字是补丁。就像这个命令中的 -p kubectl patch deployment audit-server -p '{"spec": {"template": {"spec":{"containers":[{"name":"audit-server","image": "gcr.io/MY_PROJECT/audit-server:pringadi-snapshot", "imagePullPolicy": "Always"}]}}}}'
    • 如果您更喜欢更长的命令,是的,我相信它们可能都是 kubectl 使用相同的机制在幕后实现的
    【解决方案2】:

    您可以简单地使用带有 imagePullPolicy: Always 的部署并在进行更改后终止您的 pod。它将强制您的部署再次下载映像。

    来自Kubernetes Docs:

    imagePullPolicy: Always:每次启动pod都会拉取镜像。

    例子:

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app
    spec:
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - name: my-app
            image: nginx
            ports:
            - name: http
              containerPort: 80
            imagePullPolicy: Always
    EOF
    

    然后拉取镜像后,删除正在运行的pod,deployment会再次下载镜像:

    kubectl delete pods -l app=my-app
    

    检查新容器:

    kubectl get pods -l app=my-app
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-09
      • 2014-11-21
      • 1970-01-01
      • 2018-10-05
      • 2017-07-21
      • 2018-03-08
      • 2020-06-02
      • 2020-07-26
      相关资源
      最近更新 更多