ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [K8s] 초기 설치 후, componentstatuses Unhealthy
    System & Dev Story/K8s 2021. 2. 19. 18:21
    root@k8s-master:~# kubectl version
    Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:28:09Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}

     

    K8s 1.20.2 버전에서 "kubectl get componentstatuses" 명령어로 상태 확인 시 아래와 같이 스케쥴러와 컨트롤러가 Unhealthy로 나타나는 문제 발생

    root@k8s-master:~# kubectl get componentstatuses
    Warning: v1 ComponentStatus is deprecated in v1.19+
    NAME                 STATUS      MESSAGE                                                                                       ERROR
    scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
    controller-manager   Unhealthy   Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
    etcd-0               Healthy     {"health":"true"}

     

    Pod도 잘 떠있고, 네트워크 포트도 정상적으로 Listen 된 상태이지만 포트가 다르게 보이는데... 이게 문제인가?

    root@k8s-master:~# kubectl get pods -n kube-system
    NAME                                      READY   STATUS    RESTARTS   AGE
    calico-kube-controllers-86bddfcff-ktp5m   1/1     Running   1          9d
    calico-node-p9p25                         1/1     Running   1          9d
    calico-node-q88cs                         1/1     Running   1          9d
    calico-node-twrxt                         1/1     Running   1          9d
    coredns-74ff55c5b-4z59m                   1/1     Running   1          9d
    coredns-74ff55c5b-tcgcd                   1/1     Running   1          9d
    etcd-k8s-master                           1/1     Running   1          9d
    kube-apiserver-k8s-master                 1/1     Running   1          9d
    kube-controller-manager-k8s-master        1/1     Running   0          17m
    kube-proxy-r86ft                          1/1     Running   1          9d
    kube-proxy-t4jsw                          1/1     Running   1          9d
    kube-proxy-z8s4g                          1/1     Running   1          9d
    kube-scheduler-k8s-master                 1/1     Running   0          17m
    root@k8s-master:~# netstat -atnp | grep -i listen
    tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      2070337/kubelet
    tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      3673/kube-proxy
    tcp        0      0 127.0.0.1:9099          0.0.0.0:*               LISTEN      4279/calico-node
    tcp        0      0 192.168.0.13:2379       0.0.0.0:*               LISTEN      2424/etcd
    tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN      2424/etcd
    tcp        0      0 192.168.0.13:2380       0.0.0.0:*               LISTEN      2424/etcd
    tcp        0      0 127.0.0.1:2381          0.0.0.0:*               LISTEN      2424/etcd
    tcp        0      0 127.0.0.1:10257         0.0.0.0:*               LISTEN      2070042/kube-contro
    tcp        0      0 127.0.0.1:10259         0.0.0.0:*               LISTEN      2070706/kube-schedu
    tcp        0      0 0.0.0.0:179             0.0.0.0:*               LISTEN      4419/bird
    tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      651/systemd-resolve
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      725/sshd: /usr/sbin
    tcp        0      0 127.0.0.1:37591         0.0.0.0:*               LISTEN      2070337/kubelet
    tcp6       0      0 :::10250                :::*                    LISTEN      2070337/kubelet
    tcp6       0      0 :::10251                :::*                    LISTEN      2070706/kube-schedu
    tcp6       0      0 :::6443                 :::*                    LISTEN      2353/kube-apiserver
    tcp6       0      0 :::10252                :::*                    LISTEN      2070042/kube-contro
    tcp6       0      0 :::10256                :::*                    LISTEN      3673/kube-proxy
    tcp6       0      0 :::22                   :::*                    LISTEN      725/sshd: /usr/sbin

     

     

    "/etc/kubernetes/manifests" 경로로 이동

    root@k8s-master:~# cd /etc/kubernetes/manifests/
    root@k8s-master:/etc/kubernetes/manifests#

     

    에디터로 "kube-controller-manager.yaml" 파일을 열고, 24번째 --port=0을 주석 처리

    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        component: kube-controller-manager
        tier: control-plane
      name: kube-controller-manager
      namespace: kube-system
    spec:
      containers:
      - command:
        - kube-controller-manager
        - --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
        - --authorization-kubeconfig=/etc/kubernetes/controller-manager.conf
        - --bind-address=127.0.0.1
        - --client-ca-file=/etc/kubernetes/pki/ca.crt
        - --cluster-name=kubernetes
        - --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
        - --cluster-signing-key-file=/etc/kubernetes/pki/ca.key
        - --controllers=*,bootstrapsigner,tokencleaner
        - --kubeconfig=/etc/kubernetes/controller-manager.conf
        - --leader-elect=true
          #    - --port=0
        - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
        - --root-ca-file=/etc/kubernetes/pki/ca.crt
        - --service-account-private-key-file=/etc/kubernetes/pki/sa.key
        - --use-service-account-credentials=true
        image: k8s.gcr.io/kube-controller-manager:v1.20.2
        imagePullPolicy: IfNotPresent

     

    에디터로 "kube-scheduler.yaml" 파일을 열고, 10번째 --port=0을 주석 처리

    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        component: kube-scheduler
        tier: control-plane
      name: kube-scheduler
      namespace: kube-system
    spec:
      containers:
      - command:
        - kube-scheduler
        - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf
        - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf
        - --bind-address=127.0.0.1
        - --kubeconfig=/etc/kubernetes/scheduler.conf
        - --leader-elect=true
          #    - --port=0
        image: k8s.gcr.io/kube-scheduler:v1.20.2
        imagePullPolicy: IfNotPresent

     

    그리고 나서, kubelet을 재기동한다.

    root@k8s-master:~# systemctl restart kubelet.service

     

    Healthy 상태로 확인

    root@k8s-master:~# kubectl get componentstatuses
    Warning: v1 ComponentStatus is deprecated in v1.19+
    NAME                 STATUS    MESSAGE             ERROR
    scheduler            Healthy   ok
    controller-manager   Healthy   ok
    etcd-0               Healthy   {"health":"true"}
Designed by Tistory.