Kubernetes v1.30 集群安装与 Higress 网关部署指南
本文记录一套完整的多节点 Kubernetes v1.30 集群搭建过程:基于 containerd 运行时、kubeadm 初始化、Calico 网络插件,最后通过 Helm 部署 Higress 云原生网关作为集群入口。环境为 CentOS + amd64 架构。
环境说明
| 项 | 值 |
|---|---|
| 操作系统 | CentOS(yum 包管理) |
| Kubernetes | v1.30.2 |
| 容器运行时 | containerd 1.7.11 |
| 网络插件 | Calico v3.28.0 |
| Master 节点 IP | 172.16.0.11 |
| Pod CIDR | 10.244.0.0/16 |
| Service CIDR | 10.96.0.0/12 |
安全提示:文中
CHANGE_ME等占位符需替换为你自己的真实值(Token、密码、密钥等),切勿将真实凭证提交到公开仓库。
一、安装 containerd 运行时
Kubernetes 自 v1.24 起已完全移除 dockershim,推荐使用 containerd 作为运行时。安装步骤:
# 解压 containerd 二进制到 /usr/local
tar Cxzvf /usr/local containerd-1.7.11-linux-amd64.tar.gz
# 安装 systemd 服务单元(containerd.service 位于官方 cri-containerd 包或 GitHub containerd 仓库的 containerd.service 文件)
mkdir -p /usr/local/lib/systemd/system
cp containerd.service /usr/local/lib/systemd/system/containerd.service
# 安装 runc
install -m 755 runc.amd64 /usr/local/sbin/runc
# 生成默认配置
containerd config default > /etc/containerd/config.toml
# 启用 systemd cgroup 驱动(K8s 推荐)
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
systemctl daemon-reload
systemctl enable --now containerd
systemctl restart containerd
安装 CNI 插件与 crictl(容器运行时调试工具):
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.4.0.tgz
tar Cxzvf /usr/local/bin crictl-v1.26.0-linux-amd64.tar.gz
注意:默认生成的
/etc/containerd/config.toml中 pause 镜像地址是registry.k8s.io,国内环境建议改为阿里云镜像registry.aliyuncs.com/google_containers/pause:3.9,否则拉取镜像会失败。
二、开启 IPv4 数据包转发
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
# 应用参数,无需重启
sysctl --system
# 校验
sysctl net.ipv4.ip_forward
三、配置 IPVS 模式
kube-proxy 使用 IPVS 模式可提供更好的扩展性能。先安装工具并加载内核模块:
yum install ipset ipvsadm -y
cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/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
/bin/bash /etc/sysconfig/modules/ipvs.modules
# 校验模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
内核较新的发行版(如 CentOS 7.6+)建议使用
nf_conntrack代替已弃用的nf_conntrack_ipv4。
四、配置 K8s Yum 源并安装组件
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
安装组件:
- Master 节点:
yum install -y kubelet kubeadm kubectl - Node 节点:
yum install -y kubelet kubeadm
启用并启动 kubelet:
systemctl enable --now kubelet
systemctl restart kubelet
此时 kubelet 会反复重启属正常现象,等待
kubeadm init完成即可。
五、初始化 Master 节点
使用命令行参数直接初始化(国内环境需指定阿里云镜像仓库):
kubeadm init \
--apiserver-advertise-address=172.16.0.11 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.30.2 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
参数说明:
| 参数 | 说明 |
|---|---|
--apiserver-advertise-address | Master 节点对外通信的 IP |
--image-repository | 镜像仓库,国内使用阿里云加速 |
--kubernetes-version | 指定 K8s 版本,必须与已安装的 kubeadm 一致 |
--pod-network-cidr | Pod 网段,需与网络插件规划一致(Calico 默认 10.244.0.0/16) |
--service-cidr | Service 网段 |
也可以用
kubeadm init --config kubeadm-config.yaml方式,将上述参数写入 YAML 配置,便于版本化管理和证书更新时复用。
初始化成功后,输出会包含配置 kubectl 的命令和 Node 加入集群的 join 命令,务必保存。
六、配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
root 用户也可以直接:
export KUBECONFIG=/etc/kubernetes/admin.conf
七、Node 节点加入集群
在每个 Node 节点上以 root 身份执行 master 初始化输出的 join 命令:
kubeadm join 172.16.0.11:6443 --token CHANGE_ME.TOKEN \
--discovery-token-ca-cert-hash sha256:CHANGE_ME
join Token 默认 24 小时有效。过期后可在 Master 上执行
kubeadm token create --print-join-command重新生成。
八、安装 Calico 网络插件
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/custom-resources.yaml
验证集群与节点状态:
kubectl get nodes
kubectl get pods -n calico-system
九、(可选)控制 Master 是否调度 Pod
# 查看节点角色与污点
kubectl describe nodes k8s-master | grep -E '(Roles|Taints)'
# 允许 Pod 调度到 Master(去掉 NoSchedule 污点)
kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane:NoSchedule-
# 禁止 Pod 调度到 Master(重新打上污点)
kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane:NoSchedule
十、部署 Higress 云原生网关
Higress 是基于 Istio 与 Envoy 的下一代云原生网关,支持 Ingress/Gateway API 标准。部署前先安装其依赖的 Istio base chart:
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm install istio-base istio/base -n istio-system --create-namespace
helm repo add higress.io https://higress.io/helm-charts
# hostNetwork=true:网关直接复用宿主机网络,便于对外暴露
helm install higress higress.io/higress -n higress-system \
--create-namespace \
--set 'higress-core.gateway.hostNetwork=true'
常用管理命令:
# 查看网关 Service(hostNetwork 模式下主要看监听端口)
kubectl get svc -n higress-system higress-gateway
kubectl get service -n higress-system higress-gateway --watch
# 升级
helm upgrade higress higress.io/higress -n higress-system \
--set 'higress-core.gateway.hostNetwork=true'
# 卸载
helm uninstall higress -n higress-system
# 排查网关日志
kubectl logs -n higress-system -l app=higress-gateway --since=5m
如果不想用 Helm,也可以使用官方命令行工具 hgctl:
hgctl install --set 'profile=k8s' --set 'higress-core.gateway.hostNetwork=true'
hgctl install --set profile=k8s --set higress-core.gateway.hostNetwork=true -f ./values.yaml
创建拉取私有镜像的 Secret
如果网关转发的服务镜像位于阿里云私有仓库,需在目标命名空间创建 docker-registry Secret:
kubectl create secret docker-registry regcred \
--docker-server=registry.cn-shenzhen.aliyuncs.com \
--docker-username=CHANGE_ME \
--docker-password=CHANGE_ME
十一、(可选)安装 Kubernetes Dashboard
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
--create-namespace --namespace kubernetes-dashboard
创建管理员账号并获取登录 Token:
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
kubectl create clusterrolebinding dashboard-admin \
--clusterrole=cluster-admin \
--serviceaccount=kubernetes-dashboard:dashboard-admin
kubectl create token dashboard-admin -n kubernetes-dashboard
附:Node 节点一键初始化脚本
把前面 1~4 步和 join 操作封装成脚本,可快速初始化新的工作节点(请将 join 命令替换为自己的):
#!/bin/bash
set -e
K8S_PACKAGE_URL="http://CHANGE_ME/k8s.tar.gz"
WORK_DIR="/opt/k8s-setup"
if [ "$EUID" -ne 0 ]; then
echo "请使用 root 权限运行此脚本"
exit 1
fi
# 1. 下载并解压软件包
mkdir -p ${WORK_DIR}
cd ${WORK_DIR}
if [ ! -f k8s.tar.gz ]; then
wget ${K8S_PACKAGE_URL} || { echo "软件包下载失败"; exit 1; }
fi
tar -xzvf k8s.tar.gz
cd k8s
# 2. 安装 containerd
tar -xzvf containerd-*.tar.gz -C /usr/local
mkdir -p /usr/local/lib/systemd/system
cp containerd.service /usr/local/lib/systemd/system/containerd.service
install -m 755 runc.amd64 /usr/local/sbin/runc
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
systemctl daemon-reload
systemctl enable --now containerd
# 3. 安装 CNI 插件和 crictl
mkdir -p /opt/cni/bin
tar -xzvf cni-plugins-*.tgz -C /opt/cni/bin
tar -xzvf crictl-*.tar.gz -C /usr/local/bin
systemctl restart containerd
# 4. 配置内核参数与 IPVS
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
sysctl --system
sysctl net.ipv4.ip_forward | grep -q '1' || { echo "IP 转发未生效"; exit 1; }
cat <<EOF | tee /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
if lsmod | grep -q nf_conntrack; then
modprobe -- nf_conntrack
else
modprobe -- nf_conntrack_ipv4
fi
EOF
chmod +x /etc/sysconfig/modules/ipvs.modules
/bin/bash /etc/sysconfig/modules/ipvs.modules
# 5. 配置 K8s 源并安装 kubelet/kubeadm
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
yum install -y kubelet kubeadm
systemctl enable --now kubelet
# 6. 加入集群
kubeadm join 172.16.0.11:6443 \
--token CHANGE_ME.TOKEN \
--discovery-token-ca-cert-hash sha256:CHANGE_ME
echo "节点初始化完成!"
总结
至此,一套基于 containerd + kubeadm + Calico 的 K8s v1.30 集群搭建完成,并部署了 Higress 网关作为南北向流量入口。后续可以:
- 通过 Higress Ingress/Gateway API 暴露内部服务;
- 用
kubectl create secret docker-registry regcred配置私有镜像拉取; - 按需安装 Dashboard、监控等周边组件。