Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建
1. 前言
本文将从零开始,安装三个Ubuntu,部署一个Kubernetus集群,安装Cilium作为网络CNI,并进行验证。Kubernetus集群包含三个节点,其中一个Master Node,两个 Worker Node,下面开始搭建环境。
2. 安装三个Ubuntu
此过程已经发过很详细博客,在此不再赘述,完成安装后,需要在三台机器上做以下配置:
安装Ubuntu详细博客:
https://blog.youkuaiyun.com/qq_34258344/article/details/101175849
2.1 三个机器都关闭防火墙
sudo ufw disable
2.2 三个机器都关闭swap
sudo vim /etc/fstab
注释第二行,保存退出,使用free -h
命令进行验证,全为0,则说明关闭成功:
2.3 三个机器都关闭selinux
如果开启过selinux,关闭selinux。
3. 部署Kubernetus集群
3.1 安装 kubeadm、kubelet和kubectl
接下来需要在三个Ubuntu上同时安装kubeadm、kubelet和kubectl:
kubeadm:引导集群的命令。
kubelet:在集群中所有计算机上运行的组件,它执行诸如启动Pod和容器之类的操作。
kubectl:用于与集群通信的命令行工具。
更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
下载 Google Cloud 公开签名秘钥:
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
添加 Kubernetes apt 仓库:
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
3.2 安装 Docker
三个Ubuntu同时安装Docker,如果安装过名字像docker, docker.io或 docker-engine的旧版本docker,可以先卸载:
sudo apt-get remove docker docker-engine docker.io containerd runc
更新apt软件包索引并安装依赖:
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
设置稳定的存储库:
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新apt程序包索引,安装最新版本的Docker Engine:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
运行hello-world 镜像来验证是否正确安装了Docker Engine :
sudo docker run hello-world
运行成功时显示如下页面:
配置Docker,主要包括两部分:
- 切换docker下载源为国内镜像站
- 修改cgroups
cgroups可以理解为进程隔离工具,docker就是用它来实现容器的隔离的。docker 默认使用的是cgroupfs,而 k8s 也用到了一个进程隔离工具systemd,使用两个隔离组可能会引起异常,所以需要把 docker 的也改成systemd。
sudo vi /etc/docker/daemon.json
添加以下内容:
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://quay-mirror.qiniu.com"
],
"exec-opts": [ "native.cgroupdriver=systemd" ]
}
重启Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
验证是否修改成功:
docker info | grep Cgroup
修改成功后显示如下页面:
3.3 初始化 Master Node
因为我们完全用Cilium作为Kubernetus集群的网络方案,所以初始化 Master Node时不使用kube-proxy
:
kubeadm init --skip-phases=addon/kube-proxy
初始化成功后显示如下页面:
注意,要保存上图第二个红框中的命令,节点加入集群中会用到。
如果想要重新初始化Master Node,可以使用kubeadm reset
命令重置。
3.4 集群中添加 Worker Node
在Worker Node 上输入上述记录的命令加入集群:
sudo kubeadm join 192.168.163.134:6443 --token ll99lj.zsmf41thl92pijxx --discovery-token-ca-cert-hash sha256:05f732fad86c340fae4160cc99a115f6e1c14a158d5e02dece79f6d3e2ddffe2
加入成功后显示如下页面:
如果忘了记录加入集群的命令,也可以在Master节点使用如下命令重新生成,然后用它在Worker节点上加入集群:
kubeadm token create --print-join-command
所有节点加入集群后,接下来安装Cilium。
4. 安装Cilium
4.1 安装Helm
Master节点上依次执行以下命令:
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
安装helm库:
helm repo add cilium https://helm.cilium.io/
4.2 安装Cilium
接下来,生成所需的YAML文件并进行部署。
helm install cilium cilium/cilium --version 1.9.6 \
--namespace kube-system \
--set kubeProxyReplacement=strict \
--set k8sServiceHost=REPLACE_WITH_API_SERVER_IP \
--set k8sServicePort=REPLACE_WITH_API_SERVER_PORT
注意:更换
REPLACE_WITH_API_SERVER_IP
和REPLACE_WITH_API_SERVER_PORT
为具体控制平面节点的IP地址和KUBE-API
服务器的端口。
我执行的命令如下:
helm install cilium cilium/cilium --version 1.9.6 \
--namespace kube-system \
--set kubeProxyReplacement=partial \
--set k8sServiceHost=192.168.163.134 \
--set k8sServicePort=6443 \
--set hostServices.enabled=true \
--set hostServices.protocols=tcp
处理报错时多加了一些参数,参数具体信息可以参考这个cilium配置文档:
https://docs.cilium.io/en/v1.9/gettingstarted/host-services/
成功安装Cilium后,显示如下界面:
如果需要卸载Cilium,可以使用以下命令:
helm uninstall cilium -n kube-system
4.3 验证Cilium
验证Cilium是否在所有节点上正确启动:
kubectl -n kube-system get pods -l k8s-app=cilium
STATUS状态为Running时,表示Cilium已经正确启动:
查看节点信息:
kubectl get nodes
查看pod信息:
kubectl get pod -n kube-system
查看日志:
kubectl logs cilium-nb545 -n kube-system --previous
5. 总结
搭建整个过程还是比较繁琐的,如果有一个环节出了问题,还是不容易搭建成功的,本文总结了较为方便的Kubernetus和Cilium搭建环境方法,如果要使用Cilium的全部功能,必须将内核升级到4.19以上,感谢阅读。
参考资料:
https://blog.youkuaiyun.com/qq_34258344/article/details/101175849
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
https://docs.cilium.io/en/v1.9/gettingstarted/#installation
https://helm.sh/docs/intro/install/
https://www.1nth.com/post/k8s-network-cilium/
https://www.jianshu.com/p/f2d4dd4d1fb1
https://docs.docker.com/engine/install/ubuntu/