我试图使用 kubeadm 创建一个 Kubernetes 集群。我启动了一个 Ubuntu 18.04 服务器,安装了 docker(确保 docker.service 正在运行),安装了 kubeadm kubelet 和 kubectl。
以下是我执行的步骤:
sudo apt-get update
sudo apt-get install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get install kubeadm kubelet kubectl -y
sudo apt-mark hold kubeadm kubelet kubectl
kubeadm version
swapoff –a
sudo hostnamectl set-hostname master-node
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
运行sudo kubeadm init --pod-network-cidr=10.244.0.0/16后,我收到以下错误:
root@ip-172-31-10-50:/home/ubuntu# sudo kubeadm init --pod-network-cidr=192.168.0.0/16
[init] 使用 Kubernetes 版本:v1.23.1
[preflight] 运行 pre-flight检查
[preflight] 拉取设置 Kubernetes 集群所需的图像
[preflight] 这可能需要一两分钟,具体取决于您的 Internet 连接速度
[preflight] 您也可以使用“kubeadm config images pull”预先执行此操作
[certs] 使用 certificateDir 文件夹 "/etc/kubernetes/pki"
[certs] 使用现有的 ca 证书颁发机构
[certs] 使用磁盘上现有的 apiserver 证书和密钥
[certs] 使用磁盘上现有的 apiserver-kubelet-client 证书和密钥
[certs] 使用现有的 front-proxy-ca 证书颁发机构
[certs] 使用磁盘上现有的 front-proxy-client 证书和密钥
[certs] 使用现有的 etcd/ca 证书颁发机构
[certs] 使用磁盘上现有的 etcd/server 证书和密钥
[certs] 使用现有的 etcd/peer 证书和磁盘上的密钥
[certs] 使用现有的 etcd/healthcheck-client 证书和磁盘上的密钥
[certs] 使用现有的 apiserver-etcd-client 证书和磁盘上的密钥
[certs] 使用现有的“ sa" key
[kubeconfig] 使用 kubeconfig 文件夹 "/etc/kubernetes"
[kubeconfig] 使用现有的 kubeconfig 文件:" /etc/kubernetes/admin.conf" [kubeconfig] 使用现有的 kubeconfig 文件:"/etc/kubernetes/
kubelet.conf "
[kubeconfig] 使用现有的 kubeconfig 文件:“/etc/kubernetes/controller-manager.conf”
[kubeconfig] 使用现有的 kubeconfig 文件:“/etc/kubernetes/scheduler.conf”
[kubelet-start] 编写带有标志的 kubelet 环境文件file "/var/lib/kubelet/kubeadm-> flags.env"
[kubelet-start] 将 kubelet 配置写入文件 "/var/lib/kubelet/config.yaml"
[kubelet-start] 启动 kubelet
[control-plane ] 使用清单文件夹“/etc/kubernetes/manifests”
[control-plane] 为“kube-apiserver”
创建静态 Pod 清单 [control-plane] 为“kube-controller-manager”创建静态 Pod 清单
[control-plane] 创建“kube-scheduler”的静态 Pod 清单
[etcd] 在“/etc/kubernetes/manifests”中为本地 etcd 创建静态 Pod 清单
[wait-control-plane] 等待 kubelet 作为静态 Pod 从目录“/etc/kubernetes/manifests”启动控制平面。这最多可能需要 4m0s
[kubelet-check] 40s 的初始超时已通过。
[kubelet-check] kubelet 似乎没有运行或健康。
[kubelet-check] 等于 'curl -sSL http://localhost:10248/healthz' 的 HTTP 调用失败并出现错误:Get "http://localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect : 拒绝连接。
我尝试使用Flannel 的 CIDR(10.244.0.0/16)和Calico 的 CIDR(192.168.0.0/16)运行kubectl init --pod-network-cidr。但是,我得到了同样的错误。
另外,我观察到我的 EC2 实例中Kubelet的状态在波动。当我运行systemctl status kubelet.service时,有时它没有运行,有时 Kubelet 正在运行。它自动发生。认为这是kubectl init失败的原因,因为kubelet-check清楚地说:“看起来 kubelet 没有运行或健康”
运行systemctl status kubelet.service后,报错:
root@ip-172-31-10-50:/home/ubuntu# systemctl status kubelet.service
● kubelet.service - kubelet:Kubernetes 节点代理
已加载:已加载(/lib/systemd/system/kubelet.service;已启用;供应商预设:已启用)
Drop-In:/etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
活动:自 2021 年 12 月 29 日星期三以来激活(自动重启)(结果:退出代码)世界标准时间 17:52:35;3 秒前
文档:https
://kubernetes.io/docs/home/ 进程:22901 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
Main PID: 22901 (代码=退出,状态=1/失败)
当我继续运行systemctl status kubelet.service时,几秒钟后,kubectl.service 似乎正在运行,几秒钟后,它又失败了。
...跳过...
● kubelet.service - kubelet:Kubernetes 节点代理
已加载:已加载(/lib/systemd/system/kubelet.service;已启用;供应商预设:已启用)
Drop-In:/etc/systemd/system /kubelet.service.d
└─10-kubeadm.conf
活动:自 2021 年 12 月 30 日星期四 18:50:49 UTC 起活动(运行);125ms 前
Docs: https://kubernetes.io/docs/home/
Main PID: 12895 (kubelet)
Tasks: 9 (limit: 4686)
CGroup: /system.slice/kubelet.service
└─12895 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf > --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/conf
我不确定为什么 kubelet 会以这种方式波动。
有谁知道如何解决这一问题?
错误日志有你的答案:
有关如何配置cgroup 驱动程序的信息,请参阅 Kubernetes 文档
我能够通过编辑/etc/systemd/system/kubelet.service.d/10-kubeadm.conf来修复 kubelet.service 问题。
在文件中,我添加了Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"并注释掉Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"。
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf供参考:
然后运行:systemctl daemon-reload和systemctl restart kubelet
这样 kubelet.service 一直在运行。
谢谢!