CentOS通过kubeadm部署k8s 1.34单master
以下是在 CentOS Stream 10 系统上,使用 kubeadm 安装 Kubernetes v1.34 并配置 Calico 作为网络插件(1 master + 2 worker 节点,Master IP:192.168.10.30,Node IP:192.168.10.31–32)的详细操作步骤。
一、准备工作(Master 与 Node 均需完成)
- 关闭 SELinux
#!/bin/bash
# 一键关闭 SELinux 脚本
# 适用于 CentOS Stream / RHEL 系列
CONFIG_FILE="/etc/selinux/config"
# 修改配置文件
if grep -q "^SELINUX=" $CONFIG_FILE; then
sed -i 's/^SELINUX=.*/SELINUX=disabled/' $CONFIG_FILE
else
echo "SELINUX=disabled" >> $CONFIG_FILE
fi
# 临时关闭 (立即生效)
setenforce 0 2>/dev/null
# 显示结果
echo "✅ SELinux 已关闭(重启后永久生效)"
getenforce
- 禁用 Swap
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
- hosts解析
cat <<EOF | tee -a /etc/hosts
192.168.10.30 k8s-master30
192.168.10.31 k8s-node31
192.168.10.32 k8s-node32
EOF
- 加载 kernel 模块 & 配置 sysctl
modprobe overlay
modprobe br_netfilter
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system
- 安装容器运行时,推荐 containerd并设置 cgroup:
# ① 安装依赖并添加仓库
dnf install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# ② 更新索引并安装 containerd
# 使用 dnf download 命令
dnf install -y dnf-plugins-core # 确保包含 download 功能
dnf download containerd
# 如果你也想下载所有依赖包,可以使用 --resolve 参数:
dnf download --resolve containerd
dnf install -y containerd
# ③ 配置 containerd
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
# 编辑 config.toml,将 SystemdCgroup = false 改为 true
grep 'SystemdCgroup = false' /etc/containerd/config.toml
SystemdCgroup = false
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
grep 'SystemdCgroup = ' /etc/containerd/config.toml
SystemdCgroup = true
# ④ 重启并启用服务
systemctl restart containerd
systemctl enable containerd
ps -ef | grep containerd
# 安装nerdctl
[root@localhost 03-]# wget https://github.com/containerd/nerdctl/releases/download/v2.1.4/nerdctl-2.1.4-linux-amd64.tar.gz
[root@localhost 03-]# tar xf nerdctl-2.1.4-linux-amd64.tar.gz
[root@localhost 03-]# ls
containerd-rootless-setuptool.sh containerd-rootless.sh nerdctl nerdctl-2.1.4-linux-amd64.tar.gz
[root@localhost 03-]# cp nerdctl /usr/local/bin/
[root@localhost 03-]# nerdctl --version
nerdctl version 2.1.4
二、安装 kubeadm、kubelet 和 kubectl v1.34
根据官方文档,在 CentOS Stream 10 上添加 Kubernetes v1.34 仓库并安装组件:
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/repodata/repomd.xml.key
EOF
dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 下载rpm包
dnf download --resolve kubelet.x86_64 kubeadm.x86_64 kubectl.x86_64 --disableexcludes=kubernetes
systemctl enable --now kubelet
确保你安装的是针对 Kubernetes v1.34 的版本。官方安装说明指出,该指南专为 v1.34 设计。(Kubernetes)
三、初始化 Master 节点(192.168.10.30)
- 拉取所需镜像(可选)
kubeadm config images pull
kubeadm config images list
registry.k8s.io/kube-apiserver:v1.34.0
registry.k8s.io/kube-controller-manager:v1.34.0
registry.k8s.io/kube-scheduler:v1.34.0
registry.k8s.io/kube-proxy:v1.34.0
registry.k8s.io/coredns/coredns:v1.12.1
registry.k8s.io/pause:3.10.1
registry.k8s.io/etcd:3.6.4-0
- 初始化控制平面
kubeadm init \
--apiserver-advertise-address=192.168.10.30 \
--pod-network-cidr=192.168.0.0/16
(选择适合的 Pod 网络 CIDR,如 192.168.0.0/16)(docs.tigera.io)
- 配置 kubectl
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
- 确认 Master 状态
kubectl get nodes
四、在 Master 上安装 Calico 插件
推荐使用 Calico Operator 安装方式:
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/custom-resources.yaml
然后监控 Calico pods:
kubectl get pods -n calico-system
待所有 pods 状态为 Running 再继续。(docs.tigera.io)
五、加入 Worker 节点(192.168.10.31 和 192.168.10.32)
在每台 Node 上执行前述环境准备(第 I 部分)及安装 kubeadm/kubelet/kubectl(第 II 部分),然后运行从 Master 初始化过程中获得的 join 命令:
kubeadm join 192.168.10.30:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
如 token 已过期,可在 Master 上重新生成:
kubeadm token create --print-join-command
六、验证集群状态
在 Master 上运行:
kubectl get nodes
应显示所有三台节点状态都为 Ready。
七、创建Pod
cat nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25.3 # 可以换成最新的 nginx 镜像
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort # 通过宿主机 NodePort 方式暴露服务
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080 # 访问方式:http://任意节点IP:30080
kubeadm 集群重置步骤
1. 在所有节点执行 reset
先在 master 节点运行:
kubeadm reset -f
然后在 所有 worker 节点运行:
kubeadm reset -f
这会停止 kubelet、清理 kubeadm 安装的组件和配置。
🧹 2. 清理 CNI 网络配置
在所有节点执行:
rm -rf /etc/cni/net.d/*
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /var/lib/etcd
ip link delete cni0
ip link delete flannel.1
🧹 3. 清理 iptables 规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P FORWARD ACCEPT
4. 清理 kubeconfig 文件
rm -f $HOME/.kube/config

浙公网安备 33010602011771号