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

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

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

目录27 节

一、环境准备

1.1 服务器硬件配置

名称 操作系统 CPU 内存 内网IP 公网IP 集群角色
阿里云ECS实例 Alibaba Cloud Linux 3.2104 LTS 64位 等保2.0三级版 2核 4GB 192.0.2.142 203.0.113.21 Master
阿里云ECS实例 Alibaba Cloud Linux 3.2104 LTS 64位 等保2.0三级版 2核 4GB 192.0.2.143 203.0.113.22 Node
阿里云ECS实例 Alibaba Cloud Linux 3.2104 LTS 64位 等保2.0三级版 2核 4GB 192.0.2.144 203.0.113.23 Node

1.2 版本说明

名称 版本 备注
Containerd 1.7.23
RunC 1.1.14
K8S v1.30.6
Calico v3.28.2
ingress-nginx 1.11.3

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和主机映射:

# 编辑
vi /etc/hosts
# 追加
192.0.2.142  k8s-master
192.0.2.143  k8s-node1
192.0.2.144  k8s-node2
# 保存
wq

1.3.3 IP地址配置(可忽略)

Master节点配置:

# k8s-master节点IP地址为:192.0.2.18/24
#
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.0.2.18"
PREFIX="24"
GATEWAY="192.0.2.2"
DNS1="119.29.29.29"

Node1节点配置:

# k8s-node1节点IP地址为:192.0.2.11/24
#
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.0.2.11"
PREFIX="24"
GATEWAY="192.0.2.2"
DNS1="119.29.29.29"

Node2节点配置:

# k8s-node2节点IP地址为:192.0.2.20/24
#
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.0.2.20"
PREFIX="24"
GATEWAY="192.0.2.2"
DNS1="119.29.29.29"

1.3.4 防火墙配置

关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld

1.3.5 SELINUX配置

关闭selinux:

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

1.3.6 SWAP配置

关闭swap:

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

1.3.7 时间同步

# crontab -l
0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com

yum list --showduplicates | sort -r | grep kernel-lt.x86_64
yum --enablerepo="elrepo-kernel" list --showduplicates | sort -r | grep kernel-lt.x86_64
yum --enablerepo="elrepo-kernel" install -y kernel-lt.x86_64

grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

1.3.8 配置网桥

配置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
vm.swappiness = 0
EOF

配置生效

modprobe br_netfilter
lsmod | grep br_netfilter

# modprobe overlay
sysctl -p /etc/sysctl.d/k8s.conf

# vi /etc/sysconfig/modules/br_netfilter.modules

配置开机生效

cat >> /etc/sysconfig/modules/br_netfilter.modules <<EOF
#!/bin/bash
modprobe br_netfilter
EOF

授权配置:

chmod 755 /etc/sysconfig/modules/br_netfilter.modules

1.3.9 安装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

二、容器运行时准备

2.1 Containerd准备

下载:

wget https://github.com/containerd/containerd/releases/download/v1.7.23/cri-containerd-1.7.23-linux-amd64.tar.gz

安装:

tar -xf cri-containerd-1.7.23-linux-amd64.tar.gz -C /
# 配置环境变量(可忽略)
cat >> /etc/profile << EOF
export PATH=$PATH:/usr/local/bin:/usr/local/sbin
EOF
source /etc/profile

配置:

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

# 启动containerd并配置开机自启
systemctl start containerd && systemctl enable containerd

# 查看containerd版本
containerd -version

# 查看runc版本
runc -version

三、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.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key
EOF

配置Setenforce:

setenforce 0

3.2 安装工具

3.2.1 安装kubectl

yum install -y kubectl-1.30.6

3.2.2 安装kubeadm

yum install -y kubeadm-1.30.6

3.2.3 安装kubelet

yum install -y kubelet-1.30.6

设置开机启动:

systemctl enable kubelet

3.2.4 合并安装kubectl、kubeadm、kubelet

# 合并
yum install -y kubectl-1.30.6 kubeadm-1.30.6 kubelet-1.30.6

3.2.5 初始化集群镜像准备

拉取镜像:

# 查看镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
# 拉取镜像到本地
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

3.2.6 初始化集群配置准备

打印生成初始化配置:

