Ubuntu 18.04部署Kubernetes 1.22
基本环境
1 系统和软件版本
内容 | 版本 |
---|---|
Ubuntu | 18.04.1 LTS |
docker | 20.10.21 |
k8s | 1.22.0 |
2 节点ip
master 192.168.103.81
worker 192.168.103.82
安装过程
1 准备工作
1.1 修改主机名
# 查看hostname
hostname $hostname
# master节点执行
sudo hostnamectl set-hostname ubuntu-k8s-master
# worker节点执行
sudo hostnamectl set-hostname ubuntu-k8s-worker
# 所有节点执行
sudo vim /etc/hosts
# 写入以下内容
192.168.103.81 ubuntu-k8s-master
192.168.103.82 ubuntu-k8s-worker
1.2 关闭swap分区
# free命令,swap行全为0说明没有swap分区
free -m
# 查看swap分区,没有输出说明没有swap分区
sudo swapon -show
# 关闭全部swap分区
sudo swapoff -a
# 修改配置文件,把swap相关的注释掉
sudo vi /etc/fstab
# 把下面第一行中原来的1改成0,然后注掉第二行(前面加'#')
UUID=d23c2ed6-0135-42b6-8713-45712158e67d / ext4 errors=remount-ro 0 0
# /swapfile none swap sw 0 0
1.3 关闭防火墙
sudo ufw disable
sudo ufw status
1.4 重启电脑,确认swap和防火墙均已关闭
2 安装docker
先卸载旧版
apt-get remove docker docker-engine docker.io containerd runc
安装证书
apt update
apt-get install ca-certificates curl gnupg lsb-release
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
写入docker镜像源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
修改docker启动项
sudo mkdir /etc/docker
sudo gedit /etc/docker/daemon.json
# 复制以下内容
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}
保存关闭后,重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
设置开机启动
sudo systemctl enable docker
查看docker版本
sudo docker version
3 安装k8s
安装工具
sudo apt-get install -y apt-transport-https ca-certificates curl
安装GBP秘钥
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
sudo echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] http://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新软件源
sudo apt-get update
查看k8s可用版本
apt-cache madison kubeadm
安装k8s 1.22.0版本
sudo apt-get install -y kubelet=1.22.0-00 kubeadm=1.22.0-00 kubectl=1.22.0-00
锁定版本,防止自动更新
sudo apt-mark hold kubelet kubeadm kubectl
开机启动
systemctl enable --now kubelet
5 初始化master节点
查看所需镜像
sudo kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
拉取镜像
sudo kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --cri-socket unix:///run/cri-dockerd.sock
kubeadm初始化
sudo kubeadm init --control-plane-endpoint=192.168.103.81 --kubernetes-version=v1.22.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --upload-certs --image-repository registry.aliyuncs.com/google_containers
配置环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装flannel插件
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
sudo kubectl apply -f kube-flannel.yml
Worker节点加入集群
1 执行kubeadm join命令
# master节点执行
kubeadm token create --print-join-command
# 得到加入集群命令
kubeadm join 192.168.103.81:6443 --token zeehjn.njmfi35v5xsdnnq9 --discovery-token-ca-cert-hash sha256:9f904207151177ba30bfd43eb6c18d1a866346d60370a1bc7d1462a70ac287dc
worker节点执行上面输出的命令即可
2 Worker节点可能出现的问题
2.1 无法使用kubectl命令
如果worker节点无法执行kubectl命令(报错类似 无法连接到localhost:8080),原因为缺少配置文件
kubectl get nodes
# 报错如下:
W0103 10:12:36.776073 1724 loader.go:221] Config not found: /etc/kubernetes/admin.conf
The connection to the server localhost:8080 was refused - did you specify the right host or port?
解决方法:
将master节点的/etc/kubernetes/admin.conf拷贝至worker节点相同目录下
然后worker节点配置环境变量:
export KUBECONFIG=/etc/kubernetes/admin.conf
再次尝试,可以正确执行kubectl get nodes
2.2 worker节点部署pod失败
执行kubectl describe pod ***,得到报错信息如下
x: rpc error: code = Unknown desc = failed to set up sandbox container "f63a667c26f506284866d6e490feba31dde9aaffbcde742e6a40572009e601b7" network for pod "my-nginx-8557865f4-vz5hl": networkPlugin cni failed to set up pod "my-nginx-8557865f4-vz5hl_my-test" network: failed to delegate add: failed to set bridge addr: "cni0" already has an IP address different from 10.244.1.1/24
# 重点最后一句
"cni0" already has an IP address different from 10.244.1.1/24
执行ifconfig命令,发现cni0网卡的ip为10.244.0.1,而flannel.1的ip为10.244.1.0,网段不一致。可能是由于之前在这台虚拟机上作为master节点部署过集群,执行kubeadm reset没有清除干净,需要手动删除cni0网卡让flannel重新配置
# 执行
ip link delete cni0
再次查看pod状态,已正常启动