Kubernetes 简介及部署方法

news2024/9/25 3:20:08

目录

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-stores

Login 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 -m
               total        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.5

master test]# docker push reg.shuyan.com/flannel/flannel:v0.25.5


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

master 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.coloradmin.cn/o/2104993.html

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

相关文章

欧洲应用市场的特点

欧洲应用市场是一个充满活力和多样性的景观&#xff0c;其特点是复杂性和巨大的潜力。仅在27个欧盟&#xff08;EU&#xff09;国家就有5亿多人&#xff0c;该地区为希望扩大影响力的应用程序开发人员和企业提供了重要机会。然而&#xff0c;进入这个市场需要了解其独特的特征&…

幻觉问题综述

https://arxiv.org/pdf/2202.03629 分类 内在幻觉&#xff1a;生成的输出与源内容相矛盾 外部幻觉&#xff1a;生成的输出无法从源内容中验证 数据引发的幻觉&#xff08;来源不同引发分歧&#xff09; 训练和推理中的幻觉&#xff08;编码器不能很好的表征&#xff0c;解码…

【云原生-Docker】docker、docker-compose离线安装【包括dokcer、docker-compose资源下载】

资源资源下载在线下载百度网盘下载csdn下载 解压上传文件 配置系统配置配置 docker-compose安装验证 资源 资源下载 在线下载 下载地址&#xff1a;https://download.docker.com/linux/static/stable/x86_64/根据不同系统版本下载不同的docker版本在线下载&#xff1a;wget …

网络编程 0904作业

作业 1、多进程多线程并发服务器&#xff0c;再实现一遍&#xff08;重点模型&#xff09; 多进程并发服务器 多进程服务器 PIDserver.c 代码 #include <myhead.h> #define SERPORT 7777 #define SERIP "192.168.19.128" #define BACKLOG 10void hande(int…

【数据结构与算法 | 搜索二叉树篇 力扣篇】力扣530, 501

1. 力扣530&#xff1a;二叉搜索树的最小绝对差 1.1 题目&#xff1a; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,…

【人工智能】Transformers之Pipeline(十五):总结(summarization)

​​​​​​​ 目录 一、引言 二、总结&#xff08;summarization&#xff09; 2.1 概述 2.2 BERT与GPT的结合—BART 2.3 应用场景​​​​​​​ 2.4 pipeline参数 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 ​​​​​​​ 2.4.3 pipeline返回参…

【MATLAB源码-第260期】基于simulink的OFDM+QPSK系统仿真,采用RS编码经过瑞利信道包含信道估计输出各节点波形图以及星座图。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 OFDM-QPSK系统是一种广泛应用于现代无线通信中的数字信号处理系统&#xff0c;结合了正交频分复用&#xff08;Orthogonal Frequency Division Multiplexing, OFDM&#xff09;和四相移相键控&#xff08;Quadrature Phase S…

Java字节码文件、组成、详解、分析;jclasslib插件、阿里arthas工具;Java注解

文章目录 一、字节码文件1.1 以正确的方式打开文件1.2 字节码文件的组成1.2.1 基础信息1.2.2 常量池1.2.3 方法 1.3 字节码常用工具1.4 总结 二、Java注解2.1 什么是Java注解2.2 注释和注解Annotation的区别&#xff08;掌握&#xff09;2.3 如何使用注解&#xff08;掌握&…

C语言典型例题61

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目&#xff1a; 习题4.2 一个单位下设三个班组&#xff0c;每个班组人员不固定&#xff0c;需要统计每个班组的平均工资。分别输入3个班组所有职工的工资&#xff0c;当输入-1时&#xff0c;表示输入结束。输出…

常见排序方法详解(图示+方法)

一、插入排序 1.1基本思想 把待排序的记录 按其关键码值的大小逐个插入到一个已经排好序的有序序列中 &#xff0c;直到所有的记录插入完为止&#xff0c;得到 一个新的有序序列。 1.2直接插入排序 当插入第 i(i>1) 个元素时&#xff0c;前面的 array[0],array[1],…,array…

大文件上传vue插件vue-simple-uploader

https://www.cnblogs.com/xiahj/p/vue-simple-uploader.html

springboot-es(elasticsearch)搜索项目

目标界面 html页面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>途牛旅游</title><link rel"stylesheet" href"https://a.amap.com/jsapi_demos/static/demo-center/css/d…

windows安装php7.4

windows安装php7.4 1.通过官网下载所需的php版本 首先从PHP官网&#xff08;https://www.php.net/downloads.php&#xff09;或者Windows下的PHP官网&#xff08;http://windows.php.net/download/&#xff09;下载Windows版本的PHP安装包。下载后解压到一个路径下。 2.配…

2024/9/4 Canlink配置介绍与常见故障排查

双击一个站进去配置&#xff0c;如果双击PLC则是PLC往外面发数据&#xff0c;双击伺服&#xff0c;则是伺服往外发数据。 例如我想读伺服的功能吗&#xff1f; 点击伺服的配置 将0b00的地址数据发给PLC&#xff08;D100&#xff09; ,寄存器长度是一个 然后下载程序即可

使用docker安装jenkins,然后使用jenkins本地发版和远程发版

使用docker安装jenkins&#xff0c;然后使用jenkins本地发版和远程发版 1、安装docker 1.安装必要的一些系统工具 sudo yum install docker-ce 2.添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3.更新…

电子行业最全【芯片标签二维码】知识剖析

电子行业最全【芯片标签二维码】知识剖析 本文为辰逸绅士小编原创&#xff0c;未经许可请勿私下复制转载 长 文 预 警 目录 ★01--------前言 ★02--------关于电子元器件协会ECIA ★03--------关于矩阵二维码 3.1--------矩阵二维码 构成 3.2--------矩阵二维码 种类 3.…

【数学分析笔记】第3章第1节 函数极限(3)

3. 函数极限与连续函数 3.1 函数极限 3.1.1 函数极限的性质 【局部有界性】若 lim ⁡ x → x 0 f ( x ) A \lim\limits_{x\to x_{0}}f(x)A x→x0​lim​f(x)A&#xff0c;则 ∃ δ > 0 , ∀ x ( 0 < ∣ x − x 0 ∣ < δ ) : m ≤ f ( x ) ≤ M \exists \delta>…

BUUCTF Crypto wp--RSA1

第一步 查看下载文件 我们发现出现了dp dq&#xff0c;属于dp、dq泄露攻击 上述方程本来是用于在加密中进行快速解密的&#xff0c;但是如果二者发生泄露&#xff0c;就有可能进行对密文的解密。 当我们知道了 dp、 dq、p、q、c,在不知道e的情况下&#xff0c;也可以求解明文。…

社交达人秘籍:巧妙维护你的人脉关系!

在这个人脉为王的时代&#xff0c;微信不仅连接了亲朋好友&#xff0c;更成为了拓展职业网络、深化人际关系的重要平台。如何巧妙地在微信上维护并优化你的人脉关系&#xff0c;成为了每位社交达人必修的功课。今天&#xff0c;就让我们一起探索那些让社交关系更加稳固与活跃的…

【DSP】无法在线仿真无法进入main()函数

DSP无法在线仿真无法进入main()函数 1.问题描述 ​ 接手前人的DSP代码&#xff0c;硬件平台是DSP C6701&#xff0c;软件IDE是CCS 12.3.0。仿真器版本是XDS 560V2。 ​ 在进行在线仿真时&#xff0c;经常出现“伪在线”的情况。简单来说&#xff0c;正常的在线过程&#xff…