Kubernetes 简介及部署方法

目录

1 Kubernetes 简介及原理

1.1 应用部署方式演变

1.2 容器编排应用

1.3 kubernetes 简介

1.4 K8S的设计架构

1.5 K8S 各组件之间的调用关系

1.6 K8S 的 常用名词感念

1.7 k8S的分层架构

2 K8S 集群环境搭建

2.1 k8s 中容器的管理方式

2.2 k8s中使用的几种管理容器的介绍

3 kubernetes 的环境部署

3.1 实验环境准备

3.1.1 所有机子配置dns解析 

3.1.2 部署docker

3.1.3 k8s 所有机子都需执行,指定仓库地址 

3.1.4 k8s 所有机子都需执行,存放仓库证书文件

3.1.5 查看仓库是否指定成功 

3.1.6 登录harbor仓库

3.2 关闭交换分区--k8s集群都得执行

3.3 安装kubernetes相关工具

3.4 在所有节点上安装插件cri-docker

3.4.1 支持 docker 插件cri-docker介绍

3.4.2 修改插件服务启动参数

3.5 在master节点拉取K8S集群所需镜像

3.5.1 查看k8s初始化默认配置参数是否正确

3.5.2 使用国内源下载

3.5.3 查看是否拉取成功 

3.5.4 在harbor中新建项目

3.5.5 批量打标签并上传

3.6 初始化k8s集群

3.6.1 指定仓库地址 版本号 使用与docker通讯的插件

3.6.2 成功标志

3.6.3 指定配置文件 

3.6.4 查看节点状态

3.7 安装flannel网络插件

3.7.1 Flannel 介绍

3.7.2 使用魔法将镜像下载到本地

3.7.3 上传所需镜像到本地仓库

3.7.4 修改yml配置文件

3.7.5 运行并查看状态 

4 节点扩容

4.1 节点扩容的要求

4.2 MASTER 节点上获取token

4.3 复制到从节点指定套接字运行 


1 Kubernetes 简介及原理

1.1 应用部署方式演变

在部署应用程序的方式上,主要经历了三个阶段:

传统部署:互联网早期,会直接将应用程序部署在物理机上

  • 优点:简单,不需要其它技术的参与

  • 缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响

虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境

  • 优点:程序环境不会相互产生影响,提供了一定程度的安全性

  • 缺点:增加了操作系统,浪费了部分资源

容器化部署:与虚拟化类似,但是共享了操作系统

容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:

  • 一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器

  • 当并发访问量变大的时候,怎么样做到横向扩展容器数量

1.2 容器编排应用

为了解决这些容器编排问题,就产生了一些容器编排的软件:

  • Swarm:Docker自己的容器编排工具

  • Mesos:Apache的一个资源统一管控的工具,需要和Marathon结合使用

  • Kubernetes:Google开源的的容器编排工具

1.3 kubernetes 简介

  • 在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年

  • Borg系统运行管理着成千上万的容器应用。

  • Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。

  • Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器

  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整

  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务

  • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡

  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本

  • 存储编排:可以根据容器自身的需求自动创建存储卷

1.4 K8S的设计架构

一个kubernetes集群主要是由控制节点(master)工作节点(node)构成,每个节点上都会安装不同的组件

1 master:集群的控制平面,负责集群的决策

  • ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制

  • Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上

  • ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等

  • Etcd :负责存储集群中各种资源对象的信息

2 node:集群的数据平面,负责为容器提供运行环境

  • kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理

  • Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)

  • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡

1.5 K8S 各组件之间的调用关系

当我们要运行一个web服务时

  1. kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中

  2. web服务的安装请求会首先被发送到master节点的apiServer组件

  3. apiServer组件会调用scheduler组件决定到底应该把这个服务安装到哪个node节点上在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer。负责将未调度的 Pod 分配到集群中的合适节点上。

  4. apiServer调用controller-manager去调度Node节点安装web服务

  5. kubelet接收到指令后,会通知docker,然后由docker来启动一个web服务的pod

  6. 如果需要访问web服务,就需要通过kube-proxy来对pod产生访问的代理

1.6 K8S 的 常用名词感念

  • Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控

  • Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的

  • Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

  • Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

  • Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod

  • Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签

  • NameSpace:命名空间,用来隔离pod的运行环境

