0

我正在使用 azure 的容器引擎运行 kubernetes 集群。我对其中一项 kubernetes 服务有疑问,该服务执行资源监控heapster。吊舱每分钟或类似的东西重新启动一次。我尝试删除 heapster 部署、副本集和 pod,然后重新创建部署。它立即返回相同的行为。

当我查看带有 heapster 标签的资源时,它看起来有点奇怪:

$ kubectl get deploy,rs,po -l k8s-app=heapster --namespace=kube-system
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/heapster   1         1         1            1           17h

NAME                     DESIRED   CURRENT   READY     AGE
rs/heapster-2708163903   1         1         1         17h
rs/heapster-867061013    0         0         0         17h

NAME                           READY     STATUS    RESTARTS   AGE
po/heapster-2708163903-vvs1d   2/2       Running   0          0s

由于某种原因,有两个副本集。rs/heapster-867061013即使我删除所有资源并重新部署它们,被调用的那个仍然会再次出现。上面还显示了 pod 刚刚启动,这是它不断创建的问题,然后它运行了几秒钟并创建了一个新的。我是运行 kubernetes 的新手,所以我不确定哪些日志文件与此问题相关。

来自 heapster 容器的日志

heapster.go:72] /heapster source=kubernetes.summary_api:""
heapster.go:73] Heapster version v1.3.0
configs.go:61] Using Kubernetes client with master "https://10.0.0.1:443" and version v1
configs.go:62] Using kubelet port 10255
heapster.go:196] Starting with Metric Sink
heapster.go:106] Starting heapster on port 8082

来自 heapster-nanny 容器的日志

pod_nanny.go:56] Invoked by [/pod_nanny --cpu=80m --extra-cpu=0.5m --memory=140Mi --extra-memory=4Mi --threshold=5 --deployment=heapster --container=heapster --poll-period=300000 --estimator=exponential]
pod_nanny.go:68] Watching namespace: kube-system, pod: heapster-2708163903-mqlsq, container: heapster.
pod_nanny.go:69] cpu: 80m, extra_cpu: 0.5m, memory: 140Mi, extra_memory: 4Mi, storage: MISSING, extra_storage: 0Gi
pod_nanny.go:110] Resources: [{Base:{i:{value:80 scale:-3} d:{Dec:<nil>} s:80m Format:DecimalSI} ExtraPerNode:{i:{value:5 scale:-4} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:146800640 scale:0} d:{Dec:<nil>} s:140Mi Format:BinarySI} ExtraPerNode:{i:{value:4194304 scale:0} d:{Dec:<nil>} s:4Mi Format:BinarySI} Name:memory}]
4

2 回答 2

1

部署控制器保留旧的 ReplicaSet 资源以进行快速回滚是完全正常且重要的。

Deployment 资源管理 ReplicaSet 资源。您的 heapster Deployment 配置为运行 1 个 pod - 这意味着它将始终尝试使用 1 个 pod 创建一个 ReplicaSet。如果您对 Deployment 进行更新(例如,新的 heapster 版本),则 Deployment 资源会创建一个新的 ReplicaSet,它将使用新版本调度一个 pod。同时,旧的 ReplicaSet 资源将其所需的 Pod 设置为 0,但仍保留资源本身以方便回滚。如您所见,旧的 ReplicaSetrs/heapster-867061013有 0 个 pod 在运行。如果您进行回滚,Deploymentdeploy/heapster会将 Pod 的数量rs/heapster-867061013增加到 1 并将数量减少rs/heapster-2708163903回 0。您还应该查看文档关于部署控制器(如果您还没有完成)。

尽管如此,为什么您新创建的 Deployment Controller 会立即创建 2 个 ReplicaSet,这对我来说似乎很奇怪。您是否在删除部署控制器后和创建新控制器之前等待了几秒钟(例如 20 秒)?对我来说,有时删除在整个集群中传播之前需要一些时间,如果我重新创建得太快,那么相同的资源会被重用。

关于您提到的 heapster pod 娱乐:pod 有一个restartPolicy。如果设置为Never,则 Pod 将由其 ReplicaSet 重新创建,以防它退出(这意味着创建了一个新的 Pod 资源并删除了旧的 Pod 资源)。我的猜测是你的 heapster pod 有这个Never策略集。它可能由于某些错误而退出并达到某种Failed状态(您需要使用日志检查)。然后过了一会儿,ReplicaSet 创建了一个新的 pod。

于 2017-09-08T08:38:49.320 回答
0

OK,那么恰好是azure容器服务默认kubernetes配置的问题。我从天蓝色的支持者那里得到了一些帮助。

通过将标签添加addonmanager.kubernetes.io/mode: EnsureExists到 heapster 部署来解决问题。这是支持者引用的拉取请求:https ://github.com/Azure/acs-engine/pull/1133

于 2017-09-19T07:17:04.360 回答