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

Héc*_*tor 28 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
Run Code Online (Sandbox Code Playgroud)

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

  1. $ kubectl edit deployment/myapp-deployment
  2. vim开了.我将图像版本从2.0更改为3.0并保存.

它如何实现自动化?有没有办法只运行命令?就像是:

$ kubectl edit deployment/myapp-deployment --image=172.20.34.206:5000/myapp:img:3.0
Run Code Online (Sandbox Code Playgroud)

我想使用Kubernetes API REST但我不懂文档.

Tim*_*ann 43

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

kubectl patch deployment myapp-deployment -p \
  '{"spec":{"template":{"spec":{"containers":[{"name":"myapp","image":"172.20.34.206:5000/myapp:img:3.0"}]}}}}'
Run Code Online (Sandbox Code Playgroud)

根据文档,YAML格式也应该被接受.请参阅Kubernetes问题#458(特别是此评论),这可能暗示一个问题.

  • 有没有办法在补丁时自动更新yaml? (2认同)

KCD*_*KCD 19

有一个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
Run Code Online (Sandbox Code Playgroud)

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