如何在腾讯云 CVM 实例上部署 Kubernetes 集群节点?

如何在腾讯云 CVM 实例上部署 Kubernetes 集群节点?

在腾讯云 CVM 上部署 Kubernetes 集群时,Master 节点最低需要 2 核 4GB 配置,且主机名必须符合正则表达式 [a-z0-9]([-a-z0-9]*[a-z0-9])? 以避免 kubeadm 初始化报错。

原因分析

Kubernetes 集群部署失败的主要原因集中在环境预配置环节。根据 Kubernetes 官方 CHANGELOG-1.14.md 外部依赖部分,Docker 版本必须在支持列表内(1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06、18.09),否则会导致容器运行时不兼容。Linux 内核版本要求 3.10 及以上,etcd 需要 3.0 版本及以上,这些是集群组件正常通信的基础条件。主机名格式不符合正则表达式 [a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)* 时,kubeadm init 会直接报错拒绝初始化,这是因为 Kubernetes 使用主机名作为节点标识进行服务发现。

环境准备与配置

第一步:创建 3 台 CVM 实例,地域必须相同以保证内网互通。Master 节点配置 2CPU、4GB 内存,Node 节点配置 2CPU、2GB 内存。操作系统选择 CentOS 7.5/7.6 或 CentOS 8 最小化安装。网络配置示例:Master 为 10.0.0.10/24,Node1 为 10.0.0.11/24,Node2 为 10.0.0.12/24。

第二步:配置安全组。在【设置主机】页面点击【新建安全组】,模板选择放通全部端口,因为 Kubernetes 使用的端口较多(API Server 6443、etcd 2379-2380、kubelet 10250 等)。

第三步:修改主机名。在三台服务器上分别执行:
hostnamectl set-hostname kube-master
hostnamectl set-hostname kube-node-1
hostnamectl set-hostname kube-node-2
注意主机名只能使用小写字母、数字、-和.的组合,且.不能连续。

系统环境配置

所有节点需要执行以下配置:

1. 关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld

2. 关闭 Swap 分区(必须操作,否则 kubeadm 初始化会失败):
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

3. 关闭 SELinux:
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

4. 加载 br_netfilter 模块并配置内核参数:
modprobe br_netfilter
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

5. 配置 hosts 解析,在三台服务器上添加:
10.0.0.10 kube-master
10.0.0.11 kube-node-1
10.0.0.12 kube-node-2

安装 Docker 与 Kubernetes 组件

在所有节点安装 Docker,建议指定版本安装(如 18.06):
yum install -y docker-ce-18.06.0.ce

配置 Docker 启动文件后启动服务:
systemctl enable docker && systemctl start docker

在 Master 节点初始化集群:
kubeadm init --pod-network-cidr=10.244.0.0/16

初始化成功后会输出 join 命令,在 Node 节点执行该命令加入集群:
kubeadm join 10.0.0.10:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Dashboard 部署与访问

部署 Kubernetes Dashboard v2.4.0:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

将 Service 类型从 ClusterIP 改为 NodePort,设置端口为 30001:
kubectl --namespace=kubernetes-dashboard edit service kubernetes-dashboard

生成 HTTPS 证书并重启 Dashboard Pod,之后可通过浏览器访问 https://<NodeIP>:30001/。注意需要在 Chrome 页面输入 thisunsafe 让浏览器信任自签名证书。

注意事项

1. 镜像拉取问题:国内地域无法直接拉取国外镜像,建议在中国香港地域创建一台服务器安装 squid 作为代理,或配置国内镜像源。这是 2021 年 3 月 25 日运维杂家技术分享专栏中用户反馈的高频问题。

2. 主机名格式验证:2026 年 4 月 16 日的资料明确指出,主机名不匹配正则表达式会导致 kubeadm 报错,建议使用纯小写字母加数字组合(如 kube-master-01)。

3. CBS 存储兼容问题:自建 Kubernetes 默认不兼容腾讯云 CBS 存储,需要改造 csi-controller.yaml。2024 年 7 月 5 日的 CODING 实践指南指出,腾讯云 SDK 中云平台接口终结点地址是写死的腾讯公有云地址,私有云环境需要魔改镜像,建议退而求其次使用 rancher 的 local-path-provisioner 挂载存储。

4. 端口开放:Dashboard 使用 NodePort 30001 时,必须在腾讯云安全组中开放该端口,否则无法从外部访问。

5. 时间同步:所有节点需要配置时间同步,否则会导致证书验证失败和集群通信异常。

参考来源

来源:腾讯云官方文档 - Kubernetes 分布式集群搭建(2026 年 4 月 16 日)

来源:GitHub - Kubernetes CHANGELOG-1.14.md 外部依赖部分

来源:运维杂家技术分享专栏 - 在腾讯云上使用 kubeadm 搭建 Kubernetes 集群(2021 年 3 月 25 日)

来源:CODING 实践指南 - 基于 CVM 离线部署 Kubernetes(2024 年 7 月 5 日)

原文链接:https://www.zjcp.cc/ask/9753.html

posted @ 2026-05-05 10:20  茶猫云呀  阅读(0)  评论(0)    收藏  举报