目录
[5.管理者------Controller Manager](#5.管理者——Controller Manager)
[8.容器运行时------Container Runtime](#8.容器运行时——Container Runtime)
一.Kubernetes基础概念
1.1简单介绍
1.什么是Kubernetes?
kubernetes,也称k8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。它将与运行应用程序的容器组合成逻辑单元,以便管理和服务发现。
容器是实现应用运行的好方式,你需要管理容器的服务运行,并确保该应用服务不会下线。但是当容器运行时,也有可能会出现故障。这时,我们需要启动另一台容器。这个步骤可不可以交给一个系统去完成,让这个系统去监测这个容器的状态,并自动修复它。这就是k8s的功能。
k8s提供给我们一个可弹性运行的分布式框架,满足你的扩展要求、故障应用转移和自动修复、提供给你全新的应用部署模式。
2.Docker和Kubernetes的区别
Docker,类似"集装箱的制造工具"。它负责打包应用为标准的容器,里面封装着应用程序和运行环境,是一个容器运行时(Container Runtime),主要负责单个容器的创建、运行和管理。核心功能是:构建镜像、创建并启动容器以及本地容器的生命周期管理等。
Kubernetes,类似"一个大的物流系统",它管理着各个集装箱的传输,调度和存储。它是一个容器编排平台,负责管理跨主机的多个容器集群。核心功能是:自动化部署,扩缩容、负载均衡和故障转移等等。
1.2Kubernetes组件介绍
1.k8s架构介绍
Kubernetes的架构是高度可扩展和可定制的。它由Master节点和Worker节点组成。Master节点负责管理集群状态和调度任务,而****Worker节点负责运行Pod 和容器。基本架构如下图所示:

Kubernetes 支持多种容器运行时,如Docker、CRI-O、containerd 和rkt 等。容器运行时,负责管理容器的生命周期,如创建、运行和删除等等。
Kubernetes还支持多种存储后端,如本地存储、NFS、GlusterFS、Ceph 和AWS EBS 等。
Kubernetes 还支持插件机制,可以自定义扩展集群的功能,例如网络插件、认证插件和日志插件等。
2.集群API入口------Apiserver
概述 :kube-apiserver的核心功能是提供kubernets的各种增、删、改、查以及watch等HTTP REST接口 ,是整个k8s集群中各个功能模块的数据交互和通信的中枢,是集群的数据总线和数据交换中心。除此之外,它还管理着集群的API入口,数据需要通过API接口进出集群,管理着整个集群的资源配额,提供了完备的集群安全机制。
功能介绍:
1.REST接口:Kube-apiserver提供了集群的RESTful接口,允许集群内的组件和用户可以通过HTTP协议进行通信和数据交换。
2.数据总线和交换中心: 所有数据都需要通过kube-apiserver进行数据交换,同时,它本身支持代理读写数据。
3.安全机制 :apiserver实施了认证、授权和准入控制等安全策略
4.与etcd交互:负责读取etcd中存储的集群信息,并代为转发。 整个集群中只有apiserver能够直接与etcd交互,其他组件通过apiserver与etcd进行交互。
总的来说:APIserver是整个集群的统一的API入口和数据交互中心。
3.数据存储中心------etcd
概述 :etcd是一个分布式键值对存储系统 ,整个集群中的数据存储中心,主要负责存储集群中的所有状态信息和元数据信息。它是k8s控制平面的核心组件之一,k8s中的所有配置信息,期望状态和 服务发现等等数据都存储在它内部。
功能介绍:
1.k8s的核心存储中心,集群中的所有状态信息都存储在etc中
2.提供高可用、强一致性的分布式存储, 确保信息在多个节点上同步**。**
3.唯一支持与apiserver进行数据交互, 实现集群的更新、扩缩容和自动部署**。**
总的来说 :etcd是整个kubernetes集群的数据存储中心,集群中的所有状态信息都存储在etcd中。通过高可用、强一致性的分布式数据库,提供可靠的数据存储,确保集群中各个节点的信息同步。
4.调度器------Scheduler
概述 :Scheduler是k8s集群中重要的调度中心,它负责将新创建的pod、集群中还未指定运行节点的pod安排到合适的k8s节点上运行。除此之外,通过监听apiserver,查询是否存在没有分配node的pod,将这些pod按照分配策略(内存、CPU资源等)分配给合适的节点上运行。
功能介绍:
1.监听未分配的pod节点 :Scheduler会监听apiserver接口,查询是否存在没有地方工作的pod节点,为这些pod分配工作地点(node)。
2.预选节点 :通过一系列过滤筛选规则,选择出能够正常工作的节点作为预选节点,供pod工作。如:满足pod资源要求,符合亲和性条件
3.优选节点: 通过一系列比较规则,自动选择出最适合该pod执行的工作节点。如:更多的CPU、更多的内存或者节点、pod亲和性更好的节点
4.绑定pod到node: scheduler将节点绑定到固定的node上,apiserver会不断更新pod状态。
5.管理者------Controller Manager
Controller的作用 :在k8s集群中,每个Controller通过监听apiserver接口,实时查询集群中特定资源的状态变化,进而监控整个集群的状态 。当集群中的某一个节点与etcd中存储的期望状态不同时,Controller会首先尝试将pod修复到与期望状态,这里的期望状态主要是pod数量和版本是否符合要求,确保pod在期望状态下正常工作。
概述 :Controller Manager就是用来管理这些操作系统------Controller 。它是整个集群的控制中心,也是k8s集群的自动化中心,负责运行控制器(Controller)进程。
控制器分类:逻辑上讲,这里的每一个控制器都是一个单一的进程。但为了较低集群的复杂性,一般会将控制器放到同一个可执行文件中运行,主要包含以下几类:
1.节点控制器 (Node Controller):当节点出现故障时,进行通信和响应。
2.任务控制器 (Job Controller):监测一次性代表对象Job任务,创建pods对象运行Job任务直到任务执行完毕。
3.端点分片控制器 (EndpointSlice controller):填充端点分片配对象,充当Server与pod间的链接。Server通过 EndpointSlice 可以同时与多个pod建立通信,是实现负载均衡的基础。
4.服务账号控制器 (ServerAccount Controller):为新的命名空间创建默认服务账号
6.节点守护进程------Kubelet
概述 :它是k8s集群的守护进程。它会在每一个node节点上运行,确保所有容器(controller)都在pod上正常运行 。kubelete通过各类机制提供的一组pod期望(pod期望存储在etcd上),与当前pod状态相比较,确保这些pod的状态一致,这里的pod期望状态是pod内部的container容器的期望状态,如正常运行、停止运行等等。
Kubelet只会管理由Kubernetes创建的容器,不会管理其他的容器。 在每个node上都会启动一个Kubelet服务进程,负责处理主节点上下发的任务,管理pod和pod内部的容器。每个Kubelet进程都会在apiserver上注册自己的信息,并定期汇报自己的资源使用情况。
功能介绍:
1.容器的生命周期管理: 根据k8s集群的指令**,启动、运行和停止容器。**
2.健康检查:定期进行容器的健康检查, 确保服务的正常运行**。**
3.状态同步 :与K8s集群的控制平面通信,确保pod状态与期望状态一致。
**4.资源管理:**监测并汇报自己节点的资源使用情况,如内存、CPU等等
**5.存储卷管理:**挂载和卸载Pod所需的持久化数据卷
6.网络配置:与网络插件(CNI)交互,为pod分发网络资源。同一个pod内部共享网络资源,即:同一个网络命名空间,pod内部的所有容器共享一个IP
7.网络代理------Kube-Proxy
概述 :Kube-proxy字如其名,就是K8S集群中每个节点的网络代理,主要用来维护节点上的一些网络规则,这些网络规则允许网络从外部或者内部会话与pod进行通信。他是实现集群中Service重要的一部分。
8.容器运行时------Container Runtime
概述 :负责真正将容器从底层启动的软件,支持多种容器运行环境,如:containerd、CRI-O以及Kubernetes CRI(容器运行环境接口)等等
9.DNS解析------CoreDNS
概述 :一种灵活性、可扩展的DNS服务器,主要负责集群内部的Pod提供DNS服务 。用于K8S集群内部的服务(Service)解析,让Pod把服务Service名称解析成Service的IP,然后通过Service的IP地址连接到对应的服务上。同时扮演着服务发现和DNS解析的重要角色,使得集群中的Pod和Service可以通过DNS通信,而无需手动管理IP地址。
工作方式:
1.服务发现 :服务是通过DNS解析名称访问的。当一个Pod需要访问服务时,会向CoreDNS发起一个DNS查询。
2.查询处理:CoreDNS收到查询请求时,会根据DNS服务名称和命名空间,通过Kubernetes API 查询相应的Service和EndPointSlices对象。
3.响应构造: 一旦找到匹配的Service和Pod**,CoreDNS会构造一个DNS响应,返回请求者,Service的Cluster IP和Pod的IP地址。**
4.负载均衡: 如果存在多个EndPointSlices对象**,可以把流量均匀分配给多个Pod**
10.分配IP------Calico
概述 :负责为每个 Pod 分配一个唯一的 IP 地址,并确保 Pod 能够跨节点通信。每个 Kubernetes 节点上都会运行一个 calico-node 容器,该容器包含 Calico 的核心代理(Felix)和 BGP 客户端,负责管理和维护路由信息。
Calico 将每个节点的路由信息分发到集群中的其他节点,从而实现不同节点上的 Pod 之间的直接通信。Calico 是一个基于纯三层网络模型的网络和网络安全解决方案,使用容器网络接口(CNI)插件来为 Kubernetes 集群中的 Pod 提供网络连接。
二.部署K8s集群的控制节点
2.1准备工作
说明 :需要准备四台虚拟主机,版本均为Rock Linux 9。一台虚拟机用来充当docker仓库与k8s客户端,一台虚拟机用来充当k8s的control plane;剩余两台用来充当k8s的工作节点。
注意:
具体的主机名解析如下:
|---------------|------------------------|-------------------|
| IP地址 | 主机名解析 | 作用 |
| 192.168.7.161 | docker1 reg.westos.org | docker仓库、k8s集群客户端 |
| 192.168.7.163 | k8s1 | k8s集群的控制节点 |
| 192.168.7.164 | k8s2 | k8s集群的工作节点 |
| 192.168.7.165 | k8s3 | k8s集群的工作节点 |

2.2关闭交换分区
说明:k8s集群需要我们关闭交换分区,因为它会计算我们的节点内存,观察是否还存有多余资源。当开启交换分区后,k8s集群会误认为还存在多余内存,超出的物理内存会被放到磁盘IO上,降低节点性能。
临时关闭交换分区:
bash
swapoff -a

永久关闭交换分区:注释掉,挂载交换分区动作
bash
sed -i '/swap/s/^/#/' /etc/fstab

2.3添加yum软件源软件源
2.3.1添加epel9软件源
bash
yum install -y epel-release

2.3.2添加k8s集群源,版本为1.35
bash
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/rpm/
enabled=1
gpgcheck=0
EOF

2.3.3刷新软件源
bash
yum makecache

2.4开启网络转发
1.设置网络转发
bash
cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
参数介绍:
net.ipv4 .ip_forward = 1:开启IPv4转发,允许网络将数据包从一个接口转发到另一个接口
net.bridge.bridge-nf-call-iptables = 1:启用网桥,调用iptables对数据包过滤

2.使设置生效,刷新系统内核
bash
sysctl --system

出现问题
说明:初始化前没有打开网络转发

2.5修改系统限制
说明:容器和k8s会需要大量的文件句柄,需要提高资源限制
临时生效:
bash
ulimit -n 65535
作用:把当前 shell 会话中进程能打开的最大文件描述符数量(nofile)临时设置为 65535。

永久生效:将限制写入到系统文件中
bash
cat <<EOF >> /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
* soft memlock unlimited
* hard memlock unlimited
EOF
参数介绍:
soft nofile 65536: # nofile 表示每个进程可以打开的最大文件描述符数(即最大可打开的文件数)。soft 表示这是软限制,用户可以在不超过硬限制的情况下通过 ulimit命令调整此值。适用于需要大量文件句柄的应用,如大型数据库、Web 服务器等。
hard nofile 65535: # hard 表示这是硬限制,用户无法通过 ulimit 命令将其值调得超过此限制。适用于限制系统上所有进程的资源使用,以防止过度消耗系统资源。
soft nproc 65535: # nproc 表示每个用户可创建的最大进程数。soft 限制可以通过 ulimit 命令在运行时调整,但不能超过硬限制。适用于需要大量进程的应用或服务,如批处理作业、高并发应用等。
hard nproc 65535: # hard 限制是不能被用户通过 ulimit 命令调整的最大进程数限制。防止单个用户启动过多的进程,影响系统稳定性。
memlock 限制用于控制进程可**"锁定在物理内存中"** 的内存量(避免被交换到 swap分区)。K8s 集群中,以下场景需要解除该限制:
- 必须添加的场景:Etcd 节点或使用 Etcd 的组件
Etcd 是 K8s 的核心数据库,对性能和稳定性要求极高,其官方文档明确建议:
解除内存锁定限制,避免 Etcd 进程内存被 swap 到磁盘(swap 会导致 Etcd 响应延迟、数据一致性风险)。
若 Etcd 运行在独立节点或容器中,必须配置 memlock unlimited,否则可能出现频繁 GC、性能骤降甚至集群崩溃。
- 建议添加的场景:高性能容器或低延迟需求
若集群中运行以下类型的工作负载,建议解除 memlock 限制:
数据库(如 MySQL、PostgreSQL)、缓存服务(如 Redis)等对内存访问延迟敏感的应用。
机器学习、实时计算等需要高频访问大内存数据的容器。
依赖 DPDK、RDMA 等高性能网络技术的应用(这类技术通常要求内存锁定)

2.6升级系统内核(可选)
说明:k8s集群对内核由版本要求,当前的rocky linux 内核版本符合要求,但会存在警告。
1.下载新内核的软件包
bash
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-ml-5 .
19.9-1.el7 .elrepo.x86_64.rpm
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-ml-de
vel-5.19.9-1.el7.elrepo.x86_64.rpm


2.安装内核
bash
yum localinstall -y kernel-ml*

3.设置默认内核项
说明:系统本身存在一个内核,需要将新内核设置成默认项,防止系统重启后使用原先的内核版本
bash
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
作用:将新内核(第0项)设置成默认项,并重新生成引导文件

4.给默认内核追加 user_namespace.enable=1 和 net.ifnames=0 两个启动参数。
bash
grubby --args="user_namespace.enable=1 net.ifnames=0" \
--update-kernel="$(grubby --default-kernel)"
参数介绍:
user_namespace.enable=1:开启用户命名空间
net.ifnames=0:关闭网卡的可预测命名规则

5.重启系统,使新内核生效
bash
reboot
6.查看内核信息
bash
grubby --default-kernel

2.7安装IPVS依赖工具
说明 :为 kube-proxy 启用 IPVS 模式提供必要的支持,以提升集群在大规模 Service 场景下的负载均衡性能。
1.安装IPVS软件包
bash
yum install -y ipset ipvsadm
2.修改ipvs.conf配置文件
bash
cat <<EOF > /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
参数介绍:
ip_vs: 通过将客户端请求转发到多台后端服务器上来实现负载均衡。ip_vs 是负载均衡模块的核心部分。
ip_vs_lc: lc 是 IPVS 的一个负载均衡算法,即 Least Connection(最少连接数)。它将流量转发到当前连接数最少的后端服务器。
ip_vs_wlc: wlc 是 IPVS 的一种负载均衡算法,即 Weighted Least Connection(加权最少连接数)。它基于每个后端服务器的连接数和权重来决定流量的分配。
ip_vs_rr: rr 是 IPVS 的一种负载均衡算法,即 Round Robin(轮询)。该算法按照轮询的方式将请求分配给每个后端服务器。
ip_vs_wrr: wrr 是 IPVS 的一种负载均衡算法,即 Weighted Round Robin(加权轮询)。它在轮询的基础上增加了权重,允许按权重分配流量。
ip_vs_sh: sh 是 IPVS 的一种负载均衡算法,即 Source Hashing(源地址哈希)。该算法通过计算客户端的源地址的哈希值来决定请求的后端服务器。适用于需要根据客户端来源地址进行流量分配的场景。
nf_conntrack: nf_conntrack 是 Linux 的一个网络连接跟踪模块,用于跟踪所有活动的网络连接的状态(如 NAT、状态防火墙等)。在防火墙、路由器以及需要监控连接状态的网络环境中使用。

3.加载配置文件中的模块,并使之生效
bash
systemctl restart systemd-modules-load.service
lsmod | grep -e ip_vs -e nf_conntrack

2.9配置Containerd模块
作用 :为 Kubernetes 提供符合 CRI(容器运行时接口)标准的容器运行时环境,使其能正常创建和管理 Pod 。如果不进行配置,kubelet 将无法通过 Containerd 启动任何容器,集群也就无法工作
1.加载Containerd依赖模块
bash
cat <<EOF > /etc/modules-load.d/containerd.conf
overlay
br_netfilter
nf_conntrack
ip_tables
EOF


2.加载配置文件中定义的模块
bash
systemctl restart systemd-modules-load.service
lsmod | grep -e overlay -e br_netfilter -e nf_conntrack -e ip_tables #验证模块是否加载

2.8安装k8s软件工具
bash
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet #启动服务
工具介绍:
kubeadm :集群安装工具,负责初始化集群 和添加节点。
kubelet :节点代理,运行在每个节点上的"监工",负责管理本节点的容器。
kubectl:集群的客户端,用户直接管理集群的工具


2.9拉取集群所需的镜像文件
1.查看集群所需的镜像文件
bash
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.35.8

2.拉取所需的所有镜像文件
**说明:**这里提供两种方式:一种是直接一个个拉取;另一种是将所拉取的镜像放入一个文件当中,自动拉取文件中的所有镜像
注意:该操作要在Docker端完成
bash
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.35.8
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.35.8
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.35.8
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.35.8
docker pull registry.aliyuncs.com/google_containers/coredns:v1.14.2
docker pull registry.aliyuncs.com/google_containers/pause:3.10.2
docker pull registry.aliyuncs.com/google_containers/etcd:3.6.8-0

3.修改镜像名称
**说明:**将镜像名称,修改成私有仓库里的项目
注意:该操作要在Docker端完成
bash
docker images | grep registry.aliyuncs.com/google_containers/ | awk '{print $1":"$2}' |awk -F/ '{system("docker tag "$0" reg.westos.org/k8s/"$3"")}'

4.将镜像上传到私有仓库中
说明:使用离线仓库,安装k8s集群
注意:该操作要在Docker端完成
4.1进入harbor,创建 k8s项目

4.2将镜像文件上传到仓库中
bash
docker images | grep k8s | awk -F/ '{system("docker push "$1":"$2"")}'


2.10安装Containerd软件
1.安装containerd软件
bash
yum install -y containerd cri-tools

2.修改配置文件
2.1生成默认配置文件
说明:把 containerd 的默认配置输出并保存到 /etc/containerd/config.toml 文件里,从而生成一份可编辑的配置文件。
bash
containerd config default > /etc/containerd/config.toml
2.2开启Cgroup
bash
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
cat /etc/containerd/config.toml | grep SystemdCgroup

2.3修改容器的镜像仓库位置
bash
sed -i "s|sandbox = 'registry.k8s.io/pause:3.10.1'|sandbox = 'reg.westos.org/k8s/pause:3.10.1'|" /etc/containerd/config
cat /etc/containerd/config.toml | grep pause:

3.启动服务
bash
systemctl enable --now containerd

2.11配置仓库证书
说明:将docker仓库的证书拷贝到k8s1上
1.复制证书到本地仓库
bash
mkdir -p /etc/containerd/certs.d/reg.westos.org
scp reg.westos.org:/data/certs/westos.org.crt /etc/containerd/certs.d/reg.westos.org/ca.crt

2.配置证书位置
bash
vim /etc/containerd/config.toml
找出证书配置位置,填入你的证书位置:
bash
/etc/containerd/certs.d

3.重启Contained服务
bash
systemctl restart containerd

2.12配置Crictl连接Containerd
说明 :告诉 crictl 命令去哪里找容器运行时(containerd),以及怎么跟它通信
1.完成文件配置
bash
cat <<EOF > /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
EOF

2.测试
说明:拉取仓库中的pause镜像
bash
crictl pull reg.westos.org/k8s/pause:3.10.1
crictl images

2.13完成集群初始化
2.13.1完成k8s集群控制节点的初始化
说明:指定pod的网络段,镜像仓库项目,k8s集群版本
bash
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s --kubernetes-version v1.35.8

出现下面的情况说明初始化成功:

注意 :后面,我们需要这个命令来将工作结点加入到集群中,建议先记下命令,或者新开个终端
bash
kubeadm join 192.168.7.166:6443 --token o3lye9.2d46rsbutqkrpx8h \
--discovery-token-ca-cert-hash sha256:ff0f2fc4393599120ef08d4ff031d074a2f2c53d6fb7cebb0deea3f90625c106

2.13.2配置admin用户
说明:k8s集群中的任意一个节点,都必须要有一个用户(.config文件),否则无法访问k8s集群。
admin用户,默认会在k8s集群初始化后自动生成,并放在 /etc/kubernetes/admin.conf中。
临时添加环境变量:
bash
export KUBECONFIG=/etc/kubernetes/admin.conf

永久添加到环境变量中:
bash
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

查看集群节点状态:
bash
kubectl get node

2.13.3添加kubectl命令自动补齐功能
1.安装bash命令自动补全软件包
bash
yum install -y bash-completion

2.将kubectl 自动补全命令,加入到环境变量文件中
bash
echo "source /usr/share/bash-completion/bash_completion" >> ~/.bashrc
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc


3.测试
说明:输入kubectl,按两下 Tab 键,会自动补充kubectl的相关命令

2.14安装Calico网络插件
说明 :前面讲过,Calico核心功能是分配IP地址。如果没有Calico插件,各个node之间无法进行通信,同时node状态也会保持在NoReady状态。
2.14.1下载镜像文件
注意:该操作要在Docker端完成
1.下载镜像软件
bash
docker pull quay.io/calico/cni:v3.31.0
docker pull quay.io/calico/node:v3.31.0
docker pull quay.io/calico/kube-controllers:v3.31.0
2.修改镜像名称
bash
docker images |grep calico | awk '{print $1":"$2}' | awk -F/ '{system("docker tag "$0" reg.westos.org/calico/"$3"")}'

筛选出符合的镜像名称:我这里是修改后的结果

3.创建calico项目
说明:我这里的项目已经存在了,如果名字有冲突,记得换个名字

4.上传镜像
bash
docker images |grep 'reg.westos.org/calico'|awk '{system("docker push "$1":"$2"")}'

筛选结果如下:

2.14.2启动Calico网络插件
1.下载Calico网络清单
bash
mkdir yml && cd yml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.31.0/manifests/calico.yaml

说明:在calico.yaml文件中,可以看到所需的镜像文件,可以根据这个下载所需的镜像文件



2.修改镜像文件的地址
bash
vim calico.yaml
新地址如下:
bash
reg.westos.org/calico/cni:v3.31.0
reg.westos.org/calico/cni:v3.31.0
reg.westos.org/calico/node:v3.31.0



3.部署网络插件
bash
kubectl apply -f calico.yaml

2.15查看节点是否就绪
说明:出现Ready,说明状态就绪。
bash
kubectl get node

三.部署K8s集群工作节点
说明 :K8s工作节点和哦控制节点有很多相同之处,首先按照第二大章的内容,再K8S工作节点的虚拟机上完成 2.1~2.8节和2.10~2.12阶段的内容,完成K8s集群的相关配置。
3.1工作节点加入k8s集群
说明:这里输入的是你初始化后给出的命令
bash
kubeadm join 192.168.7.166:6443 --token o3lye9.2d46rsbutqkrpx8h \
--discovery-token-ca-cert-hash sha256:ff0f2fc4393599120ef08d4ff031d074a2f2c53d6fb7cebb0deea3f90625c106
注意:默认token过期时间是24h,如果token过期需要重新生成
补充:重新生成新的token,需要在控制节点生成token
bash
kubeadm token create --print-join-command

3.2为工作节点添加标签
bash
kubectl label nodes k8s2 node-role.kubernetes.io/worker=

四.部署K8S集群的客户端
4.1客户端安装k8s软件工具
bash
yum install -y kubectl kubelet
4.2添加admin.config用户
bash
scp /etc/kubernetes/admin.conf docker1:/etc/kubernetes/admin.conf
4.3开启服务
bash
systemctl enable --now kubelet