1.7 k8S的分层架构

  • 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

  • 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

  • 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

  • 接口层:kubectl命令行工具、客户端SDK以及集群联邦

  • 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

  • Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等

  • Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

2 K8S 集群环境搭建

2.1 k8s 中容器的管理方式

CRI 实际上是 Container Runtime Interface 的缩写。CRI 是 Kubernetes 项目定义的一个标准接口,用于与不同的容器运行时(Container Runtimes)进行交互。通过 CRI,Kubernetes 可以与各种容器运行时进行通信,从而管理容器的生命周期。

CRI 的作用

CRI 的主要作用是定义了一个通用的接口,使得 Kubernetes 可以与不同的容器运行时进行通信。

具体来说,CRI 包括以下功能:

容器管理

  • 创建、启动、停止和删除容器。
  • 管理容器的生命周期。

镜像管理

  • 拉取、推送和管理容器镜像。

网络管理

  • 配置容器网络接口(NIC)。

资源管理

  • 分配和管理容器的资源(CPU、内存等)。

2.2 k8s中使用的几种管理容器的介绍

Kubernetes 集群创建方式主要涉及不同的容器运行时(Container Runtime)及其与 Kubernetes 的集成方式。以下是三种主要的创建方式及其特点

centainerd

containerd 是 Kubernetes 默认推荐和支持的容器运行时。containerd 是一个高性能、轻量级的容器运行时,专注于容器的生命周期管理。它被设计为与 Kubernetes 高度集成,并且提供了与 Kubernetes CRI 接口的实现。

docker

虽然 Kubernetes 在 1.24 版本之后正式移除了对 Docker 作为容器运行时的直接支持,但仍然可以通过 cri-dockerd(即 cri-docker)来实现与 Docker 的集成。cri-dockerd 是一个实现了Kubernetes CRI 接口的 Docker 引擎替代品。

cri-o

CRI-O 是另一种实现 Kubernetes CRI 接口的容器运行时。它旨在提供更轻量级的容器运行时,并且直接与 Kubernetes 集成,无需额外的中间层。

kubernetes 中文官网:

Kubernetesicon-default.png?t=N7T8https://kubernetes.io/zh-cn/

3 kubernetes 的环境部署

3.1 实验环境准备

主机名ip角色
reg.shuyan.com192.168.239.20harbor仓库
k8s-master172.25.254.100master,k8s集群控制节点
k8s-node1172.25.254.110worker,k8s集群工作节点
k8s-node2172.25.254.120worker,k8s集群工作节点

3.1.1 所有机子配置dns解析 

[root@complete certs]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.239.20  complete reg.shuyan.com
192.168.239.110 k8s-node1
192.168.239.120 k8s-node2
192.168.239.100 k8s-master

3.1.2 部署docker

(已经配置过网络源了不做介绍了)

[root@k8s-master ~]# dnf install docker-ce
[root@k8s-node1 ~]# dnf install docker-ce
[root@k8s-node2 ~]# dnf install docker-ce[root@k8s-master ~]# systemctl enable --now docker 
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.[root@k8s-master ~]# systemctl restart docker.service

3.1.3 k8s 所有机子都需执行,指定仓库地址 

[root@k8s-master ~]#  vim /etc/docker/daemon.json{        # 第一行写的是harbor仓库的地址"registry-mirrors": ["https://reg.shuyan.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}[root@k8s-master ~]# systemctl restart docker.service

3.1.4 k8s 所有机子都需执行,存放仓库证书文件

[root@k8s-master ~]# mkdir -p /etc/docker/certs.d/reg.shuyan.com/
[root@k8s-master ~]# systemctl enable --now docker 
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.

仓库端将证书存到k8s 集群 

[root@complete certs]# pwd 
/data/certs
[root@complete data]# ls
ca_download  certs  database  job_logs  redis  registry  secret[root@complete certs]# scp shuyan.crt root@192.168.239.100:/etc/docker/certs.d/reg.shuyan.com/
root@192.168.239.100's password: 
shuyan.crt                                                    100% 2175     3.1MB/s   00:00 [root@complete certs]# scp shuyan.crt root@192.168.239.110:/etc/docker/certs.d/reg.shuyan.com/
root@192.168.239.110's password: 
shuyan.crt                                                    100% 2175     1.7MB/s   00:00 [root@complete certs]# scp shuyan.crt root@192.168.239.120:/etc/docker/certs.d/reg.shuyan.com/
root@192.168.239.120's password: 
shuyan.crt                                                    100% 2175     2.6MB/s   00:00   