kubeadm config print init-defaults > kubeadm-config.yaml

参考查看配置:

cat kubeadm-config.yaml

标准kubeadm-config.yaml文件内容如下:

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.0.2.142
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s-master
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.30.6
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}

3.3 初始化集群(主节点)

初始化集群:

# 旧版本初始化集群命令
kubeadm init --kubernetes-version=v1.30.5 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.0.2.142 --cri-socket unix:///run/containerd/containerd.sock
# 新版本根据配置文件初始化集群
kubeadm init --config kubeadm-config.yaml

3.4 加入集群(从节点)

加入集群:

kubeadm join 192.0.2.142:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:0000000000000000000000000000000000000000000000000000000000000000

3.5 初始化集群网络(主节点)

Calico版本兼容说明: https://docs.tigera.io/calico/latest/getting-started/kubernetes/requirements

安装Calico:

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/tigera-operator.yaml
# 查看组件运行状态
kubectl get ns

下载:

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

更新网段:

vi custom-resources.yaml
cidr=10.244.0.0/16
wq

拉取custom-resources.yaml所需镜像:

docker.io/calico/kube-controllers:v3.28.2
docker.io/calico/pod2daemon-flexvol:v3.28.2
docker.io/calico/cni:v3.28.2
docker.io/calico/node:v3.28.2
docker.io/calico/typha:v3.28.2
docker.io/calico/csi:v3.28.2
docker.io/calico/node-driver-registrar:v3.28.2

ctr -n k8s.io images pull quay.io/calico/kube-controllers:v3.28.2
ctr -n k8s.io images tag quay.io/calico/kube-controllers:v3.28.2 docker.io/calico/kube-controllers:v3.28.2

ctr -n k8s.io images pull quay.io/calico/pod2daemon-flexvol:v3.28.2
ctr -n k8s.io images tag quay.io/calico/pod2daemon-flexvol:v3.28.2 docker.io/calico/pod2daemon-flexvol:v3.28.2

ctr -n k8s.io images pull quay.io/calico/cni:v3.28.2
ctr -n k8s.io images tag quay.io/calico/cni:v3.28.2 docker.io/calico/cni:v3.28.2

ctr -n k8s.io images pull quay.io/calico/node:v3.28.2
ctr -n k8s.io images tag quay.io/calico/node:v3.28.2 docker.io/calico/node:v3.28.2

ctr -n k8s.io images pull quay.io/calico/typha:v3.28.2
ctr -n k8s.io images tag quay.io/calico/typha:v3.28.2 docker.io/calico/typha:v3.28.2

ctr -n k8s.io images pull quay.io/calico/csi:v3.28.2
ctr -n k8s.io images tag quay.io/calico/csi:v3.28.2 docker.io/calico/csi:v3.28.2

ctr -n k8s.io images pull quay.io/calico/node-driver-registrar:v3.28.2
ctr -n k8s.io images tag quay.io/calico/node-driver-registrar:v3.28.2 docker.io/calico/node-driver-registrar:v3.28.2

ctr -n k8s.io images pull quay.io/calico/apiserver:v3.28.2
ctr -n k8s.io images tag quay.io/calico/apiserver:v3.28.2 docker.io/calico/apiserver:v3.28.2

安装自定义资源:

kubectl create -f custom-resources.yaml

查看命名空间:

kubectl get ns

查看POD状况:

kubectl get pods -n calico-system

查看集群节点状态:

kubectl get nodes

查看K8S所有命名空间PODS状态:

kubectl get pods --all-namespaces

安装验证工具:

yum install -y bind-utils

配置DNS解析验证DNS功能:

# 获取网络组件DNS安装信息
kubectl get svc -n kube-system
# 尝试解析域名到DNS服务的ClusterIP上
dig -t a www.baidu.com @10.96.0.10

分享

微博XLinkedIn
二维码

扫码在手机上继续阅读

同一主题下的延伸阅读。

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

在 Alibaba Cloud Linux 上用 containerd 从零搭一套 K8S v1.26.15 集群:主机与内核准备、ipvs 与网桥参数、kubeadm 初始化与节点加入,以及 Calico 网络的镜像离线处理。

3 分钟阅读运维

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

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

4 分钟阅读运维

评论