Ubuntu 18.04部署Kubernetes 1.22

本文详细介绍了在Ubuntu18.04系统上部署Kubernetes1.22.0集群的步骤,包括关闭swap、禁用防火墙、修改主机名、安装Docker和Kubernetes、初始化master节点、添加worker节点,以及解决过程中遇到的kubectl使用问题和pod部署失败的故障排查。
摘要由CSDN通过智能技术生成

基本环境

1 系统和软件版本

内容版本
Ubuntu18.04.1 LTS
docker20.10.21
k8s1.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状态,已正常启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值