3.1.5 查看仓库是否指定成功 

[root@k8s-master ~]# systemctl restart docker.service
[root@k8s-node1 ~]# systemctl restart docker.service
[root@k8s-node2 ~]# systemctl restart docker.service
[root@k8s-master ~]# docker info

3.1.6 登录harbor仓库

除仓库的机子其余的所有机子都得登录

[root@k8s-master ~]# docker login reg.shuyan.com
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-storesLogin Succeeded

3.2 关闭交换分区--k8s集群都得执行

[root@k8s-master ~]# systemctl list-unit-files | grep swap
dev-mapper-rl\x2dswap.swap                 generated       -
swap.target                                static          -
[root@k8s-master ~]# systemctl mask swap.target 
Created symlink /etc/systemd/system/swap.target → /dev/null.
[root@k8s-master ~]# systemctl list-unit-files | grep swap
dev-mapper-rl\x2dswap.swap                 generated       -
swap.target                                masked          disabled
[root@k8s-master ~]# swapoff -a 
[root@k8s-master ~]# vim /etc/fstab/dev/mapper/rl-root     /                       xfs     defaults        0 0
UUID=a4ed9067-12b1-4a7e-af8e-a5430ba2edfb /boot                   xfs     defaults        0 0
UUID=1EB7-071A          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
#/dev/mapper/rl-swap     none                    swap    defaults        0 0 

查看交换分区是否占用 

[root@k8s-master ~]# free -mtotal        used        free      shared  buff/cache   available
Mem:            1742         836         377          12         690         906
Swap:              0           0           0

3.3 安装kubernetes相关工具

(k8s集群所有机子都得执行)除仓库以外

[root@k8s-master ~]# vim /etc/yum.repos.d/k8s.repo[k8s]
name=k8s-aliyun
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
gpgcheck=0[root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y

设置kubectl命令补齐功能 

[root@k8s-master ~]# dnf install bash-completion -y
[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8s-master ~]# source  ~/.bashrc

3.4 在所有节点上安装插件cri-docker

下载地址

https://github.com/Mirantis/cri-dockerdicon-default.png?t=N7T8https://github.com/Mirantis/cri-dockerd

3.4.1 支持 docker 插件cri-docker介绍

k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker

cri-dockerd 是 Docker 引擎的一个版本,它实现了 Kubernetes 的容器运行时接口(CRI)。CRI 是 Kubernetes 用来与容器运行时(如 Docker, containerd, etc.)通信的一套接口规范。

cri-dockerd允许 Kubernetes 直接管理 Docker 容器,而不需要使用额外的适配层。cri-dockerd 被设计为与 Kubernetes 集群兼容,并且可以作为集群中的容器运行时来使用。

-node1 ~]# yum localinstall cri-dockerd-0.3.14-3.el8.x86_64.rpm \
libcgroup-0.41-19.el8.x86_64.rpm

3.4.2 修改插件服务启动参数

由于k8s是由容器的方式运行的,所以需要找到根容器在哪里 

[root@k8s-master ~]# vim /lib/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket[Service]
Type=notify
# 仅修改这一行
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.shuyan.com/k8s/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

3.5 在master节点拉取K8S集群所需镜像

思路:将k8s集群所需镜像都拉下来,上传到镜像仓库到时候方便构建主节点和从节点

3.5.1 查看k8s初始化默认配置参数是否正确

[root@k8s-master ~]# kubeadm config print init-defaults

3.5.2 使用国内源下载

/var/run/cri-dockerd.sock 是 cri-dockerd(或 cri-docker)服务使用的 Unix 域套接字(Unix domain socket),用于与 Kubernetes 控制面进行通信。这个套接字允许 Kubernetes 通过 Container Runtime Interface (CRI) 与 Docker 引擎进行交互,从而管理和调度容器。

由于网络原因需要使用阿里云的进行下载

