Kubernetes v1.30 集群安装与 Higress 网关部署指南

本文记录一套完整的多节点 Kubernetes v1.30 集群搭建过程:基于 containerd 运行时、kubeadm 初始化、Calico 网络插件,最后通过 Helm 部署 Higress 云原生网关作为集群入口。环境为 CentOS + amd64 架构。

环境说明

操作系统CentOS(yum 包管理)
Kubernetesv1.30.2
容器运行时containerd 1.7.11
网络插件Calico v3.28.0
Master 节点 IP172.16.0.11
Pod CIDR10.244.0.0/16
Service CIDR10.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-addressMaster 节点对外通信的 IP
--image-repository镜像仓库,国内使用阿里云加速
--kubernetes-version指定 K8s 版本,必须与已安装的 kubeadm 一致
--pod-network-cidrPod 网段,需与网络插件规划一致(Calico 默认 10.244.0.0/16)
--service-cidrService 网段

也可以用 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、监控等周边组件。