首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修补Kubernetes Daemonset

如何修补Kubernetes Daemonset
EN

Stack Overflow用户
提问于 2021-04-22 23:12:29
回答 2查看 461关注 0票数 2

每次我希望公开新的TCP端口时,我都有一个持续的需求来修补我的nginx-ingress守护进程。我已经查看了文档,但我无法理解正确的kubectl补丁语法来执行补丁。以下是yaml的摘录:

代码语言:javascript
复制
spec:
    revisionHistoryLimit: 10
    selector:
      matchLabels:
        name: nginx-ingress-microk8s
    template:
      metadata:
        creationTimestamp: null
        labels:
          name: nginx-ingress-microk8s
      spec:
        containers:
        - args:
          - /nginx-ingress-controller
          - --configmap=$(POD_NAMESPACE)/nginx-load-balancer-microk8s-conf
          - --default-backend-service=ingress/custom-default-backend
          - --tcp-services-configmap=$(POD_NAMESPACE)/nginx-ingress-tcp-microk8s-conf
          - --udp-services-configmap=$(POD_NAMESPACE)/nginx-ingress-udp-microk8s-conf
          - --ingress-class=public
          - ' '
          - --publish-status-address=127.0.0.1
          env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.namespace
          image: k8s.gcr.io/ingress-nginx/controller:v0.44.0
          imagePullPolicy: IfNotPresent
          lifecycle:
            preStop:
              exec:
                command:
                - /wait-shutdown
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
          name: nginx-ingress-microk8s
          ports:
          - containerPort: 80
            hostPort: 80
            name: http
            protocol: TCP
          - containerPort: 443
            hostPort: 443
            name: https
            protocol: TCP
          - containerPort: 10254
            hostPort: 10254
            name: health
            protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
          resources: {}

我想使用kubectl patch在ports下追加另一个端口定义。

代码语言:javascript
复制
          - containerPort: 1234
            hostPort: 1234
            name: my-port-1234
            protocol: TCP

使用以下命令修补配置映射非常简单:

代码语言:javascript
复制
kubectl patch configmap nginx-ingress-tcp-microk8s-conf -n ingress --type merge -p '{"data":{"1234":"namespace1/api-connect:1234"}}'

但我不明白如何修改命令来应对Daemonset所需的更复杂的更新。

感谢您给予的任何帮助。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-23 18:04:21

正如David在评论中提到的,最好将每个更改保持在版本控制之下。

但是如果你真的需要这样做,下面是命令:

代码语言:javascript
复制
kubectl patch ds -n ingress nginx-ingress-microk8s-controller --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/ports/-", "value":{"containerPort":1234,"name":"my-port-1234","hostPort":1234,"protocol":"TCP"}}]'

k8s文档:update-api-object-kubectl-patch中介绍了补丁命令,rfc6902中介绍了json类型补丁的详细信息。

票数 0
EN

Stack Overflow用户

发布于 2021-04-23 05:30:54

尝试执行以下命令:

代码语言:javascript
复制
kubectl patch ds/name --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/ports/1", "value":{"containerPort":8888,"name":"http"}}]'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67216042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档