kubernetes 如何在不手动修改文件的情况下编辑展开?

dl5txlt9  于 2023-06-05  发布在  Kubernetes
关注(0)|答案(4)|浏览(690)

我已经为我的应用定义了一个Deployment:

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并保存。
    如何实现自动化?有没有一种方法可以只运行一个命令?类似于:
$ kubectl edit deployment/myapp-deployment --image=172.20.34.206:5000/myapp:img:3.0

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

vbopmzt1

vbopmzt11#

您可以通过REST API使用PATCH动词来完成。但是,更简单的方法是使用kubectl patch。以下命令更新应用的标记:

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

根据文档,YAML格式也应该被接受。参见Kubernetes issue #458(特别是这条评论),这可能暗示了一个问题。

ubby3x7f

ubby3x7f2#

有一个set image命令,在简单情况下可能很有用
更新资源的现有容器映像。可能的资源包括(不区分大小写):pod(po)、replicationcontroller(rc)、deployment(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/

g6ll5ycj

g6ll5ycj3#

(如果我有足够的声誉,我会把这篇文章作为评论发表的)
是的,根据http://kubernetes.io/docs/user-guide/kubectl/kubectl_patch/,JSON和YAML格式都可以接受。
但我看到所有的例子都使用JSON格式。归档https://github.com/kubernetes/kubernetes.github.io/issues/458以添加YAML格式示例。

ha5z0ras

ha5z0ras4#

我最近构建了一个工具,可以在新镜像可用时自动更新部署,它可以与Kubernetes和Helm一起使用:
https://github.com/rusenask/keel
您只需使用Keel策略(如keel.sh/policy=major)标记部署即可启用主要版本更新,更多信息请参阅自述文件。与Helm类似,无需额外的CLI/UI。

相关问题