【问题标题】:how to change port of a kubernetes container using kubectl patch?如何使用 kubectl 补丁更改 kubernetes 容器的端口?
【发布时间】:2020-01-02 13:36:59
【问题描述】:

我想更改在我的 kubernetes 集群上运行的容器的端口。手动我知道这可以在底层 YAML 文件本身中更改。但我想使用“kubectl patch”之类的命令来更改端口。

Nginx.yaml


apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels: 
    app: nginx 
spec:
  type: NodePort     
  ports:
  - name: nginxport
    port: 80
    targetPort: 80
    nodePort: 30000
  selector:
    app: nginx
    tier: frontend    

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nginx
        tier: frontend
    spec:

      containers:
      - image: suji165475/devops-sample:#{Build.BuildId}#
        name: nginx
        ports:
        - containerPort: 80
          name: nginxport

任何人都可以向我展示“kubectl patch”命令的示例,使用我的 nginx.yaml 作为更改容器属性(如容器端口、目标端口、节点端口、端口)的示例。而且我还想知道在什么基础上应用了 kubectl 补丁。我的意思是它如何知道要修补的容器以及容器 ID、名称等标准,因为稍后我将创建一个 html 按钮来基于一些标准,如容器 ID 或名称。所以请帮忙。

【问题讨论】:

标签: docker kubernetes


【解决方案1】:

假设您想在服务中将目标端口更新为 8080。请按照以下步骤操作

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels: 
    app: nginx 
spec:
  type: NodePort     
  ports:
  - name: nginxport
    port: 80
    targetPort: 80
    nodePort: 30000
  selector:
    app: nginx
    tier: frontend 

使用以下命令修补 nginx 服务

# kubectl patch svc nginx --patch \
>   '{"spec": { "type": "NodePort", "ports": [ { "nodePort": 30000, "port": 80, "protocol": "TCP", "targetPort": 8080 } ] } }'
service/nginx patched

to update nodeport and targetport use the below command

kubectl patch svc nginx --patch \
  '{"spec": { "type": "NodePort", "ports": [ { "nodePort": 32000, "port": 80, "protocol": "TCP", "targetPort": 8080 } ] } }'

验证 targetPort 是否更新为 8080

master $ kubectl get svc nginx -oyamlapiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2019-08-29T11:08:45Z"
  labels:
    app: nginx
  name: nginx
  namespace: default
  resourceVersion: "5837"
  selfLink: /api/v1/namespaces/default/services/nginx
  uid: 5e7f6165-ca4d-11e9-be03-0242ac110042
spec:
  clusterIP: 10.105.220.186
  externalTrafficPolicy: Cluster
  ports:
  - name: nginxport
    nodePort: 30000
    port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: nginx
    tier: frontend
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

使用类似的方法进行部署

kubectl patch deploy nginx --patch .....

【讨论】:

  • 我可以使用单个命令同时修补部署和服务吗?
  • 如果要将节点端口更改为 32000 我应该如何修改命令?
  • 我实际上是在尝试使用 html 和 node.js 创建一个容器管理面板,用户可以使用文本框和按钮更改面板本身的端口
  • 我需要为容器端口单独修补部署?
猜你喜欢
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 2020-10-23
  • 2019-01-09
  • 2020-12-17
  • 1970-01-01
  • 2020-12-14
  • 2017-09-10
相关资源
最近更新 更多