k8s欧拉部署
·
master‑ip="192.168.91.137"、worker01‑ip="192.168.91.138"、worker02‑ip="192.168.91.151",后续配置全部引用变量,后期更换 IP 只修改变量值即可。
使用规则:
- 所有节点先定义变量(复制执行);
- 后续配置不再写死 IP,统一调用变量;
- 区分:【所有节点执行】 / 【仅 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:xxxxxxxxxxxxxxxxxxxxtoken 过期重新获取:
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
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)