master ~]# kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock

3.5.3 查看是否拉取成功 

[root@k8s-master ~]# docker images 
REPOSITORY                                                        TAG        IMAGE ID       CREATED         SIZE
registry.aliyuncs.com/google_containers/kube-apiserver            v1.30.0    c42f13656d0b   4 months ago    117MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.30.0    c7aad43836fa   4 months ago    111MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.30.0    259c8277fcbb   4 months ago    62MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.30.0    a0bf559e280c   4 months ago    84.7MB
registry.aliyuncs.com/google_containers/etcd                      3.5.12-0   3861cfcd7c04   7 months ago    149MB
registry.aliyuncs.com/google_containers/coredns                   v1.11.1    cbb01a7bd410   12 months ago   59.8MB
registry.aliyuncs.com/google_containers/pause                     3.9        e6f181688397   22 months ago   744kB

3.5.4 在harbor中新建项目

3.5.5 批量打标签并上传

批量打标签

[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \
| awk 'BEGIN{FS="/"}{system("docker tag "$0" reg.shuyan.com/k8s/"$3)}'[root@k8s-master ~]# docker images | awk '/k8s/'
reg.shuyan.com/k8s/kube-apiserver                                 v1.30.0    c42f13656d0b   4 months ago    117MB
reg.shuyan.com/k8s/kube-controller-manager                        v1.30.0    c7aad43836fa   4 months ago    111MB
reg.shuyan.com/k8s/kube-scheduler                                 v1.30.0    259c8277fcbb   4 months ago    62MB
reg.shuyan.com/k8s/kube-proxy                                     v1.30.0    a0bf559e280c   4 months ago    84.7MB
reg.shuyan.com/k8s/etcd                                           3.5.12-0   3861cfcd7c04   7 months ago    149MB
reg.shuyan.com/k8s/coredns                                        v1.11.1    cbb01a7bd410   12 months ago   59.8MB
reg.shuyan.com/k8s/pause                                          3.9        e6f181688397   22 months ago   744kB

批量上传镜像 

[root@k8s-master ~]# docker images | awk '/k8s/{system("docker push "$1":"$2)}'

3.6 初始化k8s集群

3.6.1 指定仓库地址 版本号 使用与docker通讯的插件

[root@k8s-master ~]# systemctl enable --now kubelet.service 
Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /usr/lib/systemd/system/kubelet.service.[root@k8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \
--image-repository reg.shuyan.com/k8s \  # 指定自己仓库地址
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock

3.6.2 成功标志

底下出现这一串证明成功了

不过还需要处理一些事情,就是得指定配置文件的路径

3.6.3 指定配置文件 

master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile[root@k8s-master ~]# source ~/.bash_profile

3.6.4 查看节点状态

# 状态为NotReady当前节点没有就绪,因为还没有安装网络插件,容器没有运行[root@k8s-master ~]# kubectl get node
NAME         STATUS     ROLES           AGE    VERSION
k8s-master   NotReady   control-plane   6m2s   v1.30.0[root@k8s-master ~]# kubectl get pod -A
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-66d4c695bb-29qbq             0/1     Pending   0          6m11s
kube-system   coredns-66d4c695bb-6th24             0/1     Pending   0          6m11s
kube-system   etcd-k8s-master                      1/1     Running   0          6m26s
kube-system   kube-apiserver-k8s-master            1/1     Running   0          6m26s
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          6m26s
kube-system   kube-proxy-4fllj                     1/1     Running   0          6m12s
kube-system   kube-scheduler-k8s-master            1/1     Running   0          6m26s

3.7 安装flannel网络插件

官方网址

GitHub - flannel-io/flannel: flannel is a network fabric for containers, designed for Kubernetesflannel is a network fabric for containers, designed for Kubernetes - flannel-io/flannelicon-default.png?t=N7T8https://github.com/flannel-io/flannel

3.7.1 Flannel 介绍

Flannel 是一个为容器集群设计的虚拟网络层,它主要解决的是如何让运行在不同主机上的容器能够相互通信的问题。Flannel 可以创建一个覆盖网络(Overlay Network),使得每个节点上的容器都能通过 IP 地址直接通信,即使它们不在同一个物理网络上。

3.7.2 使用魔法将镜像下载到本地

#下载flannel的yaml部署文件
master test]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml# 拉取所需镜像
master test]# docker pull docker.io/flannel/flannel:v0.25.5
master test]# docker pull docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1

