胡松的技术博客
站内搜索
切换语言中文
打开菜单

搭建 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

分享

微博XLinkedIn
二维码

扫码在手机上继续阅读

同一主题下的延伸阅读。

搭建 Containerd + K8S 环境(v1.28.5)

K8S v1.28.5 集群搭建记录:改用二进制方式安装 containerd 与 runc(含 libseccomp 编译),并附 Calico 镜像拉取与节点重新加入的排查过程。

4 分钟阅读运维

搭建 Containerd + K8S 环境(v1.30.6)

K8S v1.30.6 集群搭建记录:用 kubeadm-config.yaml 声明式初始化(附完整配置),Calico v3.28.2 的镜像离线处理,以及节点状态、DNS 与命名空间的验证清单。

4 分钟阅读运维

评论