error Нет доступных узлов, соответствующих всем предикатам: MatchNodeSelector (7), PodToleratesNodeTaints (1) для показателей состояния куба

Я получаю сообщение об ошибке «Нет доступных узлов, соответствующих всем предикатам: MatchNodeSelector (7), PodToleratesNodeTaints (1)» для показателей состояния куба. Пожалуйста, посоветуйте мне, как решить эту проблему

admin @ ip-172-20-58-79: ~ / kubernetes-prometheus $ kubectl describe po -n kube-system kube-state-metrics-747bcc4d7d-kfn7t

Events:
  Type     Reason            Age               From               Message
  ----     ------            ----              ----               -------
  Warning  FailedScheduling  3s (x20 over 4m)  default-scheduler  No nodes are available that match all of the predicates: MatchNodeSelector (7), PodToleratesNodeTaints (1).

связана ли эта проблема с памятью на узле? Если да, то как мне это подтвердить? Я проверил все узлы, только один узел, кажется, превышает 80%, остальные - от 45% до 70% использования памяти.

Узел с использованием памяти 44%:  Узел с 44% -ым использованием памяток:

Общее использование памяти кластера:
 Общее использование памяти кластера:

на следующем снимке экрана показаны показатели состояния куба (0/1 вверх):

введите здесь описание изображения

Кроме того, Prometheus показывает кубернетические стручки (0/0 вверх), это из-за того, что метрики состояния куба не работают или по какой-либо другой причине? и kubernetes-apiservers (0/1 вверх), показанные на скриншоте выше, почему не работает? Как это исправить?

введите здесь описание изображения

admin @ ip-172-20-58-79: ~ / kubernetes-prometheus $ sudo tail -f /var/log/kube-apiserver.log | ошибка grep

I0110 10:15:37.153827       7 logs.go:41] http: TLS handshake error from 172.20.44.75:60828: remote error: tls: bad certificate
I0110 10:15:42.153543       7 logs.go:41] http: TLS handshake error from 172.20.44.75:60854: remote error: tls: bad certificate
I0110 10:15:47.153699       7 logs.go:41] http: TLS handshake error from 172.20.44.75:60898: remote error: tls: bad certificate
I0110 10:15:52.153788       7 logs.go:41] http: TLS handshake error from 172.20.44.75:60936: remote error: tls: bad certificate
I0110 10:15:57.154014       7 logs.go:41] http: TLS handshake error from 172.20.44.75:60992: remote error: tls: bad certificate
E0110 10:15:58.929167       7 status.go:62] apiserver received an error that is not an metav1.Status: write tcp 172.20.58.79:443->172.20.42.187:58104: write: connection reset by peer
E0110 10:15:58.931574       7 status.go:62] apiserver received an error that is not an metav1.Status: write tcp 172.20.58.79:443->172.20.42.187:58098: write: connection reset by peer
E0110 10:15:58.933864       7 status.go:62] apiserver received an error that is not an metav1.Status: write tcp 172.20.58.79:443->172.20.42.187:58088: write: connection reset by peer
E0110 10:16:00.842018       7 status.go:62] apiserver received an error that is not an metav1.Status: write tcp 172.20.58.79:443->172.20.42.187:58064: write: connection reset by peer
E0110 10:16:00.844301       7 status.go:62] apiserver received an error that is not an metav1.Status: write tcp 172.20.58.79:443->172.20.42.187:58058: write: connection reset by peer
E0110 10:18:17.275590       7 status.go:62] apiserver received an error that is not an metav1.Status: write tcp 172.20.58.79:443->172.20.44.75:37402: write: connection reset by peer
E0110 10:18:17.275705       7 runtime.go:66] Observed a panic: &errors.errorString{s:"kill connection/stream"} (kill connection/stream)
E0110 10:18:17.276401       7 runtime.go:66] Observed a panic: &errors.errorString{s:"kill connection/stream"} (kill connection/stream)
E0110 10:18:17.277808       7 status.go:62] apiserver received an error that is not an metav1.Status: write tcp 172.20.58.79:443->172.20.44.75:37392: write: connection reset by peer