3.7.3 上传所需镜像到本地仓库

master test]# docker tag flannel/flannel:v0.25.5 \
reg.shuyan.com/flannel/flannel:v0.25.5master test]# docker push reg.shuyan.com/flannel/flannel:v0.25.5master test]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 \
reg.shuyan.com/flannel/flannel-cni-plugin:v1.5.1-flannel1master test]# docker push reg.shuyan.com/flannel/flannel-cni-plugin:v1.5.1-flannel1

 

3.7.4 修改yml配置文件

需要修改成如下几行 

[root@k8s-master test]# grep -n image kube-flannel.yml 
146:        image: reg.shuyan.com/flannel/flannel:v0.25.5
173:        image: reg.shuyan.com/flannel/flannel-cni-plugin:v1.5.1-flannel1
184:        image: reg.shuyan.com/flannel/flannel:v0.25.5

3.7.5 运行并查看状态 

[root@k8s-master test]# kubectl apply -f /root/test/kube-flannel.yml
namespace/kube-flannel created
serviceaccount/flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created[root@k8s-master test]# kubectl get nodes 
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   23m   v1.30.0[root@k8s-master test]# kubectl get pod -A
NAMESPACE      NAME                                 READY   STATUS    RESTARTS   AGE
kube-flannel   kube-flannel-ds-fpcns                1/1     Running   0          79s
kube-system    coredns-66d4c695bb-29qbq             1/1     Running   0          24m
kube-system    coredns-66d4c695bb-6th24             1/1     Running   0          24m
kube-system    etcd-k8s-master                      1/1     Running   0          24m
kube-system    kube-apiserver-k8s-master            1/1     Running   0          24m
kube-system    kube-controller-manager-k8s-master   1/1     Running   0          24m
kube-system    kube-proxy-4fllj                     1/1     Running   0          24m
kube-system    kube-scheduler-k8s-master            1/1     Running   0          24m# kube-flannel 命名空间:
# Pod: kube-flannel-ds-fpcns
# 这个 Pod 是 Flannel 网络插件的一部分,
# 用于为集群中的 Pod 提供网络连接。状态为 Running,
# 并且没有重启记录,表明网络插件运行正常。

4 节点扩容

4.1 节点扩容的要求

在所有的worker节点中

确认部署好以下内容

1 禁用swap

2 安装:

  • kubelet-1.30.0

  • kubeadm-1.30.0

  • kubectl-1.30.0

  • docker-ce

  • cri-dockerd

3 修改cri-dockerd启动文件systemd添加

  • --network-plugin=cni

  • --pod-infra-container-image=reg.timinglee.org/k8s/pause:3.9

4 启动服务

  • kubelet.service

  • cri-docker.service

以上信息确认完毕后即可加入集群

4.2 MASTER 节点上获取token

# 重新生成集群token,并复制集群的token到从节点执行
[root@k8s-master test]# kubeadm token create --print-join-command
kubeadm join 192.168.239.100:6443 --token 52llq9.31a5w9pr4set4yet --discovery-token-ca-cert-hash sha256:2a5aeaece9ad08daed2744ac6fc5b652172fd597e45022b81820085fb3c8b18a

4.3 复制到从节点指定套接字运行 

[root@k8s-node1 ~]# kubeadm join 192.168.239.100:6443 \
--token 52llq9.31a5w9pr4set4yet \
--discovery-token-ca-cert-hash sha256:2a5aeaece9ad08daed2744ac6fc5b652172fd597e45022b81820085fb3c8b18a  \
--cri-socket=unix:///var/run/cri-dockerd.sock[root@k8s-node2 ~]# kubeadm join 192.168.239.100:6443 \
--token 52llq9.31a5w9pr4set4yet \
--discovery-token-ca-cert-hash sha256:2a5aeaece9ad08daed2744ac6fc5b652172fd597e45022b81820085fb3c8b18a  \
--cri-socket=unix:///var/run/cri-dockerd.sock

成功!

