如何在腾讯云 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-masterhostnamectl set-hostname kube-node-1hostnamectl set-hostname kube-node-2
注意主机名只能使用小写字母、数字、-和.的组合,且.不能连续。
系统环境配置
所有节点需要执行以下配置:
1. 关闭防火墙:systemctl stop firewalldsystemctl disable firewalld
2. 关闭 Swap 分区(必须操作,否则 kubeadm 初始化会失败):swapoff -ased -i 's/.*swap.*/#&/' /etc/fstab
3. 关闭 SELinux:setenforce 0sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
4. 加载 br_netfilter 模块并配置内核参数:modprobe br_netfiltercat <<EOF > /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsysctl -p /etc/sysctl.d/k8s.conf
5. 配置 hosts 解析,在三台服务器上添加:10.0.0.10 kube-master10.0.0.11 kube-node-110.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 日)

浙公网安备 33010602011771号