我为我的应用定义了部署:
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,我会这样做:
$ kubectl edit deployment/myapp-deployment
vim
已开启。我将图像版本从2.0更改为3.0并保存。如何实现自动化?有没有办法只运行命令?类似的东西:
$ kubectl edit deployment/myapp-deployment --image=172.20.34.206:5000/myapp:img:3.0
我想过使用Kubernetes API REST,但我不理解documentation。
答案 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
答案 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。