kubernetes - metrics-server pod 应该在主节点还是工作节点上运行?
问题描述
我是 k8s 的新手,我正在尝试在主节点上部署仪表板,部分部署是启动指标服务器。完整的文档可以在这里找到(dashboard / metrics-server)。
我的问题与部署后我们可以立即看到的警告有关:
$ kubectl describe pods -n kube-system metrics-server-74d7f54fdc-psz5p
Name: metrics-server-74d7f54fdc-psz5p
Namespace: kube-system
Priority: 0
Node: <none>
Labels: k8s-app=metrics-server
pod-template-hash=74d7f54fdc
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/metrics-server-74d7f54fdc
Containers:
metrics-server:
Image: my.repo.net/k8s.gcr.io/metrics-server-amd64:v0.3.6
Port: 4443/TCP
Host Port: 0/TCP
Args:
--cert-dir=/tmp
--secure-port=4443
Environment: <none>
Mounts:
/tmp from tmp-dir (rw)
/var/run/secrets/kubernetes.io/serviceaccount from metrics-server-token-d47dm (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
tmp-dir:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
metrics-server-token-d47dm:
Type: Secret (a volume populated by a Secret)
SecretName: metrics-server-token-d47dm
Optional: false
QoS Class: BestEffort
Node-Selectors: kubernetes.io/arch=amd64
kubernetes.io/os=linux
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 116s (x49 over 66m) default-scheduler 0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.
在阅读了其他问题之后,例如Node 在部署到 Kubernetes 集群时有 pod 不能容忍错误,并且1 个节点有 pod 在 kubernetes 集群中不能容忍的 taints,我可以理解为什么会出现这个问题,但我是困惑于我们是否应该在图像上添加我们自己的这种关系,例如(https://github.com/kubernetes-sigs/metrics-server/releases/tag/v0.3.7):
tolerations:
- key: "example-key"
operator: "Exists"
effect: "NoSchedule"
如果主节点应该能够收集他自己的指标,这个参数不应该默认添加吗?如果不是,那么我们应该在所有工作人员上部署 UI(这没有任何意义)。
也许在这方面有更多经验的人可以分享一些启示?
解决方案
度量服务器可以部署到工作节点中,不一定要部署在主节点中以获取有关主服务器的度量。metric server 使用 kubeapi-server 来获取关于集群的各种指标,metric server 的要求是:
- 必须可以从 kubeapi-server 访问
- Kubelet 授权设置正确参考此链接
您的集群中有工作节点吗?他们的任何污点是否应用于这些节点?此外,根据您的部署 yaml 节点选择器已配置以下值,请确保您的工作节点具有这 2 个标签
- kubernetes.io/arch=amd64
- kubernetes.io/os=linux
您可以使用以下命令将标签添加到节点(如果不存在)。
kubectl label nodes *node-name* kubernetes.io/arch=amd64
推荐阅读
- django - 基于用户类型实现权限的最佳方式
- java - 为什么类扩展调用原始类的私有方法?
- android - 我如何为应用操作设置特定包(应用)
- unix - sudo:/usr/bin/sudo 必须由 uid 0 拥有,并在 chmod 755 之后设置 setuid 位
- python - 如何进行多键分组json转换?
- html - CSS 过渡不适用于空白:nowrap 和文本溢出:悬停时省略号
- python-3.x - 在 GPU 上运行 Keras 模型时内存不足
- amazon-web-services - 将 Windows DNS 服务器与 AWS Lightsail 结合使用
- tensorflow - 如何正确使用张量流函数 embedding_lookup
- python - Tensorflow Serving Predict REST API“未正确格式化 base64 数据”错误