搭建环境介绍:openEuler-22.03-LTS-SP3-x86_64-dvd

k8s介绍:Kubernetes(简称 K8s)是谷歌基于 Borg 系统开源的容器编排与管理平台,自 2014 年发布以来,已成为云计算领域的 “事实标准”,广泛应用于微服务架构、DevOps 流水线、云原生应用部署等场景。其核心目标是解决 “容器化应用在分布式环境下的部署、扩展、运维难题”,让开发者和运维人员能更高效地管理大规模容器集群。

Kubernetes 集群核心节点角色解析

Kubernetes(K8s)集群的正常运行依赖多节点协同,通过将多个独立节点按功能划分角色、组建统一集群,实现对容器应用的高效管理与调度。在集群架构中,节点主要分为两类核心角色,二者职责明确、分工协作,共同支撑集群的稳定运行:

  1. 管理节点(Master 节点)作为集群的 “控制中枢”,Master 节点承担集群全部管理与调度任务,负责决策 “容器在哪里运行”“如何保障服务稳定”“资源如何分配” 等核心问题。其核心作用是维护集群的整体状态,确保集群运行符合用户定义的预期(如应用副本数量、资源限制等),不直接运行用户的业务容器。

  2. 工作节点(Node 节点)作为集群的 “业务执行载体”,Node 节点是用户容器应用的实际运行场所,主要负责接收并执行 Master 节点下发的任务指令。例如启动 / 停止容器、监控容器运行状态、上报节点资源使用情况(CPU、内存、存储等),同时配合 Master 节点完成负载均衡、故障自愈等操作,直接支撑业务的对外服务。

Kubernetes 集群核心类型解析

Kubernetes(K8s)集群的部署架构需结合使用场景(如学习测试、生产业务)设计,核心差异体现在管理节点(Master)的数量配置上,由此衍生出两种主流集群类型,二者在可用性、适用场景上各有侧重,具体如下:

  1. 一主多从集群这类集群的架构由1 台 Master 管理节点多台 Node 工作节点组成:Master 节点作为唯一控制中枢,负责集群的调度、配置管理等核心任务;多台 Node 节点则承担业务容器的运行工作,通过分布式部署提升业务处理能力。从适用场景来看,由于仅单台 Master 节点缺乏冗余机制,一旦 Master 故障会导致整个集群管理功能失效,存在明显单点故障风险,因此更适合用于学习、测试或非核心的小型业务场景,而非高可用要求严格的生产环境。

  2. 多主多从集群这类集群的架构升级为多台 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安装完成后,系统基础环境配置也完成后,现在我们就可以来安装 Kubeadmkubelet了,我这里是通过指定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.安装 kubeadmkubeletkubectl,可先查询可安装的版本,然后指定版本进行安装。

下面进行安装:

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

至此集群搭建完毕,同时也解决了集群之间的网络通信

最后,如果此文章对你来说有帮助,请帮忙点点赞和转发。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