【问题标题】:kubenetes can'n not get nodes info after approve certificate from kubelet从 kubelet 获得批准证书后,kubernetes 无法获取节点信息
【发布时间】:2021-03-22 23:41:38
【问题描述】:

我用手动的方式安装kubernetes。在 master 批准 kubelet 的证书请求后,我无法获取节点信息。

首先,etcdkube-apiserverkube-controller-managerkube-scheduler已经安装正确。执行命令kubectl get cs 得到以下输出:

[root@master cfg]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-2               Healthy   {"health":"true"}
etcd-0               Healthy   {"health":"true"}
etcd-1               Healthy   {"health":"true"}

然后,我尝试在主节点和工作节点上安装 kubelet。 在主节点上执行命令kubectl approve node-csr-V_FXPiKHAtqS_9GH27RCk6hPNWE0nF8bLSH6Ot7C360 kubectl get csr

[root@master cfg]# kubectl get csr
NAME                                                   AGE    SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-Tbrw3ia-c0D7kgIURIe_JnP1PCEdwf9XeATP0KcsyBg   111m   kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued
node-csr-V_FXPiKHAtqS_9GH27RCk6hPNWE0nF8bLSH6Ot7C360   131m   kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued

但是,我无法从此集群中获取节点:

[root@master cfg]# kubectl get node
No resources found in default namespace.

任何人都可以帮助我吗?期待您的帮助或一些想法来追踪问题。 谢谢!

【问题讨论】:

    标签: kubernetes kubelet


    【解决方案1】:

    我找到了这个问题的原因。主节点和工作节点上kubelet 的服务并没有真正启动。 我从 /var/log/message 收到错误,请关注:

    Dec 11 21:21:20 worker1 systemd: Started Kubernetes Kubelet.
    Dec 11 21:21:20 worker1 systemd: Starting Kubernetes Kubelet...
    Dec 11 21:21:20 worker1 systemd: Started Kubernetes systemd probe.
    Dec 11 21:21:20 worker1 systemd: Starting Kubernetes systemd probe.
    Dec 11 21:21:20 worker1 kubelet: F1211 21:21:20.905947    3066 server.go:274] failed to run Kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
    
    

    这意味着 docker 的 cgroup driver 配置与 kubelet 冲突。 更新docker服务文件/usr/lib/systemd/system/docker.service后,设置--exec-opt native.cgroupdriver=cgroupfs

    [Unit]
    Description=Docker Application Container Engine
    Documentation=http://docs.docker.com
    After=network.target
    Wants=docker-storage-setup.service
    Requires=docker-cleanup.timer
    
    [Service]
    Type=notify
    NotifyAccess=main
    EnvironmentFile=-/run/containers/registries.conf
    EnvironmentFile=-/etc/sysconfig/docker
    EnvironmentFile=-/etc/sysconfig/docker-storage
    EnvironmentFile=-/etc/sysconfig/docker-network
    Environment=GOTRACEBACK=crash
    Environment=DOCKER_HTTP_HOST_COMPAT=1
    Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
    ExecStart=/usr/bin/dockerd-current \
              --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
              --default-runtime=docker-runc \
              --exec-opt native.cgroupdriver=cgroupfs \
              --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
              --init-path=/usr/libexec/docker/docker-init-current \
              --seccomp-profile=/etc/docker/seccomp.json \
              $OPTIONS \
              $DOCKER_STORAGE_OPTIONS \
              $DOCKER_NETWORK_OPTIONS \
              $ADD_REGISTRY \
              $BLOCK_REGISTRY \
              $INSECURE_REGISTRY \
              $REGISTRIES
    ExecReload=/bin/kill -s HUP $MAINPID
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    TimeoutStartSec=0
    Restart=on-abnormal
    KillMode=process
    
    [Install]
    WantedBy=multi-user.target
    
    

    然后,重启docker和kubelet服务,问题就解决了。服务kubelet 工作正常。

    执行命令kubelet get nodes,输出如下:

    [root@master ~]# kubectl get nodes
    NAME      STATUS     ROLES    AGE    VERSION
    master    NotReady   <none>   8s     v1.18.3
    worker1   NotReady   <none>   112s   v1.18.3
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-24
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2012-07-06
      • 2020-05-07
      • 1970-01-01
      相关资源
      最近更新 更多