【问题标题】:Kubernetes does not start after restart system (Ubuntu)重启系统后 Kubernetes 不启动(Ubuntu)
【发布时间】:2022-04-25 11:53:45
【问题描述】:

我在 VirtualBox(Master 和 Node01)的两个 Ubuntu 上安装了 K8s。安装后(我按照 K8s 文档站点进行操作)我输入了 kubectl get nodes 并获得了状态为 Ready 的 bot 服务器。但是重启系统后我得到了这个:

# kubectl get nodes 
The connection to the server localhost:8080 was refused - did you specify the 
right host or port? 

我检查了 kubelet 服务,它正在运行:

# systemctl status kubelet
kubelet.service - kubelet: The Kubernetes Node Agent 
   Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled) 
  Drop-In: /etc/systemd/system/kubelet.service.d 
           └─10-kubeadm.conf 
   Active: active (running) since Mon 2017-04-24 10:01:51 CEST; 15min ago 
     Docs: http://kubernetes.io/docs/ 
Main PID: 13128 (kubelet) 
    Tasks: 21 
   Memory: 48.2M 
      CPU: 58.014s 
   CGroup: /system.slice/kubelet.service 
           ├─13128 /usr/bin/kubelet --kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true --pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --cluster-dns=10.96.0.10 --cluster-domain=cluster.local 
           └─13164 journalctl -k -f 

Apr 24 10:16:40 master kubelet[13128]: I0424 10:16:40.204156   13128 kuberuntime_manager.go:752] Back-off 5m0s restarting failed container=weave pod=weave-net-5qgvz_kube-system(4b7bb2f0-2691-11e7-bfb6-080027229776) 
Apr 24 10:16:40 master kubelet[13128]: E0424 10:16:40.204694   13128 pod_workers.go:182] Error syncing pod 4b7bb2f0-2691-11e7-bfb6-080027229776 ("weave-net-5qgvz_kube-system(4b7bb2f0-2691-11e7-bfb6-080027229776)"), skipping: fail 
Apr 24 10:16:42 master kubelet[13128]: I0424 10:16:42.972302   13128 operation_generator.go:597] MountVolume.SetUp succeeded for volume "kubernetes.io/secret/2b59d0d9-2692-11e7-bfb6-080027229776-default-token-h3v7c" (spec.Name: " 
Apr 24 10:16:48 master kubelet[13128]: I0424 10:16:48.949731   13128 operation_generator.go:597] MountVolume.SetUp succeeded for volume "kubernetes.io/secret/2bb42bc1-2692-11e7-bfb6-080027229776-default-token-h3v7c" (spec.Name: " 
Apr 24 10:16:51 master kubelet[13128]: I0424 10:16:51.978663   13128 operation_generator.go:597] MountVolume.SetUp succeeded for volume "kubernetes.io/secret/2b023c31-2692-11e7-bfb6-080027229776-default-token-h3v7c" (spec.Name: " 
Apr 24 10:16:52 master kubelet[13128]: I0424 10:16:52.909589   13128 operation_generator.go:597] MountVolume.SetUp succeeded for volume "kubernetes.io/secret/4b7bb2f0-2691-11e7-bfb6-080027229776-default-token-gslqd" (spec.Name: " 
Apr 24 10:16:53 master kubelet[13128]: I0424 10:16:53.186057   13128 kuberuntime_manager.go:458] Container {Name:weave Image:weaveworks/weave-kube:1.9.4 Command:[/home/weave/launch.sh] Args:[] WorkingDir: Ports:[] EnvFrom:[] Env: 
Apr 24 10:16:53 master kubelet[13128]: I0424 10:16:53.188091   13128 kuberuntime_manager.go:742] checking backoff for container "weave" in pod "weave-net-5qgvz_kube-system(4b7bb2f0-2691-11e7-bfb6-080027229776)" 
Apr 24 10:16:53 master kubelet[13128]: I0424 10:16:53.188717   13128 kuberuntime_manager.go:752] Back-off 5m0s restarting failed container=weave pod=weave-net-5qgvz_kube-system(4b7bb2f0-2691-11e7-bfb6-080027229776) 
Apr 24 10:16:53 master kubelet[13128]: E0424 10:16:53.189136   13128 pod_workers.go:182] Error syncing pod 4b7bb2f0-2691-11e7-bfb6-080027229776 ("weave-net-5qgvz_kube-system(4b7bb2f0-2691-11e7-bfb6-080027229776)"), skipping: fail 

这里是重启 kubelet 的 systemd 日志文件:Google Drive

...我不确定我在 doc 中遗漏了什么或 kubelet 发生了什么。我可以请你帮忙吗? :]

• Ubuntu 版本

cat /etc/os-release 
NAME="Ubuntu" 
VERSION="16.04.2 LTS (Xenial Xerus)" 
ID=ubuntu 
ID_LIKE=debian 
PRETTY_NAME="Ubuntu 16.04.2 LTS" 
VERSION_ID="16.04" 
HOME_URL="http://www.ubuntu.com/" 
SUPPORT_URL="http://help.ubuntu.com/" 
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" 
VERSION_CODENAME=xenial 
UBUNTU_CODENAME=xenial 

• 内核

# uname -a 
Linux ubuntu 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 

• Kubectl 版本

# kubectl version 
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.1", GitCommit:"b0b7a323cc5a4a2019b2e9520c21c7830b7f708e", GitTreeState:"clean", BuildDate:"2017-04-03T20:44:38Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"} 
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"2017-03-28T16:24:30Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"} 