[root@k8s-master ~]# kubectl -n kube-flannel get pods -o wide 
NAME                    READY   STATUS    RESTARTS      AGE     IP                NODE         NOMINATED NODE   READINESS GATES
kube-flannel-ds-fpcns   1/1     Running   1 (26m ago)   7h14m   192.168.239.100   k8s-master   <none>           <none>
kube-flannel-ds-mnt72   1/1     Running   0             7h2m    192.168.239.110   k8s-node1    <none>           <none>
kube-flannel-ds-xfhw7   1/1     Running   0             7h2m    192.168.239.120   k8s-node2    <none>           <none>[root@k8s-master ~]# kubectl -n kube-flannel get pods
NAME                    READY   STATUS    RESTARTS      AGE
kube-flannel-ds-fpcns   1/1     Running   1 (27m ago)   7h15m
kube-flannel-ds-mnt72   1/1     Running   0             7h3m
kube-flannel-ds-xfhw7   1/1     Running   0             7h3m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1523756.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript 中,File、Blob、Base64 和 ArrayBuffer 不同的用途和转换方法。

JavaScript 中&#xff0c;File、Blob、Base64 和 ArrayBuffer 不同的用途和转换方法。 图示&#xff1a; 文章目录 Blob:File:Base64:Buffer:ArrayBuffer:常用转换函数base64ToFiledataURLtoBlobbinaryToDataURL导出 csv导出文件常用 office 文件对应的 MIME TYPE 和后缀 Bl…

万维网服务器工作

万维网服务器&#xff08;WWW服务器&#xff09;的工作方式主要基于客户机/服务器&#xff08;Client/Server&#xff09;模式&#xff0c;通过HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;等协议与客户端&#xff08;如网页浏览器&…

U盘不小心格式化了怎么恢复?别慌!教你快速恢复

在日常工作和生活中&#xff0c;U盘已成为我们存储和传输数据的重要工具。然而&#xff0c;有时由于误操作或其他原因&#xff0c;我们可能会不小心格式化U盘&#xff0c;导致重要数据的丢失。这时&#xff0c;如何恢复这些数据就显得尤为重要。下面&#xff0c;我们将介绍几种…

黑神话悟空·幽魂怎么打?超爽攻略!

在正式打法之前&#xff0c;这里推荐一款巨好用的开放式耳机&#xff0c;能够让我们的游戏更加的畅快&#xff01; 有条件的也建议使用南卡OE MIX这款开放式耳机&#xff0c;也非常适合在游戏时使用&#xff0c;不入耳的设计避免了长时间游戏佩戴可能带来的耳道不适和耳朵胀痛…

二进制方式安装K8S

⼀、安装说明 本⽂章将演示Rocky 8 ⼆进制⽅式安装⾼可⽤k8s 1.28.0版本。 ⽣产环境中&#xff0c;建议使⽤⼩版本⼤于5的Kubernetes版本&#xff0c;⽐如1.19.5 以后的才可⽤于⽣产环境。 ⼆、集群安装 2.1 基本环境配置 请统⼀替换这些⽹段&#xff0c;Pod⽹段和service和…

Azure AI Search 中的二进制量化:优化存储和加快搜索速度

随着组织继续利用生成式 AI 的强大功能来构建检索增强生成 (RAG) 应用程序和代理&#xff0c;对高效、高性能和可扩展解决方案的需求从未如此强烈。 今天&#xff0c;我们很高兴推出二进制量化&#xff0c;这项新功能可将向量大小减少高达 96%&#xff0c;同时将搜索延迟减少高…

Echarts 绘制地图省、市、区、县(以及点击显示下级,支持坐标定位)

** Echarts 绘制地图省、市、区、县&#xff08;以及点击显示下级&#xff0c;支持坐标定位&#xff09; ** 上代码 <template><div class"mapCont"><div id"mapSelf" contextmenu.prevent"disableContextMenu"></div&g…

Git学习尚硅谷(002 git常用命令)

尚硅谷Git入门到精通全套教程&#xff08;涵盖GitHub\Gitee码云\GitLab&#xff09; 总时长 4:52:00 共45P 此文章包含第8p-第p15的内容 文章目录 git常用命令设置用户签名初始化本地库查看本地库状态添加暂存区提交本地库日志查看修改文件版本穿梭 git常用命令 设置用户签名…

