请问装k8s遇到./initial_master.sh: line 33: kubeadm: command not found的问题后,博主解决了吗
【相关推荐】
在正式开始之前,我们要先做一件事——修改主机名,不然后面显示信息可能会有点困扰,具体做法如下:
先修改/etc/hostname
文件,改成k8s-master:
然后修改一下/etc/hosts
文件:
重启机器即可生效。worker节点的名字在安装的时候就改好了,如果你没有修改的话,可以按照上述步骤进行修改。
言归正传,新建一个kubeadm.yaml
文件(因为书上是使用yaml文件初始化的,当然你也可以用命令行参数进行初始化,这里的yaml文件我已经修改过了),内容如下:
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.211.55.122
bindPort: 6443
nodeRegistration:
kubeletExtraArgs:
cgroup-driver: "systemd"
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
imageRepository: registry.aliyuncs.com/google_containers
kubernetesVersion: 1.23.0
clusterName: "example-cluster"
controllerManager:
extraArgs:
horizontal-pod-autoscaler-sync-period: "10s"
node-monitor-grace-period: "10s"
apiServer:
extraArgs:
runtime-config: "api/all=true"
执行初始化命令:
kubeadm init --config kubeadm.yaml
报错:
[kubelet-check] Initial timeout of 40s passed.
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect: connection refused.
解决方案:
修改我们的docker配置文件/etc/docker/daemon.json
,添加一行:
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://xxxxxxxx.mirror.aliyuncs.com"
]
}
之后执行如下命令:
# 重启docker
systemctl daemon-reload
systemctl restart docker
# kubeadm重置
kubeadm reset
rm -rf $HOME/.kube/config
# 重新初始化
kubeadm init --config kubeadm.yaml
这样就初始化成功啦:
按照提示,执行后续操作:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
查看部署状态:
kubectl get nodes
# 显示结果
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane,master 6m54s v1.23.3
可以看到STATUS显示的是NotReady,我们可以使用kubectl describe
查看一下节点信息:
kubectl describe node k8s-master
这里我们可以看到,出现NotReady的原因是我们尚未部署任何网络插件。
另外,我们可以通过kubectl查询Pod状态:
kubectl get pods -n kube-system
可以看到,CoreDNS的Pod处于Pending状态,因为它是依赖于网络的,这个状态是符合预期的。