Kubernetes学习指北之多节点集群(Multi Node Cluster)
Kubernetes学习指北之多节点集群(Multi Node Cluster)
一、 多节点集群(Multi Node Cluster)说明
真实生产环境的缩影,可以模拟调度、高可用、跨节点通信
特点
Master 节点负责管理集群
多个 Worker 节点运行实际应用 Pod
Master 负责调度、管理和监控
高可用性可扩展
可以增加 Worker 节点提升容量
Master 可做 HA(高可用)部署
真实调度场景
- Kubernetes 会根据资源和策略,将 Pod 调度到不同节点
网络复杂
- Pod 网络跨节点,需要 CNI 插件(Flannel、Calico 等)支持
适用场景
生产环境部署微服务
测试调度策略、Pod 分布、Service 负载均衡
实战演练集群管理和高可用
优点
模拟真实生产环境
可以横向扩展容器数量
Master 故障可配置高可用
缺点
配置复杂,需要多台虚拟机或服务器
网络和存储管理比单节点复杂
资源占用高
二、 准备环境和工具
这里使用centos7环境 说明
sudo -i 建议用root账号操作
每台节点都需要执行的操作,包括 master 和 worker:系统初始化、安装和配置容器运行时(containerd)、镜像源替换等操作
这里不再赘述,参照另一篇:Kubernetes学习指北之单节点集群
三、节点准备
在每台节点上安装:
1# 安装 kubeadm、kubelet、kubectl
2yum install -y kubelet kubeadm kubectl
3
4# 启动 kubelet
5systemctl enable --now kubelet
6
7# 关闭 swap(K8s 要求)
8swapoff -a
9sed -i '/swap/d' /etc/fstab
10
11# 配置 sysctl
12cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
13net.bridge.bridge-nf-call-ip6tables = 1
14net.bridge.bridge-nf-call-iptables = 1
15EOF
16sysctl --system
四、初始化控制平面节点(master)
在master机器执行:
1kubeadm init \
2 --apiserver-advertise-address=192.168.56.10 \
3 --pod-network-cidr=10.244.0.0/16 \
4 --image-repository=registry.aliyuncs.com/google_containers
注意:
–pod-network-cidr 要与 Flannel 网络一致(默认 10.244.0.0/16)。
初始化成功后 kubeadm 会输出 kubeadm join … 命令,用于 worker 节点加入集群。
初始化完成后:
1# 配置 kubectl 使用
2mkdir -p $HOME/.kube
3sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
4sudo chown $(id -u):$(id -g) $HOME/.kube/config
五、部署网络插件(Flannel)
在 master 节点:
1kubectl apply -f kube-flannel.yml
2
3# 确保 Flannel Pod 运行:
4kubectl get pods -n kube-flannel -w
六、worker 节点加入集群
在每个 worker 节点执行 kubeadm join(master 初始化后得到的命令):
1kubeadm join 192.168.56.10:6443 \
2 --token <token> \
3 --discovery-token-ca-cert-hash sha256:<hash>
加入成功后,在 master 上查看节点:
1kubectl get nodes
输出类似:
1NAME STATUS ROLES AGE
2k8s-master Ready control-plane 5m
3k8s-worker1 Ready <none> 1m
4k8s-worker2 Ready <none> 1m
七、模拟部署应用
多节点和单节点大部分 YAML 文件是可以共用的,根据用途和部署对象调整。一般可能需要修改 副本数(replicas)、节点选择器、存储卷(Storage:)
- 副本数
- 单机一般 replicas: 1
- 多节点可以 replicas: 2 或更多,实现负载均衡
- NodeSelector / Tolerations
- 如果某些 Pod 只能跑在特定节点,需要加 nodeSelector 或 tolerations
- Storage
- 单机可以用 hostPath
- 多节点建议用 PV+PVC,保证跨节点数据持久化
- 副本数
在多节点集群中,Deployment 会根据调度策略自动把 Pod 分配到 worker 节点。
部署示例:
1# 部署
2kubectl create namespace demo
3
4kubectl apply -f laravel-deployment.yaml -n demo
5kubectl apply -f laravel-service.yaml -n demo
6
7# 查看 Pod 分布:
8kubectl get pods -n demo -o wide
会看到 Pod 分布在不同的节点上。
使用虚拟机说明
Vagrantfile 多节点集群示例
1Vagrant.configure("2") do |config|
2 config.vm.box = "generic/centos7"
3
4 # k8s 多节点集群
5 # Master
6 config.vm.define "master" do |master|
7 master.vm.hostname = "k8s-master"
8 master.vm.network "private_network", ip: "192.168.56.10"
9 master.vm.provider "virtualbox" do |vb|
10 vb.memory = 2048
11 vb.cpus = 2
12 vb.name = "vagrant-k8s-master"
13 end
14 end
15
16 # Node1
17 config.vm.define "node1" do |node|
18 node.vm.hostname = "k8s-worker1"
19 node.vm.network "private_network", ip: "192.168.56.11"
20 node.vm.provider "virtualbox" do |vb|
21 vb.memory = 1024
22 vb.cpus = 1
23 vb.name = "vagrant-k8s-node1"
24 end
25 end
26
27 # Node2 可选
28 config.vm.define "node2" do |node|
29 node.vm.hostname = "k8s-worker2"
30 node.vm.network "private_network", ip: "192.168.56.12"
31 node.vm.provider "virtualbox" do |vb|
32 vb.memory = 1024
33 vb.cpus = 1
34 vb.name = "vagrant-k8s-node2"
35 end
36 end
37end
vagrant 命令:
1vagrant up
2
3vagrant status k8s-single
4
5vagrant ssh k8s-master -- -F NUL
6
7vagrant halt k8s-master
8# 删除虚拟机
9vagrant destroy k8s-master
vagrant up 成功后环境如:
| 节点名称 | IP | 角色 |
|---|---|---|
| k8s-master | 192.168.56.10 | control-plane |
| k8s-worker1 | 192.168.56.11 | worker |
| k8s-worker2 | 192.168.56.12 | worker |
说明:
控制平面节点负责 API Server、Scheduler、Controller Manager。
Worker 节点运行应用 Pod。
所有节点通过 Flannel 或 Calico 网络插件互通。
模拟场景可使用 Vagrant+VirtualBox 或多台物理机/VM。
发表评论