【发布时间】:2019-11-26 21:42:04
【问题描述】:
我们发现在我们的 daemonset 部署描述符中定义的端口并没有反映在正在运行的 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 主机端口处于活动状态。
这看起来像错误吗?
谢谢!
【问题讨论】:
-
您使用的是哪个云提供商,您的 kubernetes 和 kubectl 的版本是什么?
-
我可以在 OpenStack 环境中复制问题,使用这些版本
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.2", GitCommit:"cff46ab41ff0bb44d8584413b598ad8360ec1def", GitTreeState:"clean", BuildDate:"2019-01-10T23:35:51Z", GoVersion:"go1.11.4", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.2", GitCommit:"cff46ab41ff0bb44d8584413b598ad8360ec1def", GitTreeState:"clean", BuildDate:"2019-01-10T23:28:14Z", GoVersion:"go1.11.4", Compiler:"gc", Platform:"linux/amd64"} -
作为一个兴趣点,如果我在最后一个部署描述符上使用 'kubectl apply' - 这导致主机端口消失 - 主机端口设置正确
-
您的 kubernetes 版本是多少?
$ kubectl version -
kubectl version的输出在我上面的回复中给出 - 据我所见,服务器和客户端都是 1.13.2。抱歉,我没有说清楚这是 kubernetes 版本而不是 OpenStack
标签: kubernetes