Обновление после ответа МэггиО:

admin@ip-172-20-58-79:~/kubernetes-prometheus/kube-state-metrics-configs$ cat   deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: kube-state-metrics
    app.kubernetes.io/version: v1.8.0
  name: kube-state-metrics
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: kube-state-metrics
  template:
    metadata:
      labels:
        app.kubernetes.io/name: kube-state-metrics
        app.kubernetes.io/version: v1.8.0
    spec:
      containers:
      - image: quay.io/coreos/kube-state-metrics:v1.8.0
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 5
          timeoutSeconds: 5
        name: kube-state-metrics
        ports:
        - containerPort: 8080
          name: http-metrics
        - containerPort: 8081
          name: telemetry
        readinessProbe:
          httpGet:
            path: /
            port: 8081
          initialDelaySeconds: 5
          timeoutSeconds: 5
      nodeSelector:
        kubernetes.io/os: linux
      serviceAccountName: kube-state-metrics

Кроме того, я хочу добавить эту команду в приведенный выше deployment.yaml, но получаю ошибку отступа. покажите, пожалуйста, помогите мне, где именно его добавить.

command:
- /metrics-server
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP

Обновление 2: @MaggieO даже после добавления команд / аргументов показывает ту же ошибку, а модуль находится в состоянии ожидания:

Обновите deployment.yaml:

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "3"
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"kube-state-metrics","app.kubernetes.io/version":"v1.8.0"},"name":"kube-state-metrics","namespace":"kube-system"},"spec":{"replicas":1,"selector":{"matchLabels":{"app.kubernetes.io/name":"kube-state-metrics"}},"template":{"metadata":{"labels":{"app.kubernetes.io/name":"kube-state-metrics","app.kubernetes.io/version":"v1.8.0"}},"spec":{"containers":[{"args":["--kubelet-insecure-tls","--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname"],"image":"quay.io/coreos/kube-state-metrics:v1.8.0","imagePullPolicy":"Always","livenessProbe":{"httpGet":{"path":"/healthz","port":8080},"initialDelaySeconds":5,"timeoutSeconds":5},"name":"kube-state-metrics","ports":[{"containerPort":8080,"name":"http-metrics"},{"containerPort":8081,"name":"telemetry"}],"readinessProbe":{"httpGet":{"path":"/","port":8081},"initialDelaySeconds":5,"timeoutSeconds":5}}],"nodeSelector":{"kubernetes.io/os":"linux"},"serviceAccountName":"kube-state-metrics"}}}}
  creationTimestamp: 2020-01-10T05:33:13Z
  generation: 4
  labels:
    app.kubernetes.io/name: kube-state-metrics
    app.kubernetes.io/version: v1.8.0
  name: kube-state-metrics
  namespace: kube-system
  resourceVersion: "178851301"
  selfLink: /apis/extensions/v1beta1/namespaces/kube-system/deployments/kube-state-metrics
  uid: b20aa645-336a-11ea-9618-0607d7cb72ed
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: kube-state-metrics
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app.kubernetes.io/name: kube-state-metrics
        app.kubernetes.io/version: v1.8.0
    spec:
      containers:
      - args:
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP
        image: quay.io/coreos/kube-state-metrics:v1.8.0
        imagePullPolicy: Always
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
initialDelaySeconds: 5
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 5
        name: kube-state-metrics
        ports:
        - containerPort: 8080
          name: http-metrics
          protocol: TCP
        - containerPort: 8081
          name: telemetry
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /
            port: 8081
            scheme: HTTP
          initialDelaySeconds: 5
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 5
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      nodeSelector:
        kubernetes.io/os: linux
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: kube-state-metrics
      serviceAccountName: kube-state-metrics
      terminationGracePeriodSeconds: 30
