master‑ip="192.168.91.137"worker01‑ip="192.168.91.138"worker02‑ip="192.168.91.151",后续配置全部引用变量,后期更换 IP 只修改变量值即可。

使用规则:

  1. 所有节点先定义变量(复制执行);
  2. 后续配置不再写死 IP,统一调用变量;
  3. 区分:【所有节点执行】 / 【仅 master 执行】 / 【仅 worker 执行】

bash

运行

# 先在对应机器定义IP变量(每台机器单独执行)
## ===== k8s‑master节点执行 =====
master_ip="192.168.91.137"
worker01_ip="192.168.91.138"
worker02_ip="192.168.91.151"

## ===== k8s‑worker01节点执行 =====
master_ip="192.168.91.137"
worker01_ip="192.168.91.138"
worker02_ip="192.168.91.151"

## ===== k8s‑worker02节点执行 =====
master_ip="192.168.91.137"
worker01_ip="192.168.91.138"
worker02_ip="192.168.91.151"

第一阶段:基础环境配置【所有节点执行】

步骤 1:设置主机名(各自节点执行)

bash

运行

# master执行
hostnamectl set-hostname k8s-master
bash

# worker01执行
hostnamectl set-hostname k8s-worker01
bash

# worker02执行
hostnamectl set-hostname k8s-worker02
bash

步骤 2:配置网卡文件(ifcfg‑ens32)

1)k8s‑master 执行:把变量的值填入配置文件

bash

运行

cat > /etc/sysconfig/network-scripts/ifcfg-ens32 <<EOF
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=${master_ip}
NETMASK=255.255.255.0
GATEWAY=192.168.91.2
DNS1=8.8.8.8
EOF
2)k8s‑worker01 执行

bash

运行

cat > /etc/sysconfig/network-scripts/ifcfg-ens32 <<EOF
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=${worker01_ip}
NETMASK=255.255.255.0
GATEWAY=192.168.91.2
DNS1=8.8.8.8
EOF
3)k8s‑worker02 执行

bash

运行

cat > /etc/sysconfig/network-scripts/ifcfg-ens32 <<EOF
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=${worker02_ip}
NETMASK=255.255.255.0
GATEWAY=192.168.91.2
DNS1=8.8.8.8
EOF

三台机器重启网卡:

bash

运行

systemctl restart network

步骤 3:配置 /etc/hosts(三台全部执行,引用变量)

bash

运行

cat > /etc/hosts <<EOF
127.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6
${master_ip}    k8s-master
${worker01_ip}  k8s-worker01
${worker02_ip}  k8s-worker02
EOF

步骤 4:关闭防火墙(三台一起执行)

bash

运行

systemctl disable firewalld
systemctl stop firewalld
firewall-cmd --state
# 出现 not running 代表成功

步骤 5:关闭 SELinux(三台执行,执行完成后 reboot 重启)

bash

运行

sed -ri 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
getenforce

步骤 6:时间同步(chrony)

bash

运行

dnf install -y chrony
sed -i 's/^pool.*/pool ntp.aliyun.com iburst/' /etc/chrony.conf
systemctl restart chronyd
systemctl enable chronyd
chronyc sources

步骤 7:关闭 Swap 分区

bash

运行

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
cat /etc/fstab | grep swap

步骤 8:内核参数配置

bash

运行

modprobe overlay
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sysctl --system

步骤 9:安装 ipvsadm

bash

运行

dnf install -y ipvsadm ipset
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_ipv4
EOF
chmod +x /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep ip_vs

第二阶段:安装 containerd【所有节点执行】

bash

运行

dnf install -y libseccomp libcgroup wget
wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/containerd-1.7.18-3.1.el7.x86_64.rpm
dnf install -y ./containerd-1.7.18-3.1.el7.x86_64.rpm

containerd config default > /etc/containerd/config.toml
sed -i 's#registry.k8s.io#registry.aliyuncs.com/google_containers#g' /etc/containerd/config.toml
sed -i 's#https://registry-1.docker.io#https://hub-mirror.c.163.com#g' /etc/containerd/config.toml
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

systemctl start containerd
systemctl enable containerd
systemctl status containerd

第三阶段:安装 kubeadm、kubectl、kubelet【所有节点执行】

bash

运行

cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg-1.asc
EOF

dnf clean all
dnf makecache
KUBE_VERSION="1.28.2-0"
dnf install -y kubelet-${KUBE_VERSION} kubeadm-${KUBE_VERSION} kubectl-${KUBE_VERSION}
systemctl enable kubelet

第四阶段:初始化集群【仅 Master 节点执行】

4‑1 初始化命令,这里使用 ${master_ip} 变量代替固定 IP

bash

运行

kubeadm init \
--apiserver-advertise-address=${master_ip} \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=Swap

初始化成功后输出的 join 命令示例:

bash

运行

kubeadm join ${master_ip}:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxx

token 过期重新获取:

bash

运行

kubeadm token create --print-join-command

4‑2 配置 kubectl 管理员权限(仅 Master)

bash

运行

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

第五阶段:节点加入集群【仅 Worker 节点执行】

worker 节点执行 join 命令,依旧调用变量

bash

运行

kubeadm join ${master_ip}:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxx

第六阶段:部署 Calico 网络插件【仅 Master 节点执行】

bash

运行

kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml
kubectl get pods -n kube-system -w
kubectl get nodes

附录命令

集群重置(三台机器执行)

bash

运行

kubeadm reset -f
rm -rf /var/lib/cni/ /etc/kubernetes/* /var/lib/kubelet/*
rm -rf $HOME/.kube

测试 Pod(master 执行)

bash

运行

cat > nginx-test.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: nginx-test
spec:
  containers:
  - name: nginx
    image: nginx:1.25
EOF
kubectl apply -f nginx-test.yaml
kubectl get pods
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