ubuntu22.04使用containerd部署k8s集群

本文环境是ubuntu22.04,需求是部署单master集群,容器要求使用containerd,此前咱们在centos上部署过,也在ubuntu18.04上使用docker部署过,相关的教程可以查看此前的笔记

centos7使用docker部署单master集群:https://sulao.cn/post/799

centos7使用containerd部署单master集群:https://sulao.cn/post/943

ubuntu18.04使用docker部署单master集群:https://sulao.cn/post/818

ubuntu22.04使用containerd部署单master集群具体操作如下,操作均切换root用户进行操作。

1.在线安装基础软件包

apt update -y
apt install -y gcc gcc+ make apt-transport-https ca-certificates curl gnupg-agent gnupg lsb-release make software-properties-common net-tools git curl ntpdate

2.修改主机名和绑定hosts

以下主机名和IP根据自己的实际情况进行修改

#修改主机名
hostnamectl set-hostname master

#修改hosts绑定内网IP和主机
cat >>/etc/hosts<<EOF
10.0.1.184 master
EOF

3.关闭swap和关闭防火墙

#关闭swap
sudo swapoff -a
vim /etc/fstab注释掉/etc/fstab中swap相关配置
systemctl stop swap.target
systemctl disable swap.target
systemctl stop ufw systemctl disable ufw

4.优化内核参数

cat >/etc/sysctl.d/k8s.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
#使上述配置生效
sysctl --system

5.开启内核转发

echo "1" > /proc/sys/net/ipv4/ip_forward

6.加载内核模块

modprobe br_netfilter
lsmod | grep br_netfilter

查看内核是否加载了br_netfilter过滤模块

7.修改时区同步时间

sudo timedatectl set-timezone Asia/Shanghai
ntpdate time.windows.com

8.部署containerd容器

wget https://github.com/containerd/containerd/releases/download/v1.7.27/cri-containerd-1.7.27-linux-amd64.tar.gz
tar -zxvf cri-containerd-1.7.27-linux-amd64.tar.gz -C /
mkdir -p /etc/containerd
containerd config default >/etc/containerd/config.toml

修改containerd配置的config.toml文件

vim /etc/containerd/config.toml
root = "/data/containerd" #修改存储位置
SystemdCgroup = true #修改cgroup驱动
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8"

然后加载开机启动和启动containerd并查看状态

systemctl daemon-reload
systemctl enable --now containerd
systemctl status containerd

 使用命令查看containerd的配置

containerd config dump

使用crictl管理镜像

cat >/etc/crictl.yaml<<EOF
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10 
debug: false
EOF

9.部署k8s

9.1.添加安装源

添加安装源,如果需要修改为其他版本,可以直接修改下面安装源中的版本号即可。

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

9.2.安装kubelet/kubeadm/kubectl

然后用以下命令进行安装

apt update -y
apt install -y kubelet kubeadm kubectl
#设置开机启动
systemctl enable kubelet

9.3.禁止kubelet和kubectl更新

apt-mark hold kubelet kubectl

9.4.创建修改k8s初始化配置

创建k8s初始化配置文件

cd /etc/kubernetes
kubeadm config print init-defaults > default.yaml

修改初始化配置文件

sed -i "s/1.2.3.4/0.0.0.0/" /etc/kubernetes/default.yaml
sed -i "s#registry.k8s.io#registry.cn-hangzhou.aliyuncs.com/google_containers#" /etc/kubernetes/default.yaml
sed -i '/10.96.0.0\/12/a\  podSubnet: 10.244.0.0\/16' /etc/kubernetes/default.yaml
sed -i "s/name: node/name: $HOSTNAME/g" /etc/kubernetes/default.yaml

9.5.初始化k8s集群

kubeadm init --config=default.yaml

初始化完成以后会打印加入集群节点的join命令,我们记录下来,后面方便后续节点的加入。

9.6.创建k8s管理配置文件

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

10.安装cni网络组件

这里我们选择是的calico-3.26.0,此前3.25.0有bug,我们可以先下载下来两个yaml文件

wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml

我们需要对custom-resources.yaml文件进行修改,去掉- name这行。

- name: default-ipv4-ippool

上面是这样

apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
  # Configures Calico networking.
  calicoNetwork:
    ipPools:
    - blockSize: 26
      cidr: 10.244.0.0/16
      encapsulation: VXLANCrossSubnet
      natOutgoing: Enabled
      nodeSelector: all()

接着我们就可以进行安装了。

kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml

安装完成以后我们就可以查看k8s集群状态了,中间会拉取很多calico相关镜像,目前网络环境可能很多需要自己想办法去拉取这些进行导入到环境。

11.去掉master节点污点

因为我们是单master,所以master节点也是要参与调度的。

kubectl describe node master | grep -i taint
Taints:             node-role.kubernetes.io/control-plane:NoSchedule#记录上述污点的key下面进行去除
kubectl taint node master node-role.kubernetes.io/control-plane:NoSchedule-

至此k8s集群就部署完成。

12.相关问题处理和相关工具安装

我部署以后出现了无法自动删除关联rs和pod的问题,可以查看笔记:https://sulao.cn/post/1099

其他相关配置可以查看

安装nvidia-container-runtime可以查看这个笔记:https://sulao.cn/post/1020

配置nvidia-container-runtime到containerd可以查看这个笔记:https://sulao.cn/post/944

使用nvidia-device-plugin上报GPU信息到k8s可以查看这个笔记:https://sulao.cn/post/975

kube-proxy从iptables切换到ipvs可以查看这个笔记:https://sulao.cn/post/1100

containerd带的ctr和crictl两个命令无法进行构建镜像,所以需要自己再下个nerdctl工具处理构建镜像的问题,具体可以查看这个笔记:https://sulao.cn/post/923,另外nerdctl命令基本和docker命令一致,也可以直接使用这个命令进行containerd的容器管理。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/1101

评论列表

0%