status:
  conditions:
  - lastTransitionTime: 2020-01-10T05:33:13Z
    lastUpdateTime: 2020-01-10T05:33:13Z
    message: Deployment does not have minimum availability.
    reason: MinimumReplicasUnavailable
    status: "False"
    type: Available
  - lastTransitionTime: 2020-01-15T07:24:27Z
    lastUpdateTime: 2020-01-15T07:29:12Z
    message: ReplicaSet "kube-state-metrics-7f8c9c6c8d" is progressing.
    reason: ReplicaSetUpdated
    status: "True"
    type: Progressing
  observedGeneration: 4
  replicas: 2
  unavailableReplicas: 2
  updatedReplicas: 1

Обновление 3: невозможно получить узел, как показано на следующем снимке экрана, дайте мне знать, как устранить эту проблему.

введите здесь описание изображения


person Ashish Karpe    schedule 10.01.2020    source источник
comment
предоставить дополнительную информацию о вашей среде kubernetes и о том, как была выполнена установка?   -  person Arghya Sadhu    schedule 10.01.2020
comment
За ошибку sin kube API Server logs ... IP-адреса 172.20.44.75, 172.20.58.79, 172.20.42.187 ... они IP-адреса главных узлов? Можете ли вы перечислить IP-адреса всех ваших главных и рабочих узлов?   -  person Arghya Sadhu    schedule 10.01.2020
comment
@ArghyaSadhu У меня только один мастер, т.е. 172.20.58.79   -  person Ashish Karpe    schedule 13.01.2020
comment
Вы должны разделить все свои обновления и задать несколько вопросов. Это правильное занятие, если у вас есть проблемы, связанные со следующими конкретными шагами, указанными в опубликованном ответе.   -  person Malgorzata    schedule 16.01.2020
comment
Почему так много правок? Один вопрос SO должен относиться к одной проблеме. Вы продолжаете редактировать свой вопрос   -  person PjoterS    schedule 16.01.2020


Ответы (1)


Ошибка на kubernetes-apiservers Get https:// ...: x509: certificate is valid for 100.64.0.1, 127.0.0.1, not 172.20.58.79 означает, что узлы панели управления выбираются случайным образом, а apiEndpoint изменяется только при удалении узла из кластера, это не сразу заметно, поскольку требует изменений с узлами в кластере.

Временное решение: вручную синхронизируйте kube-apiserver.pem между главными узлами и перезапустите контейнер kube-apiserver.

Вы также можете удалить apiserver. и apiserver-kubelet-client. и воссоздать их с помощью команд:

$ kubeadm init phase certs apiserver --config=/etc/kubernetes/kubeadm-config.yaml
$ kubeadm init phase certs apiserver-kubelet-client --config=/etc/kubernetes/kubeadm-config.yaml
$ systemctl stop kubelet
delete the docker container with kubelet
$ systemctl restart kubelet

Похожие проблемы: сертификат x509, kubelet-x509.

Затем решите проблему с сервером метрик.

Измените файл metrics-server-deployment.yaml и установите следующие аргументы:

command:
- /metrics-server
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP

Сервер метрик теперь может разговаривать с узлом (раньше он не работал, потому что не мог разрешить имя хоста узла).

Дополнительную информацию можно найти здесь: metrics-server-issue.

person Malgorzata    schedule 10.01.2020
comment
@MagieO Я не могу добавить команду без ошибок в свой файл развертывания, поэтому, пожалуйста, помогите мне, где именно добавить эти 4 строки в моем файле развертывания, которые я добавил в свой вопрос выше - person Ashish Karpe; 13.01.2020
comment
пожалуйста, могу ли я попросить вас вставить файл развертывания после добавления этих 4 строк в ответ выше, чтобы избежать проблем с отступами - person Ashish Karpe; 13.01.2020
comment
даже после добавления команд / аргументов отображается та же ошибка, и модуль находится в состоянии ожидания: проверьте после обновления 2 в приведенном выше вопросе - person Ashish Karpe; 15.01.2020