参考资料:https://cloud.tencent.com/developer/article/2347138
禁用Ubuntu Swap

Ubuntu安装网桥工具
1
|
sudo apt-get install bridge-utils -y
|

添加k8s镜像源
1
2
3
4
5
|
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo add-apt-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
|
配置containerd
这里需要安装containerd,但是我在docker安装的时候已经装好了,相关命令为
1
|
sudo apt-get install containerd.io
|
(1)Containerd安装完成后,其自带的配置文件/etc/containerd/config.toml中的内容,需要用打印出的containerd默认配置替换。
(2)Containerd的Cgroup设为systemd,以和k8s默认的Cgroup保持一致。
(3)pause镜像路径改为国内源registry.aliyuncs.com/google_containers/pause:3.9。
1
2
3
4
5
|
sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.ori
sudo chmod 777 /etc/containerd/config.toml
sudo containerd config default > /etc/containerd/config.toml
|

1
|
sudo gedit /etc/containerd/config.toml
|
配置后,重启containerd服务,并保证containerd状态正确
1
2
|
sudo systemctl restart containerd.service
sudo systemctl status containerd.service
|

安装Kubernetes
安装k8s软件,这里会默认下载最新的kubernetes(阿里云镜像源上的),后面指定版本时需要根据自己的版本进行修改。这里也可以手动指定kubernetes版本。
1
|
sudo apt install kubelet kubeadm kubectl
|
此时k8s没有启动成功是正常的,因为kubelet服务成功启动的先决条件,需要kubelet的配置文件,所在目录/var/lib/kubelet还没有建立。
k8s配置单机节点
查看k8s版本
1
|
kubeadm config images list
|
将kubernetes的控制面的几个镜像拉到本地,为了保证镜像和安装的k8s软件版本严格一致,这里的镜像拉取时,显性指定版本。
1
|
sudo kubeadm config images pull --kubernetes-version v1.28.10 --image-repository registry.aliyuncs.com/google_containers
|
kubernetes初始化

1
|
sudo kubeadm init --control-plane-endpoint=192.168.146.111 --kubernetes-version v1.28.10 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
|
初始化成功如下图

克隆虚拟机作为从节点
关闭虚拟机,克隆虚拟机作为从节点。
右键虚拟机,克隆虚拟机。选择当前状态,创建完整克隆,完成克隆。
克隆完成后修改从节点的hosts、hostname和ip。
为了便于管理,修改主节点的hosts为k8s1,从节点分别取名k8s2和k8s3。对应ip指定为192.168.146.112和192.168.146.113。(这里的ip和host要根据自己的情况进行修改,主节点的名字也可以通过修改hotsname来改变)
创建hosts映射。

配置Kubernetes集群
在主节点上跟着初始化成功后的提示继续后续工作
1
2
3
|
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
查看集群状态
1
2
|
kubectl cluster-info
kubectl get nodes
|
在k8s1上创建永久token
1
|
kubeadm token create --print-join-command
|
如果在克隆虚拟机作为从节点之前就已经跟着k8s提示完成了上面几步,那么在从节点上执行提示的join命令,会遇见报错。
原因:拷贝虚拟机时已完成k8s集群配置文件创建,应该在初始化后,配置文件创建前进行克隆。
解决办法:在虚拟机重置节点后加入集群。这个重置节点的命令也可以在后续k8s出现问题时恢复默认设置重做时使用。
1
2
|
sudo rm -rf /etc/kubernetes/kubelet.conf /etc/kubernetes/pki/ca.crt
sudo kubeadm reset
|
重新加入集群(join命令为主节点创建永久token时回显的命令)
在k8s3上进行相同步骤。
在k8s1上查看集群节点,集群搭建成功。
细心的读者可能发现了我的1号机之前交VirtualClass,但是现在却叫k8s1,这是因为我在1号机初始化之前没有修改一号机的名字,导致集群建立后节点名字如下,但是这个看着不太舒服,我就把三台机都使用上面的重置命令重置后再重做了一遍上述步骤。

配置Kubernetes网络插件Calico
1
2
|
curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
kubectl apply -f calico.yaml
|
成功截图如下(我这里因为网络问题没有成功,姑且偷一张图),如果失败可以使用另外一种手动方法如下(我的办法)。
手动解决办法:
打开链接(可能需要借助某些上网工具)
https://projectcalico.docs.tigera.io/manifests/calico.yaml
全选复制,粘贴到~/calico.yaml
重新执行
1
|
kubectl apply -f calico.yaml
|
成功截图,这里要看见所有的pod状态都为Running才是成功,如果是ContainerCreating则表明正在制作容器,需要稍等一会(可能会很慢,但也不会超过十分钟)。如果过了很久还没Running,可以通过kubectl describe pods <pod-name> -n kube-system
查看pod进度。 -n的意思是指定命名空间(namespace),默认的pod命名空间是default,所以使用kubectl get pods
会得到defalut下的pods。
1
2
|
kubectl get pods -n kube-system
kubectl get nodes
|
k8s命名空间查看,更多命令及参数可以通过kubectl --help
查看