• Kubeadm 版本

# kubeadm version 
kubeadm version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.1", GitCommit:"b0b7a323cc5a4a2019b2e9520c21c7830b7f708e", GitTreeState:"clean", BuildDate:"2017-04-03T20:33:27Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"} 

• Kubelet 版本

# kubelet --version 
Kubernetes v1.6.1 

• Docker 版本

# docker version 
Client: 
Version:      1.11.2 
API version:  1.23 
Go version:   go1.5.4 
Git commit:   b9f10c9 
Built:        Wed Jun  1 22:00:43 2016 
OS/Arch:      linux/amd64 

Server: 
Version:      1.11.2 
API version:  1.23 
Go version:   go1.5.4 
Git commit:   b9f10c9 
Built:        Wed Jun  1 22:00:43 2016 
OS/Arch:      linux/amd64 

【问题讨论】:

  • 您应该在 kube-api-server 日志中获得一些关于它无法启动的原因。
  • @Anirudh Ramanathan - 现在我正在分析 systemd 日志。但它有大约 200 行。可以放在哪里?
  • 日志已添加到问题中。
  • kubelet 日志?还是其他 Kubernetes 日志?
  • 事实上我没有找到任何 Kubelet 或 K8s 的日志文件。我所拥有的只是在日记中。我在github 上找到了这个:没有计划恢复 /var/log/kubelet.log。所有日志(甚至未来的其他 /var/log/kube*.log 文件)都将在 journald 中可用。

标签: ubuntu kubernetes


【解决方案1】:

我在 kubernetes 1.12.3 和 ubuntu 16.04.05 上遇到了同样的问题。然后我通过运行命令查看了 kubernetes 日志

$ journalctl -u kubelet

然后在日志中我看到 k8s 抱怨(以状态 255 退出)交换正在打开。

然后我通过运行关闭了交换

$ swapoff -a

然后我编辑了 fstab 并注释掉了交换条目

$ vi /etc/fstab
#comment out line with swap

然后重新启动系统。 系统恢复后,我通过运行验证交换已禁用

$ free -m

并检查交换行是否为 0。确实如此。

然后我通过执行验证kubeapi服务已经成功启动

$ systemctl status kubelet

已成功启动。我还通过重新检查 journalctl 日志进行了验证。这次没有看到交换错误。

我通过运行验证了 k8s 节点状态

$ kubectl get nodes

现在正在工作并显示预期的输出。

注意:我之前也在 .bash_profile 文件中设置了 KUBECONFIG。

root@k8s-master:~# cat .bash_profile
export KUBECONFIG="/etc/kubernetes/admin.conf"

【讨论】:

  • 这个。对于引导容器,我使用这个小单行来禁用 fstab 中的交换:sudo sed -i 's|^/swap.img|#/swap.img|g' /etc/fstab
【解决方案2】:

我有一个错误的导出变量 KUBECONFIG,kubelet 需要它(历史详细信息在有问题的评论中)。

~/.zprofile 我保存了KUBECONFIG=$HOME/admin.conf,这解决了我的问题。

重新加载 ENV 变量后 kubelet 工作:

# kubectl get nodes
NAME      STATUS     AGE       VERSION
master    Ready      5d        v1.6.1
node01    NotReady   5d        v1.6.1

【讨论】:

  • ~/.zprofile~/.bashrc 每个人都没有 zsh ;)
【解决方案3】:

作为那里的评论,您确实需要检查apiserver 是否已启动,因为kubectl 将与apiserver 对话。根据您对 kubeadm 的描述和版本,我相信这是重复的 question 我刚刚回答,所以我只是将答案复制到这里。


kubeadm(v1.6.1)的当前版本中,默认放弃了ApiServer的不安全端口,您可以通过检查/etc/kubernetes/manifests/kube-apiserver.yaml中的api-server yaml文件来验证这一点,有kube-apiserver参数--insecure-port=0 .

你可以

  • 在正在运行的集群中更正此问题:

    $ mv kube-apiserver.yaml ../kube-apiserver.yaml
    // edit ../kube-apiserver.yaml to remove --insecure-port=0 
    // or change it to --insecure-port=<WHATERER_YOUR_LIKE>
    $ mv ../kube-apiserver.yaml kube-apiserver.yaml
    
  • 在启动时正确执行。您需要一个 kubeadm 配置文件来执行此操作。一个简单的人会喜欢:

    apiVersion: kubeadm.k8s.io/v1alpha1
    kind: MasterConfiguration
    apiServerExtraArgs:
      insecure-port: 8080 //or whatever you like
    
    // Then you can start a master node use `kubeadm init --config=<this-configure-file-path>`
    

【讨论】:

  • @Crazykew - 起初我不明白,但现在明白了。如果我评论此行 --insecure-port=0 并重新启动 kubelet 服务,我可以看到打开的不安全端口 8080 并且不需要主目录中的 admin.conf 。谢谢解释。
  • @waldauf 仅供参考,当您使用 admin.conf 时,实际上您正在尝试连接 admin.conf 中定义的安全端口。
【解决方案4】:

我不是专家,但我发现问题在于 API 服务器等的容器没有启动。

我发现这是一个 docker unix sock 权限问题:

$ chmod 666 /var/run/docker.sock
$ sudo systemctl restart docker

这为我解决了问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2016-10-04
    相关资源
    最近更新 更多