搭建 Containerd + K8S 环境(v1.26.15)
在 Alibaba Cloud Linux 上用 containerd 从零搭一套 K8S v1.26.15 集群:主机与内核准备、ipvs 与网桥参数、kubeadm 初始化与节点加入,以及 Calico 网络的镜像离线处理。
目录22 节
一、环境准备
1.1 服务器硬件配置
| 名称 | 操作系统 | CPU | 内存 | 内网IP | 公网IP | 集群角色 |
|---|---|---|---|---|---|---|
| ECS | Alibaba Cloud Linux 3.2104 LTS 64位 | 2核 | 4GB | 192.0.2.139 | 203.0.113.31 | Master |
| ECS | Alibaba Cloud Linux 3.2104 LTS 64位 | 2核 | 4GB | 192.0.2.140 | 203.0.113.32 | Node |
| ECS | Alibaba Cloud Linux 3.2104 LTS 64位 | 2核 | 4GB | 192.0.2.141 | 203.0.113.33 | Node |
1.2 版本说明
| 名称 | 版本 | 备注 |
|---|---|---|
| Containerd | 1.6.32 | – |
| RunC | 1.1.12 | – |
| K8S | v1.26.15 | – |
| Calico | v3.26.4 | – |
1.3 主机配置
1.3.1 HOSTNAME配置
Master节点配置:
hostnamectl set-hostname k8s-master
Node1节点配置:
hostnamectl set-hostname k8s-node1
Node2节点配置:
hostnamectl set-hostname k8s-node2
1.3.2 HOSTS配置
集群所有节点服务器上编辑/etc/hosts文件配置集群节点IP和主机映射:
# 编辑
cat >> /etc/hosts << EOF
# 追加
192.0.2.139 k8s-master
192.0.2.140 k8s-node1
192.0.2.141 k8s-node2
EOF
1.3.3 防火墙配置
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
1.3.4 SELINUX配置
关闭selinux:
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
1.3.5 SWAP配置
关闭swap:
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
1.3.6 配置网桥
配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙。
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
EOF
配置生效
modprobe br_netfilter
modprobe overlay
sysctl -p /etc/sysctl.d/k8s.conf
配置开机生效
cat >> /etc/sysconfig/modules/br_netfilter.modules <<EOF
#!/bin/bash
modprobe br_netfilter
EOF
授权配置:
chmod 755 /etc/sysconfig/modules/br_netfilter.modules
1.3.7 安装ipset及ipvsadm
安装:
yum -y install ipset ipvsadm
配置:
cat >> /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
授权、运行、加载:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
1.3.8 配置镜像源
安装配置工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
配置Docker-CE镜像源:
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新缓存:
yum makecache
1.3.9 安装Containerd
查看版本列表:
yum list containerd.io.x86_64 --showduplicates | sort -r
安装:
yum install -y containerd.io-1.6.32-3.1.el8
配置:
mkdir -p /etc/containerd/ && containerd config default > /etc/containerd/config.toml
vi /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
wq
systemctl restart containerd && systemctl enable containerd
启动:
systemctl start containerd
配置开机启动:
systemctl enable containerd
三、K8S集群部署
3.1 配置镜像源
配置镜像源:
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.26/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.26/rpm/repodata/repomd.xml.key
EOF
3.2 安装工具
3.2.1 安装kubectl
yum install -y kubectl-1.26.15
3.2.2 安装kubeadm
yum install -y kubeadm-1.26.15
3.2.1 安装kubelet
yum install -y kubelet-1.26.15
设置开机启动:
systemctl enable kubelet
3.3 初始化集群(主节点)
初始化集群:
kubeadm init --kubernetes-version=v1.26.15 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.0.2.139 --cri-socket unix:///run/containerd/containerd.sock
3.4 加入集群(从节点)
加入集群:
kubeadm join 192.0.2.139:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:0000000000000000000000000000000000000000000000000000000000000000
3.5 初始化集群网络
拉取calico镜像脚本:
cat >> pull-calico-images.sh << EOF
ctr -n k8s.io images pull quay.io/calico/pod2daemon-flexvol:v3.26.4
ctr -n k8s.io images tag quay.io/calico/pod2daemon-flexvol:v3.26.4 docker.io/calico/pod2daemon-flexvol:v3.26.4
ctr -n k8s.io images pull quay.io/calico/typha:v3.26.4
ctr -n k8s.io images tag quay.io/calico/typha:v3.26.4 docker.io/calico/typha:v3.26.4
ctr -n k8s.io images pull quay.io/calico/kube-controllers:v3.26.4
ctr -n k8s.io images tag quay.io/calico/kube-controllers:v3.26.4 docker.io/calico/kube-controllers:v3.26.4
ctr -n k8s.io images pull quay.io/calico/node:v3.26.4
ctr -n k8s.io images tag quay.io/calico/node:v3.26.4 docker.io/calico/node:v3.26.4
ctr -n k8s.io images pull quay.io/tigera/operator:v1.32.3
ctr -n k8s.io images tag quay.io/calico/operator:v1.32.3 docker.io/calico/operator:v1.32.3
ctr -n k8s.io images pull quay.io/calico/cni:v3.26.4
ctr -n k8s.io images tag quay.io/calico/cni:v3.26.4 docker.io/calico/cni:v3.26.4
ctr -n k8s.io images pull quay.io/calico/node-driver-registrar:v3.26.4
ctr -n k8s.io images tag quay.io/calico/node-driver-registrar:v3.26.4 docker.io/calico/node-driver-registrar:v3.26.4
ctr -n k8s.io images pull quay.io/calico/csi:v3.26.4
ctr -n k8s.io images tag quay.io/calico/csi:v3.26.4 docker.io/calico/csi:v3.26.4
EOF
安装Calico(主节点):
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/tigera-operator.yaml
下载(主节点):
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/custom-resources.yaml
更新网段(主节点):
vi custom-resources.yaml
cidr=10.244.0.0/16
wq
安装自定义资源(主节点):
kubectl create -f custom-resources.yaml
查看命名空间(主节点):
kubectl get ns
查看POD状况(主节点):
kubectl get pods -n calico-system
拉取Ingress镜像:
cat >> pull-ingress-images.sh << EOF
ctr -n k8s.io images pull quay.io/ingress-nginx/controller:v1.9.5
ctr -n k8s.io images tag quay.io/ingress-nginx/controller:v1.9.5 docker.io/ingress-nginx/controller:v1.9.5
EOF