Kubernetes 集群:节点角色、核心类型与搭建基础全解析
搭建环境介绍:openEuler-22.03-LTS-SP3-x86_64-dvd
k8s介绍:Kubernetes(简称 K8s)是谷歌基于 Borg 系统开源的容器编排与管理平台,自 2014 年发布以来,已成为云计算领域的 “事实标准”,广泛应用于微服务架构、DevOps 流水线、云原生应用部署等场景。其核心目标是解决 “容器化应用在分布式环境下的部署、扩展、运维难题”,让开发者和运维人员能更高效地管理大规模容器集群。
Kubernetes 集群核心节点角色解析
Kubernetes(K8s)集群的正常运行依赖多节点协同,通过将多个独立节点按功能划分角色、组建统一集群,实现对容器应用的高效管理与调度。在集群架构中,节点主要分为两类核心角色,二者职责明确、分工协作,共同支撑集群的稳定运行:
-
管理节点(Master 节点)作为集群的 “控制中枢”,Master 节点承担集群全部管理与调度任务,负责决策 “容器在哪里运行”“如何保障服务稳定”“资源如何分配” 等核心问题。其核心作用是维护集群的整体状态,确保集群运行符合用户定义的预期(如应用副本数量、资源限制等),不直接运行用户的业务容器。
-
工作节点(Node 节点)作为集群的 “业务执行载体”,Node 节点是用户容器应用的实际运行场所,主要负责接收并执行 Master 节点下发的任务指令。例如启动 / 停止容器、监控容器运行状态、上报节点资源使用情况(CPU、内存、存储等),同时配合 Master 节点完成负载均衡、故障自愈等操作,直接支撑业务的对外服务。
Kubernetes 集群核心类型解析
Kubernetes(K8s)集群的部署架构需结合使用场景(如学习测试、生产业务)设计,核心差异体现在管理节点(Master)的数量配置上,由此衍生出两种主流集群类型,二者在可用性、适用场景上各有侧重,具体如下:
-
一主多从集群这类集群的架构由1 台 Master 管理节点与多台 Node 工作节点组成:Master 节点作为唯一控制中枢,负责集群的调度、配置管理等核心任务;多台 Node 节点则承担业务容器的运行工作,通过分布式部署提升业务处理能力。从适用场景来看,由于仅单台 Master 节点缺乏冗余机制,一旦 Master 故障会导致整个集群管理功能失效,存在明显单点故障风险,因此更适合用于学习、测试或非核心的小型业务场景,而非高可用要求严格的生产环境。
-
多主多从集群这类集群的架构升级为多台 Master 管理节点与多台 Node 工作节点的组合:多台 Master 节点会通过集群化部署(如借助 etcd 集群实现数据一致性)形成冗余,避免单点故障,确保集群管理功能持续可用;多台 Node 节点同样保持业务容器运行能力,配合 Master 节点的高可用设计,进一步提升整体架构稳定性。由于其在管理层实现了高可用保障,能有效应对 Master 节点故障、硬件异常等风险,安全性和可靠性显著优于一主多从架构,因此是生产环境(尤其是核心业务、高并发场景)的首选集群类型。
kubernetes集群规划和搭建
提示:系统尽量别带图形界面,图形比较吃内存。
|
主机名 |
IP地址 |
角色 |
操作系统 |
硬件配置 |
|
master01 |
x.x.x.x |
管理节点 |
openEuler 22.03 |
2CPU/4G内存/50G |
|
node01 |
x.x.x.x |
工作节点 |
openEuler 22.03 |
2CPU/4G内存/50G |
|
node02 |
x.x.x.x |
工作节点 |
openEuler 22.03 |
2CPU/4G内存/50G |
搭建方法以及具体步骤(以下步骤是所有节点都需要执行的):
1.关闭防火墙以及selinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && \
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
2.按照集群规划修改主机名
hostnamectl set-hostname 主机名
3.配置集群的本地解析
echo "192.168.0.10 master
192.168.0.11 node01
192.168.0.12 node02" >> /etc/hosts
4.开启网桥过滤(充当虚拟交换机为集群内容器提供网络通信功能)
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
5.添加 overlay 和 br_netfilter 内核模块
modprobe overlay
modprobe br_netfilter
6.加载配置文件,使上述配置生效
sysctl -p /etc/sysctl.d/k8s.conf
7.关闭交换分区
swapoff -a && \
sed -ri 's/.*swap.*/#&/' /etc/fstab
8.安装 Containerd与配置加速器
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
dnf install containerd.io -y
9.生成containerd配置文件
containerd config default | tee /etc/containerd/config.toml
10.启用Cgroup用于限制进程的资源使用量,如CPU、内存资源
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#' /etc/containerd/config.toml
11.替换文件中pause镜像的下载地址为阿里云仓库
sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#' /etc/containerd/config.toml
12.为Containerd配置镜像加速器,在文件中找到[plugins."io.containerd.grpc.v1.cri".registry.mirrors],在下方添加镜像加速器
#...
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://abde64ba3c6d4242b9d12854789018c6.mirror.swr.myhuaweicloud.com"]
13.启动Containerd
systemctl daemon-reload && systemctl enable containerd && systemctl restart containerd
14.在确保 Containerd安装完成后,系统基础环境配置也完成后,现在我们就可以来安装 Kubeadm、kubelet了,我这里是通过指定yum 源的方式来进行安装,使用阿里云的源进行安装:
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
15.安装 kubeadm、kubelet、kubectl,可先查询可安装的版本,然后指定版本进行安装。
下面进行安装:
yum install kubelet kubeadm kubectl cri-tools --disableexcludes=kubernetes
16.然后将 kubelet 设置成开机启动
systemctl daemon-reload && systemctl enable kubelet && systemctl start kubelet
17.在安装kubelet等工具的时候已经自动安装了crictl,要使用这个命令,还需要做以下配置:
使用crictl连接containerd,需要创建/etc/crictl.yaml,写入以下内容;
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
这里注意runtime-endpoint 和image-endpoint必须与/etc/containerd/config.toml中对应项的配置保持一致。
18.kubelet启用Cgroup控制组,用于限制进程的资源使用量,如CPU、内存
tee > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF
19.设置开机自启动
systemctl enable kubelet
使用kubeadm进行集群初始化(接下来只需要在master节点操作即可)
1.在 master 节点配置 kubeadm 初始化文件,可以通过如下命令导出默认的初始化配置
kubeadm config print init-defaults > kubeadm-config.yaml
2.配置文件需要修改如下内容
#管理节点的IP地址
advertiseAddress: x.x.x.x
#本机注册到集群后的节点名称
name: master01
#集群镜像下载地址,修改为阿里云
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
3.通过配置文件初始化集群
kubeadm init --config kubeadm-config.yaml

4.根据集群初始化后的提示,执行如下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5.根据提示加入从节点 kubeadm join ip:6443 --token ~
6.根据提示将node节点加入集群,加入成功后在master节点验证
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 NotReady control-plane 3m31s v1.31.10
node01 NotReady <none> 12s v1.31.10
node02 NotReady <none> 89s v1.31.10
7.安装网络插件
wget https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml
此插件的安装过程,需要下载三个镜像文件,下载完成,网络插件即可正常工作。等网络插件镜像下载完成以后,看到node的状态会变成ready,执行如下命令查看:
kubectl get node

至此集群搭建完毕,同时也解决了集群之间的网络通信
最后,如果此文章对你来说有帮助,请帮忙点点赞和转发。
更多推荐


所有评论(0)