如何在不手动修改文件的情况下编辑部署?

时间:2016-04-28 16:15:17

标签: kubernetes

我为我的应用定义了部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: 172.20.34.206:5000/myapp_img:2.0
        ports:
        - containerPort: 8080

现在,如果我想将我的应用程序的图像2.0更新为3.0,我会这样做:

  1. $ kubectl edit deployment/myapp-deployment
  2. vim已开启。我将图像版本从2.0更改为3.0并保存。
  3. 如何实现自动化?有没有办法只运行命令?类似的东西:

    $ kubectl edit deployment/myapp-deployment --image=172.20.34.206:5000/myapp:img:3.0
    

    我想过使用Kubernetes API REST,但我不理解documentation

4 个答案:

答案 0 :(得分:35)

您可以使用PATCH verb通过REST API执行此操作。但是,更简单的方法是使用kubectl patch。以下命令更新应用程序的标记:

kubectl patch deployment myapp-deployment -p \
  '{"spec":{"template":{"spec":{"containers":[{"name":"myapp","image":"172.20.34.206:5000/myapp:img:3.0"}]}}}}'

根据the documentation,也应接受YAML格式。但请参阅Kubernetes issue #458(特别是this comment),这可能暗示问题。

答案 1 :(得分:16)

有一个set image命令,在简单的情况下可能很有用

  

更新资源的现有容器图像。   可能的资源包括(不区分大小写):   pod(po),replicationcontroller(rc),部署(deploy),daemonset(ds),job,replicaset(rs)

     

kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N

     

http://kubernetes.io/docs/user-guide/kubectl/kubectl_set_image/

$ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
deployment "nginx-deployment" image updated

http://kubernetes.io/docs/user-guide/deployments/

答案 2 :(得分:4)

(如果我有足够的声誉,我会将此作为评论发布)

是的,根据http://kubernetes.io/docs/user-guide/kubectl/kubectl_patch/,接受JSON和YAML格式。

但是我看到所有的例子都使用JSON格式。 提交https://github.com/kubernetes/kubernetes.github.io/issues/458以添加YAML格式示例。

答案 3 :(得分:2)

我最近构建了一个工具,可在新图像可用时自动部署更新,它可以与Kubernetes和Helm一起使用:

https://github.com/rusenask/keel

您只需使用像scrapy这样的Keel策略标记部署,以启用主要版本更新,自述文件中的更多信息。与Helm类似,不需要额外的CLI / UI。