数据结构:(LeetCode 965)相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&…

开发手札:关于项目管理中开发工作安排的问题

最近工作越来越偏向管理方向了&#xff08;兼吗喽&#xff09;&#xff0c;所以仔细思考了一下给开发工作安排的问题。 结合自己开发过程中的体会&#xff0c;我觉得在构建完成用户需求文档的同时。 再站在开发的角度&#xff0c;构建一份详细的模块构架设计图就更…

STM32 HAL CAN (TJA1050CAN模块) 通讯(一)理论

1、简介 CAN具备多个设备交互的能力,但是网上大多是两个单片机进行交互,或者单片机通过CAN收发器与上位机进行交互测试,本次通过STM32cubeMX完成CAN通讯配置,并通过多个单片机进行数据交互测试。 2、CAN简介 CAN是一种串行通讯协议,主要有低速、高速CAN两种。 低速CAN…

亚马逊测评深度解析:如何安全高效提升产品销量和好评

在亚马逊这一全球电商巨擘的舞台上&#xff0c;产品测评不仅是消费者决策的重要依据&#xff0c;更是商家提升产品曝光、促进销售转化的核心驱动力。然而&#xff0c;随着平台监管力度的加强和市场竞争的日益激烈&#xff0c;如何在遵守规则的前提下&#xff0c;安全有效地进行…

相亲交友小程序开发功能分析

相亲交友小程序的开发功能分析可以从用户端和管理后台两个主要方面来进行。 用户端功能 注册与登录&#xff1a; 用户可以通过手机号、微信号或其他第三方平台进行注册登录&#xff0c;简化注册流程。 实名认证&#xff1a; 引入实名认证机制&#xff0c;确保用户信息的真实…

上传本地项目到git上面

文章目录 1.服务器创建一个空项目1.1.创建项目1.2.界面可能不一样 2.上传新项目到git上面2.1.将远程项目拉取到本地进行上传1. 将项目克隆到本地&#xff1a;&#xff08;为了建立本地仓库和远程仓库关系方便推送&#xff09;2. 建立本地仓库和远程仓库关系并推送&#xff08;如…

基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 卷积神经网络&#xff08;CNN&#xff09; 4.2 长短期记忆网络&#xff08;LSTM&#xff09; 4.3 BO-CNN-LSTM 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) B…

解锁MySQL数据库基础命令:从入门到精通的实战指南

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

亿发进销存一体化解决方案:多终端无缝协同,赋能企业全业务-上

亿发软件凭借对产品、市场、业务的深入理解&#xff0c;在进销存基础上进行了延伸&#xff0c;推出多终端、一体化的“进销存管理系统”多元产品矩阵。在技术上实现电脑端、手机端、PDA端、零售端、商家版以及小程序商城的多终端无缝对接。各个端口间的数据可以互通互联&#x…

未来十年美业发展方向:健康与美容的结合|美业SaaS系统收银系统源码

随着人们对健康和美容的重视不断增加&#xff0c;美业正在经历一场革命性的变革。未来&#xff0c;美业的发展将更加注重健康与美容的结合&#xff0c;这一趋势将在多个领域产生深远影响。 下面博弈美业为大家阐释「为什么未来美业的发展方向是健康和美容的结合」&#xff1a;…

STM32(F103ZET6)第十九课:FreeRtos的移植和使用

目录 需求一、FreeRtos简介二、移植FreeRtos1.复制代码2.内存空间分配和内核相关接口3.FreeRtosConfig4.添加到工程中三、任务块操作1.任务四种状态2.创建任务过程 需求 1.将FreeRtos&#xff08;嵌入式实时操作系统&#xff09;移植到STM32中。 2.在该系统中实现任务的创建、…

Elasticsearch集群工作原理

简介 ELasticsearch作为一个分布式搜索引擎&#xff0c;能够出色地支持集群模式、动态水平扩容、故障转移等分布式系统特性&#xff0c;这是其作为全文搜索引擎首选的重要原因。 本文从零开始描述集群的配置和扩容过程&#xff0c;让你对Elasticsearch集群的工作原理有初步的…