云服务器上3节点K8s集群实战:用kubeadm搞定Master/Worker节点配置与Flannel网络
云服务器上3节点K8s集群实战:用kubeadm搞定Master/Worker节点配置与Flannel网络
在云计算时代,Kubernetes(K8s)已成为容器编排的事实标准。对于需要在生产环境中部署容器化应用的DevOps团队来说,掌握多节点K8s集群的搭建是必备技能。本文将基于腾讯云/华为云等主流云平台,详细解析如何通过kubeadm工具快速构建一个3节点的生产级K8s集群,涵盖从环境准备到网络配置的全流程实战操作。
1. 环境准备与系统配置
在开始部署K8s集群前,我们需要确保所有节点满足基本要求并完成必要的系统配置。对于云服务器环境,建议选择同一地域的相同配置实例以确保最佳的网络性能。以下是三台服务器的典型配置:
- Master节点:2核CPU/4GB内存/50GB SSD(控制平面组件)
- Worker节点×2:2核CPU/4GB内存/50GB SSD(运行工作负载)
1.1 系统基础配置
在所有节点上执行以下操作:
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
# 禁用SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 关闭swap
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 设置时间同步
yum install -y chrony || apt-get install -y chrony
systemctl enable --now chronyd
1.2 内核参数优化
K8s对Linux内核参数有特定要求,需配置以下参数:
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
1.3 容器运行时安装
K8s 1.24+版本默认使用containerd作为容器运行时:
# 安装containerd
yum install -y containerd.io || apt-get install -y containerd
# 配置systemd cgroup驱动
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重启服务
systemctl restart containerd && systemctl enable containerd
2. K8s组件安装与Master节点初始化
2.1 安装kubeadm/kubelet/kubectl
在所有节点上添加K8s仓库并安装必要组件:
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
systemctl enable --now kubelet
2.2 Master节点初始化
在Master节点执行初始化命令,关键参数说明:
--apiserver-advertise-address:Master节点内网IP--pod-network-cidr:Pod网络CIDR(需与后续网络插件匹配)--image-repository:使用国内镜像源加速
kubeadm init \
--apiserver-advertise-address=192.168.0.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--upload-certs
初始化成功后,会输出Worker节点加入集群的命令,类似:
kubeadm join 192.168.0.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxx
2.3 配置kubectl
在Master节点配置kubectl访问权限:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
验证集群状态:
kubectl get nodes
# 应显示Master节点状态为NotReady(尚未安装网络插件)
3. Worker节点加入与网络配置
3.1 Worker节点加入集群
在每个Worker节点执行Master初始化时输出的join命令:
kubeadm join 192.168.0.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxx
加入成功后,在Master节点验证:
kubectl get nodes
# 应显示3个节点(1个Master+2个Worker)
3.2 安装Flannel网络插件
Flannel是K8s常用的Overlay网络方案,配置简单且性能稳定:
# 下载Flannel YAML配置
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改网络配置与初始化时的pod-network-cidr一致
sed -i 's|"Network": "10.244.0.0/16"|"Network": "10.244.0.0/16"|' kube-flannel.yml
# 部署Flannel
kubectl apply -f kube-flannel.yml
等待所有Pod变为Running状态:
watch kubectl get pods -n kube-system
# 应看到flannel和coredns等组件正常运行
4. 云平台特殊配置与生产优化
4.1 云服务器安全组配置
在云平台控制台需确保以下端口开放:
| 方向 | 协议 | 端口范围 | 用途 |
|---|---|---|---|
| 入站 | TCP | 6443 | K8s API Server |
| 入站 | TCP | 2379-2380 | etcd server |
| 入站 | TCP | 10250 | Kubelet API |
| 入站 | UDP | 8472 | Flannel VXLAN |
4.2 高可用配置建议
对于生产环境,建议对Master节点进行高可用配置:
# 在其他控制平面节点执行(需先安装kubeadm)
kubeadm join 192.168.0.100:6443 \
--token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxx \
--control-plane \
--certificate-key xxxxxxxxxxxxxxxxxxxx
4.3 关键组件监控
部署Metrics Server实现基础监控:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
验证节点资源使用情况:
kubectl top nodes
5. 常见问题排查与维护
5.1 节点NotReady问题排查
# 查看节点详细状态
kubectl describe node <node-name>
# 检查kubelet日志
journalctl -u kubelet -f
5.2 网络故障排查
# 检查Flannel Pod日志
kubectl logs -n kube-system <flannel-pod-name>
# 验证跨节点网络连通性
kubectl run -it --rm --image=alpine test -- sh
# 在Pod内ping其他节点Pod IP
5.3 证书更新
当集群证书即将过期时:
# 检查证书有效期
kubeadm certs check-expiration
# 更新证书
kubeadm certs renew all
通过以上步骤,我们已在云服务器上成功部署了一个3节点的生产级K8s集群。实际使用中,建议结合CI/CD流水线实现应用的自动化部署,并定期备份etcd数据以确保集群安全。对于更复杂的生产需求,可考虑使用云托管的K8s服务或部署集群自动扩缩容组件。
更多推荐
所有评论(0)