gpt4 book ai didi

kubernetes - Pod 中的端口与部署描述符中的端口不同

转载 作者:行者123 更新时间:2023-12-02 11:46:55 25 4
gpt4 key购买 nike

我们发现在我们的 daemonset 部署描述符中定义的端口没有反射(reflect)在正在运行的 pod 中。
我们使用的镜像是 NGINX,我们将这些主机端口路由到 80 和 8080:

        ports:
- containerPort: 80
hostPort: 30003
- containerPort: 8080
hostPort: 30002

没有错,部署历史显示这些端口在 pod 中处于事件状态:
daemonset.extensions/nginx-licensed with revision #25
Pod Template:
Containers:
nginx-licensed:
Image: nginx-licensed:1.0.117
Ports: 80/TCP, 8080/TCP
Host Ports: 30003/TCP, 30002/TCP

我们想更改使用的主机端口,并允许逐步更改基础架构,我们将旧主机端口和新主机端口分配给相同的容器端口:
        ports:
- name: new80
containerPort: 80
hostPort: 20003
- name: old80
containerPort: 80
hostPort: 30003
- name: new8080
containerPort: 8080
hostPort: 20002
- name: old8080
containerPort: 8080
hostPort: 30002

此时,“kubectl apply”只会导致 2000x 端口处于事件状态:
daemonset.extensions/nginx-licensed with revision #26
Pod Template:
Containers:
nginx-licensed:
Image: nginx-licensed:1.0.119
Ports: 80/TCP, 8080/TCP
Host Ports: 20003/TCP, 20002/TCP

请注意,如果我们重新启动 pod,所有四个端口都将变为事件状态:
daemonset.extensions/nginx-licensed with revision #1
Pod Template:
Containers:
nginx-licensed:
Image: nginx-licensed:1.0.119
Ports: 80/TCP, 80/TCP, 8080/TCP, 8080/TCP
Host Ports: 20003/TCP, 30003/TCP, 20002/TCP, 30002/TCP


但是,如果我们不重新启动 pod,并尝试删除 3000x pod,即:
        ports:
- containerPort: 80
hostPort: 20003
- containerPort: 8080
hostPort: 20002

我们最终没有容器港口! :
daemonset.extensions/nginx-licensed with revision #27
Pod Template:
Containers:
nginx-licensed:
Image: nginx-licensed:1.0.119
Ports: 80/TCP, 8080/TCP
Host Ports: 0/TCP, 0/TCP

任何想法为什么会这样,或者我们做错了什么?我们回滚到定义了四个端口的版本(即 2000x 和 3000x),这导致只有 2000x 主机端口处于事件状态。

这看起来像一个错误吗?

谢谢!

最佳答案

我在 GKE 上重现了您的场景,我的症状与您相同。

有一种方法可以实现您的需求,为此您需要patch你的对象。您需要使用补丁类型merge-patch+json作为补丁,您需要提供完整/所需的 containerPort 列表。

首先,您需要导出 yaml 文件并进行必要的更改:

$ kubectl get deployments <your-deployment> -o yaml --export > patch-file.yaml

进行更改后,对其进行修补:
$ kubectl patch deployments <your-deployment> --type merge --patch "$(cat patch-file.yaml)"

这样做后,我有你想要的状态:

$ kubectl describe deployments nginx-deployment | grep -i ports
Ports: 80/TCP, 80/TCP, 8080/TCP, 8080/TCP
Host Ports: 20003/TCP, 30003/TCP, 20002/TCP, 30002/TCP

如果您想深入了解这是如何在后台工作的,请参阅文档 herehere .

关于kubernetes - Pod 中的端口与部署描述符中的端口不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58918421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com