Я воспроизвел вашу проблему (на Google Compute Engine
). Попробовал несколько сценариев ios, чтобы найти обходной путь / решение для этой проблемы.
Первое, что я хочу упомянуть, это то, что вы предоставили ServiceAccount
и Deployment
YAML. Вам также нужны ClusterRoleBinding
, RoleBinding
, ApiService
и др. c. Все необходимые YAML можно найти в этом репозитории Github .
Для быстрого развертывания metrics-server
со всеми необходимыми настройками вы можете использовать:
$ git clone https://github.com/kubernetes-sigs/metrics-server.git
$ cd metrics-server/deploy/
$ kubectl apply -f kubernetes/
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
deployment.apps/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
Второе, что я советую вам проверить ваши CNI
стручки (calico-node-d4rnh
и calico-node-hawked
). Создано 4 часа 11 минут, но Ready 0/1
.
Последнее, что касается сбора данных о процессоре и памяти из модулей и узлов.
Использование Calico
Если вы используете один узел kubeadm
, он будет работать правильно, однако, если вы используете более 1 узла в kubeadm
, это вызовет некоторые проблемы. На Github существует множество похожих тем. Я пробовал с различными флагами в args:
, но безуспешно. В metrics-server
журналах (-v=6
) вы сможете увидеть, что показатели собираются. В этой ветке Github один из пользователей Github опубликовал ответ, который является обходным путем для этой проблемы. Это также упоминается в K8s документах о hostNetwork
.
Добавление hostNetwork: true
- это то, что, наконец, заставило metrics-server
работать на меня. Без этого нада. Без kubelet-preferred-address-types line
я мог бы запрашивать мой главный узел, но не два моих рабочих узла, и при этом я не мог бы запрашивать модули, очевидно, нежелательные результаты. Отсутствие kubelet-insecure-tls
также приводит к неработоспособной установке metrics-server
.
spec:
hostNetwork: true
containers:
- args:
- --kubelet-insecure-tls
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP
- --v=6
image: k8s.gcr.io/metrics-server-amd64:v0.3.6
imagePullPolicy: Always
Если вы развернете эту конфигурацию, она будет работать.
$ kubectl describe apiservice v1beta1.metrics.k8s.io
Name: v1beta1.metrics.k8s.io
...
Status:
Conditions:
Last Transition Time: 2020-02-20T09:37:59Z
Message: all checks passed
Reason: Passed
Status: True
Type: Available
Events: <none>
Кроме того, вы можете увидеть разницу при использовании host network: true
при проверке iptables
. Гораздо больше записей по сравнению с развертыванием без этой конфигурации.
После этого вы можете редактировать развертывание, удалять или комментировать host network: true
.
$ kubectl edit deploy metrics-server -n kube-system
deployment.apps/metrics-server edited
$ kubectl top pods
NAME CPU(cores) MEMORY(bytes)
nginx-6db489d4b7-2qhzw 0m 3Mi
nginx-6db489d4b7-9fvrj 0m 2Mi
nginx-6db489d4b7-dgbf9 0m 2Mi
nginx-6db489d4b7-dvcz5 0m 2Mi
Также вы сможете найти метрики, используя:
$ kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
Для лучшей видимости вы также можете использовать jq
.
$ kubectl get --raw /apis/metrics.k8s.io/v1beta1/pods | jq .
Использование плетения Net
Когда вы будете использовать Weave Net и вместо Calico он будет работать без установки host network
.
$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Однако вам придется работать с certificates
. Но если вас не волнует безопасность, вы можете просто использовать --kubelet-insecure-tls
, как в предыдущем примере, когда был использован Calico
.