【问题标题】:How can I edit a Deployment without modify the file manually?如何在不手动修改文件的情况下编辑部署?
【发布时间】:2016-08-23 13:01:20
【问题描述】:

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

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

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您可以通过 REST API 使用 PATCH verb 来实现。但是,更简单的方法是使用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),这可能暗示存在问题。

    【讨论】:

    • 谢谢,我遇到了一个错误,但我要发布另一个问题
    • 说实话,我还没有时间亲自尝试这个命令。稍后会尝试这样做并回复您!
    • 我的 JSON 规范并不完全正确:容器定义嵌套更深。我更新了我的答案并仔细检查了它是否正常工作。
    • 有没有办法在补丁时也自动更新yaml?
    【解决方案2】:

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

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

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

    【讨论】:

    • 我用文档链接和您创建的问题修改了我的答案。谢谢!
    【解决方案3】:

    有一个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/

    【讨论】:

      【解决方案4】:

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

      https://github.com/rusenask/keel

      您只需使用 Keel 策略(如 keel.sh/policy=major)标记您的部署,即可启用主要版本更新,更多信息请参阅自述文件。与 Helm 类似,无需额外的 CLI/UI。

      【讨论】:

      • 所以这里是龙骨开始的地方,很好。
      猜你喜欢
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      相关资源
      最近更新 更多