首页 > 其他分享 >Kubernetes 简介及部署方法

Kubernetes 简介及部署方法

时间:2024-09-07 13:24:02浏览次数:9  
标签:kube Kubernetes 部署 简介 master docker k8s root flannel

目录

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 [email protected]:/etc/docker/certs.d/reg.shuyan.com/
[email protected]'s password: 
shuyan.crt                                                    100% 2175     3.1MB/s   00:00 
   
[root@complete certs]# scp shuyan.crt [email protected]:/etc/docker/certs.d/reg.shuyan.com/
[email protected]'s password: 
shuyan.crt                                                    100% 2175     1.7MB/s   00:00 
   
[root@complete certs]# scp shuyan.crt [email protected]:/etc/docker/certs.d/reg.shuyan.com/
[email protected]'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

标签:kube,Kubernetes,部署,简介,master,docker,k8s,root,flannel
From: https://blog.csdn.net/weixin_68398469/article/details/141830897

相关文章

  • kubernetes 中 利用yaml文件部署应用
    目录1用yaml文件部署应用有以下优点1.1声明式配置:1.2灵活性和可扩展性:1.3与工具集成:2资源清单参数介绍2.1获得资源帮助指令explain2.2编写示例2.2.1示例1:运行简单的单个容器pod2.2.2 示例2:运行多个容器pod2.2.3示例3:理解pod间的网络整合2.2.4......
  • redis的主从复制、哨兵和集群部署
    Redis的主从复制主从复制引言实际生产环境下,单机的redis服务器是无法满足实际的生产需求的。第一,单机的redis服务器很容易发生单点故障,即使redis提供了各种持久化的方法来避免数据的丢失,但是物理上的故障(硬盘损毁等)还是无法完全避免的。第二,如果对单台机器的性能进行纵......
  • 字符串查找函数strchr 、 strrchr和strstr的简介
    目录一、函数简介1.1. strchr 函数1.2.strrchr函数1.3. strstr 函数二、函数原型2.1. strchr 函数参数返回值2.1. strchr 函数参数返回值2.2. strstr 函数参数返回值三、函数实现(伪代码)3.1.strchr实现3.2.strrchr实现3.3. strstr实现四、......
  • Windows下安装Jenkins实现java项目的自动化部署(三)
    Windows下安装Jenkins实现java项目的自动化部署(三)目录:Windows下安装Jenkins实现java项目的自动化部署(三)摘要:介绍:1.创建ant自定义标签2.编写自定义标签的功能类3.总结:摘要:本文主要内容:ant配置文件中自定义标签的实现介绍:首先,介绍一下我整个项目操作的流程,我们这......
  • 【第97课】云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 入门指南 | Datavines 安装部署篇
    摘要:本文主要介绍基于源码部署Datavines和执行检查作业,内容主要分为以下几个部分:平台介绍快速部署运行数据质量检查作业Datavines的目标是成为更好的数据可观测性领域的开源项目,为更多的用户去解决元数据管理和数据质量管理中遇到的问题。在此我们真诚欢迎更多的贡献......
  • 一、信息学奥赛简介
    CSP-J/S(非专业级别认证)CSP-J对应NOIP中普及组,CSP-S对应NOIP中的提高组。NOIP:全国青少年信息学奥林匹克联赛NOI:全国青少年信息学奥林匹克竞赛APIO/IOI比IOI更高一级,APIO是亚洲和太平洋地区信息学奥林匹克竞赛,IOI是国际信息学奥林匹克竞赛 二、计算机硬件基础1、计算机的发......
  • PyTorch深度学习教程第二章-PyTorch 简介
    文章目录前言一、高层次理解PyTorch二、开始使用PyTorch清单2.1:使用pip安装PyTorch清单2.2:使用conda安装PyTorch清单2.3:一个简单的PyTorch测试程序输出2.1:测试程序的输出结果三、PyTorch的应用四、PyTorch的优点和限制五、PyTorch与TensorFlow的比......
  • jsp仓储管理系统9e8ai 本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上
    jsp仓储管理系统9e8ai本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能客户,库存人员,入库人员,出库人员,商品类别,商品信息,仓区信息,商品入库,商品出库开题报告内容一、项目背景与意义随着电子商......
  • react16之前的虚拟dom数据结构简单简介
    在react16之前的版本中,虚拟dom节点的数据结构看起来大致如下constVitrualDom={type:'div',props:{class:'title'},children:[{type:'span',children:'HelloConardLi'},{type:'ul',......