容器领航者:Kubernetes集群部署秘籍

目录

前言

一、ubernetes简介

1.1 应用部署方式演变

1.2 容器编排应用

1.3 kubenetes简介

二、Kubernetes核心概念

2.1 K8S各个组件用途

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

 2.3 K8S 的常用名词感念

2.4 k8S的分层架构​编辑

三、部署前的准备

3.1 k8s中容器的管理方式

3.2 环境准备

3.2.1 部署docker

3.2.2 配置harbor仓库

3.2.3 上传镜像

四、Kubernetes集群部署

4.1 实验环境

4.1.1 配置master主机

4.1.2 配置两台node副机

4.2 集群环境初始化

4.2.1 禁用所有节点的swap

4.2.2 安装k8s部署工具

4.2.3 设置kubectl命令补齐功能

4.2.4 在master节点拉取K8S所需镜像

4.2.5 集群初始化 

4.3 Kubernetes网络配置

4.4 Kubernetes集群扩展


前言

容器技术以其轻量级、便携性和一致性,在云计算领域迅速崛起,彻底改变了应用的开发、部署和运行方式。容器化是一种将应用程序及其依赖项打包的方式,确保应用在任何环境中都能以相同的方式运行。与传统的虚拟化技术相比,容器无需额外的操作系统开销,这使得它们在资源利用率、启动速度和应用程序隔离方面具有显著优势。

容器技术的兴起可以追溯到Linux容器(LXC)的发展,以及后来的Docker的普及。Docker在2013年的发布极大地简化了容器的创建和管理,让开发者可以轻松地打包、分发和运行任何应用程序。容器的普及也催生了一系列新的工具和服务,旨在进一步简化容器的部署、管理和监控。

Kubernetes是一个开源平台,用于自动化部署、扩展和管理容器化应用程序。它最初由Google设计并捐赠给Cloud Native Computing Foundation(CNCF)来维护。Kubernetes的使命是提供一个运行分布式系统的框架,无论是在本地、云环境还是跨云环境中,都能够确保容器应用的稳定性和高可用性。


一、ubernetes简介

1.1 应用部署方式演变

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

  • 优点:简单,不需要其它技术的参与
  • 缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响

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

  • 优点:程序环境不会相互产生影响,提供了一定程度的安全性
  • 缺点:增加了操作系统,浪费了部分资源

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

容器化部署方式给带来很多的便利,但是也会出现一些问题:
一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器当并发访问量变大的时候,怎么样做到横向扩展容器数量

1.2 容器编排应用

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

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

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

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

1.3 kubenetes简介

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的使用范围广泛。

  • 在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年。
  • Borg系统运行管理着成千上万的容器应用。
  • Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
  • Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

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

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
  • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
  • 存储编排:可以根据容器自身的需求自动创建存储卷

二、Kubernetes核心概念

2.1 K8S各个组件用途

Master Node(主节点):主节点是Kubernetes集群的控制平面,负责管理集群中的所有活动。

主节点包含以下关键组件:

  • kube-apiserver: 提供Kubernetes API的接口,是系统的前端服务。
  • kube-scheduler: 负责决定将Pod分配给哪个Node。
  • kube-controller-manager: 运行控制器进程,如副本控制器、节点控制器、端点控制器等。

Node(节点):节点是工作负载运行的地方,通常是虚拟机或物理机。

每个节点包含以下关键组件:

  • kubelet: 是主节点的代理,负责启动Pods和容器。
  • kube-proxy: 网络代理,负责为服务提供TCP/UDP和网络的转发。
  • Container Runtime: 负责运行容器,如Docker、containerd、CRI-O等。

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

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

1. kubernetes 环境启动之后, master 和 node 都会将自身的信息存储到 etcd 数据库中
2. web 服务的安装请求会首先被发送到 master 节点的 apiServer 组件
3. apiServer 组件会调用 scheduler 组件来决定到底应该把这个服务安装到哪个 node 节点上
在此时,它会从 etcd 中读取各个 node 节点的信息,然后按照一定的算法进行选择,并将结果告知
apiServer
4. apiServer 调用 controller-manager 去调度 Node 节点安装 web 服务 5. kubelet 接收到指令后,会通知 docker ,然后由 docker 来启动一个 web 服务的 pod
6. 如果需要访问 web 服务,就需要通过 kube-proxy 来对 pod 产生访问的代理

 2.3 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的运行环境

2.4 k8S的分层架构

  • 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
  • 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
  • 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
  • 接口层:kubectl命令行工具、客户端SDK以及集群联邦
  • 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
  • Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
  • Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

三、部署前的准备

3.1 k8s中容器的管理方式

K8S 集群创建方式有 3 种:

  • centainerd:默认情况下, K8S 在创建集群时使用的方式
  • docker:Docker 使用的普记录最高,虽然 K8S 在 1.24 版本后已经费力了 kubelet 对 docker 的支持,但时可以借助cri-docker方式来实现集群创建
  • cri-o:CRI-O 的方式是 Kubernetes 创建容器最直接的一种方式,在创建集群的时候,需要借助于 cri-o 插件的方式来实现Kubernetes 集群的创建。

docker 和 cri-o 这两种方式要对 kubelet 程序的启动参数进行设置

3.2 环境准备

3.2.1 部署docker
[root@docker-hub ~]# cd /etc/yum.repos.d/
[root@docker-hub yum.repos.d]# ls
redhat.repo  rhel9.repo
[root@docker-hub yum.repos.d]# vim docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0[root@docker-hub yum.repos.d]# yum install --allowerasing docker-ce -y
[root@docker-hub yum.repos.d]# cd
[root@docker-hub ~]# vim /usr/lib/systemd/system/docker.service 
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always[root@docker-hub ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@docker-hub ~]# ls
公共  视频  文档  音乐  anaconda-ks.cfg  eth160.nmconnection  test.sh
模板  图片  下载  桌面  clear_mnt        registry.tag.gz[root@docker-hub ~]# docker load -i registry.tag.gz 
ce7f800efff9: Loading layer  7.644MB/7.644MB
30609d4f10dd: Loading layer  792.6kB/792.6kB
3b6a51496c9d: Loading layer  17.55MB/17.55MB
e704e9e3e9dc: Loading layer  3.584kB/3.584kB
f019f591461d: Loading layer  2.048kB/2.048kB
Loaded image: registry:latest[root@docker-hub ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
registry     latest    cfb4d9904335   12 months ago   25.4MB
3.2.2 配置harbor仓库
[root@docker-hub ~]# ls
公共  图片  音乐             clear_mnt                            registry.tag.gz
模板  文档  桌面             eth160.nmconnection                  test.sh
视频  下载  anaconda-ks.cfg  harbor-offline-installer-v2.5.4.tgz[root@docker-hub ~]# tar zxf harbor-offline-installer-v2.5.4.tgz 
[root@docker-hub ~]# cd harbor/
[root@docker-hub harbor]# ls
common.sh  harbor.v2.5.4.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare[root@docker-hub harbor]# cp harbor.yml.tmpl harbor.yml
[root@docker-hub harbor]# ls
common.sh             harbor.yml       install.sh  prepare
harbor.v2.5.4.tar.gz  harbor.yml.tmpl  LICENSE[root@docker-hub harbor]# vim harbor.yml
hostname: reg.timinglee.org
certificate: /data/certs/timinglee.org.crt
private_key: /data/certs/timinglee.org.key
harbor_admin_password: 123456[root@docker-hub ~]# mkdir certs
[root@docker-hub ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.250  reg.timinglee.org[root@docker-hub ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/timinglee.org.key -addext "subjectAltName = DNS:reg.timinglee.org" -x509 -days 365 -out certs/timinglee.org.crt
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shanxi
Locality Name (eg, city) [Default City]:XI'an
Organization Name (eg, company) [Default Company Ltd]:docker
Organizational Unit Name (eg, section) []:registry
Common Name (eg, your name or your server's hostname) []:reg.timinglee.org
Email Address []:admin@timinglee.org[root@docker-hub harbor]# mkdir /data/
[root@docker-hub harbor]# cp /root/certs/ /data/ -r
[root@docker-hub harbor]# ls /data/certs
timinglee.org.crt  timinglee.org.key
[root@docker harbor]# ./install.sh --help
Please set --with-notary            #证书签名    
Please set --with-trivy             #安全扫描   
Please set --with-chartmuseum if needs enable Chartmuseum in Harbor/[root@docker-hub harbor]# ./install.sh --with-chartmuseum
[root@docker-hub harbor]# docker compose up -d

测试

3.2.3 上传镜像

上传镜像到harbor仓库要先建立项目

[root@docker-hub harbor]# mkdir -p /etc/docker/certs.d/reg.timinglee.org 
[root@docker-hub certs]# cp /root/certs/timinglee.org.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt[root@docker-hub certs]# ls /etc/docker/certs.d/reg.timinglee.org/ca.crt 
/etc/docker/certs.d/reg.timinglee.org/ca.crt[root@docker-hub certs]# docker login reg.timinglee.org
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[root@docker-hub certs]# cd
[root@docker-hub ~]# cd harbor/
[root@docker-hub harbor]# docker tag nginx:latest reg.timinglee.org/timinglee/nginx:latest
[root@docker-hub harbor]# docker push reg.timinglee.org/timinglee/nginx:latest
The push refers to repository [reg.timinglee.org/timinglee/nginx]
5f0272c6e96d: Pushed 
f4f00eaedec7: Pushed 
55e54df86207: Pushed 
ec1a2ca4ac87: Pushed 
8b87c0c66524: Pushed 
72db5db515fd: Pushed 
9853575bc4f9: Pushed 
latest: digest: sha256:127262f8c4c716652d0e7863bba3b8c45bc9214a57d13786c854272102f7c945 size: 1778

测试


四、Kubernetes集群部署

4.1 实验环境

主机名ip角色
dockr-hub172.25.254.250harbor仓库
k8s-master172.25.254.100master,k8s集群控制节点
k8s-node1172.25.254.10worker,k8s集群工作节点
k8s-node2172.25.254.20worker,k8s集群工作节点
4.1.1 配置master主机
[root@k8s-master ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.10   k8s-node1.timinglee.org
172.25.254.20   k8s-node2.timinglee.org
172.25.254.100  k8s-master.timinglee.org
172.25.254.250  reg.timinglee.org[root@k8s-master ~]# scp /etc/hosts 172.25.254.10:/etc/hosts
[root@k8s-master ~]# scp /etc/hosts 172.25.254.20:/etc/hosts#检测软件仓库
[root@docker-hub ~]# yum list httpd
正在更新 Subscription Management 软件仓库。
无法读取客户身份本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。上次元数据过期检查:1:39:39 前,执行于 2024年10月04日 星期五 14时45分46秒。
可安装的软件包
httpd.x86_64                         2.4.53-7.el9                          AppStream#安装docker
[root@k8s-master ~]# ls
公共             containerd.io-1.7.20-3.1.el9.x86_64.rpm
模板             docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm
视频             docker-ce-27.1.2-1.el9.x86_64.rpm
图片             docker-ce-cli-27.1.2-1.el9.x86_64.rpm
文档             docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
下载             docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
音乐             docker.tar.gz
桌面             eth160.nmconnection
anaconda-ks.cfg  test.sh    clear_mnt
[root@k8s-master ~]# dnf install --allowerasing *.rpm -y
[root@k8s-master ~]# mkdir /etc/docker/certs.d/reg.timinglee.org/ -p
[root@reg ~]# scp /data/certs/timinglee.org.crt 172.25.254.100:/etc/docker/certs.d/reg.timinglee.org/ca.crt[root@k8s-master ~]# vim /etc/docker/daemon.json
{"registry-mirrors":["https://reg.timinglee.org"]
}[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 ~]# docker infoRegistry Mirrors:https://reg.timinglee.org/[root@k8s-master ~]# docker pull timinglee/nginx:latest
latest: Pulling from timinglee/nginx
e4fff0779e6d: Pull complete 
2a0cb278fd9f: Pull complete 
7045d6c32ae2: Pull complete 
03de31afb035: Pull complete 
0f17be8dcff2: Pull complete 
14b7e5e8f394: Pull complete 
23fa5a7b99a6: Pull complete 
Digest: sha256:127262f8c4c716652d0e7863bba3b8c45bc9214a57d13786c854272102f7c945
Status: Downloaded newer image for timinglee/nginx:latest
docker.io/timinglee/nginx:latest
4.1.2 配置两台node副机
[root@k8s-master ~]# scp *.rpm 172.25.254.10:/root
[root@k8s-master ~]# scp *.rpm 172.25.254.20:/root[root@k8s-node1 ~]# dnf install --allowerasing *.rpm -y
[root@k8s-node2 ~]# dnf install --allowerasing *.rpm -y[root@k8s-master ~]# scp -r /etc/docker/ 172.25.254.10:/etc
[root@k8s-master ~]# scp -r /etc/docker/ 172.25.254.20:/etc[root@k8s-node1 ~]# systemctl enable --now docker
[root@k8s-node2 ~]# systemctl enable --now docker[root@k8s-node1 ~]# docker pull timinglee/nginx
[root@k8s-node2 ~]# docker pull timinglee/nginx

4.2 集群环境初始化

4.2.1 禁用所有节点的swap
[root@k8s-master ~]# swapon -s
Filename				Type		Size		Used	   Priority
/dev/dm-1                               partition	4194300		0	   -2
[root@k8s-master ~]# systemctl status dev-dm\\x2d1.swap 
● dev-dm\x2d1.swap - /dev/dm-1Follows: unit currently follows state of dev-mapper-rhel\x2dswap.swapLoaded: loadedActive: active since Fri 2024-10-04 09:47:14 CST; 7h agoUntil: Fri 2024-10-04 09:47:14 CST; 7h agoWhat: /dev/dm-1
[root@k8s-master ~]# systemctl mask dev-dm\\x2d1.swap 
Created symlink /etc/systemd/system/dev-dm\x2d1.swap → /dev/null.
[root@k8s-master ~]# vim /etc/fstab 
[root@k8s-master ~]# swapoff /dev/dm-1 
[root@k8s-master ~]# swapon -s        #没有运行的swap节点[root@k8s-node1 ~]# swapoff /dev/dm-1
[root@k8s-node1 ~]# systemctl mask dev-dm\\x2d1.swap
[root@k8s-node2 ~]# swapoff /dev/dm-1
[root@k8s-node2 ~]# systemctl mask dev-dm\\x2d1.swap
4.2.2 安装k8s部署工具
[root@k8s-master ~]# mv cri-dockerd-0.3.14-3.el8.x86_64.rpm libcgroup-0.41-19.el8.x86_64.rpm /mnt/
[root@k8s-master ~]# cd /mnt/
[root@k8s-master mnt]# ls
cri-dockerd-0.3.14-3.el8.x86_64.rpm  hgfs  libcgroup-0.41-19.el8.x86_64.rpm
[root@k8s-master mnt]# dnf install *.rpm -y
[root@k8s-master mnt]# systemctl enable --now cri-docker.service 
[root@k8s-master mnt]# scp cri-dockerd-0.3.14-3.el8.x86_64.rpm libcgroup-0.41-19.el8.x86_64.rpm 172.25.254.10:/opt/
[root@k8s-master mnt]# scp cri-dockerd-0.3.14-3.el8.x86_64.rpm libcgroup-0.41-19.el8.x86_64.rpm 172.25.254.20:/opt/#部署软件仓库,添加k8s源
[root@k8s-master mnt]# cd /etc/yum.repos.d/
[root@k8s-master yum.repos.d]# ls
redhat.repo  rhel9.repo
[root@k8s-master yum.repos.d]# vim k8s.repo
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
gpgcheck=0[root@k8s-master yum.repos.d]# dnf makecache#安装软件
[root@k8s-master yum.repos.d]# cd
[root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 --downloadonly --downloaddir=/mnt -y
[root@k8s-master mnt]# dnf install *.rpm -y#node1,2
[root@k8s-master ~]# scp /etc/yum.repos.d/k8s.repo 172.25.254.10:/etc/yum.repos.d/
[root@k8s-master ~]# scp /etc/yum.repos.d/k8s.repo 172.25.254.20:/etc/yum.repos.d/
[root@k8s-node1 ~]# yum makecache
[root@k8s-node2 ~]# yum makecache[root@k8s-node1 ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 --downloadonly --downloaddir=/mnt -y
[root@k8s-node1 ~]# cd /mnt/
[root@k8s-node1 mnt]# dnf intall *.rpm -y[root@k8s-node2 ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 --downloadonly --downloaddir=/mnt -y
[root@k8s-node2 ~]# cd /mnt/
[root@k8s-node2 mnt]# dnf intall *.rpm -y
4.2.3 设置kubectl命令补齐功能
[root@k8s-master mnt]# dnf install bash-completion -y
[root@k8s-master mnt]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8s-master mnt]# source ~/.bashrc
4.2.4 在master节点拉取K8S所需镜像
[root@k8s-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
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/coredns:v1.11.1
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.9
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.5.12-0#上传镜像到harbor仓库,需先建立k8s项目
[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' | awk -F "/" '{system("docker tag "$0" reg.timinglee.org/k8s/"$3)}'
[root@k8s-master ~]#  docker images | awk '/k8s/{system("docker push "$1":"$2)}'

测试

4.2.5 集群初始化 
#指定网络插件名称及基础镜像
[root@k8s-master ~]# vim /lib/systemd/system/cri-docker.service
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.timinglee.org/k8s/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart cri-docker
[root@k8s-master ~]# scp /lib/systemd/system/cri-docker.service 172.25.254.10:/lib/systemd/system/cri-docker.service
[root@k8s-master ~]# scp /lib/systemd/system/cri-docker.service 172.25.254.20:/lib/systemd/system/cri-docker.service[root@k8s-node1 opt]# systemctl daemon-reload
[root@k8s-node1 opt]# systemctl restart cri-docker
[root@k8s-node2 opt]# systemctl daemon-reload
[root@k8s-node2 opt]# systemctl restart cri-docker#执行初始化
[root@k8s-master ~]# kubeadm init --pod-network-cidr=192.168.0.0/16 \
> --image-repository reg.timinglee.org/k8s \
> --kubernetes-version v1.30.0 \
> --cri-socket=unix:///var/run/cri-dockerd.sock[root@k8s-master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@k8s-master ~]# kubectl get nodes
NAME                       STATUS     ROLES           AGE   VERSION
k8s-master.timinglee.org   NotReady   control-plane   13m   v1.30.0[root@k8s-master ~]#  echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@k8s-master ~]#  source ~/.bash_profile

如果初始化命令失败了可以用这个命令重来

kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock

4.3 Kubernetes网络配置

安装flannel网络插件

[root@k8s-master ~]# vim kube-flannel.ymlvalue: "5000"image: reg.timinglee.org/flannel/flannel:v0.25.5name: kube-flannel- cpimage: reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1name: install-cni-plugin- cpimage: reg.timinglee.org/flannel/flannel:v0.25.5name: install-cni[root@k8s-master ~]# docker load -i flannel-0.25.5.tag.gz#在harbor仓库建立flannel项目
[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 reg.timinglee.org/flannel/flannel:v0.25.5
[root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel:v0.25.5
[root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
[root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1#安装网络插件
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml

测试

4.4 Kubernetes集群扩展

#查看令牌
[root@k8s-master ~]# kubeadm token create --print-join-command
kubeadm join 172.25.254.100:6443 --token m6lje3.iy61zsvjoxu0aq94 --discovery-token-ca-cert-hash sha256:e33711c2250e5dd61115af0ab0c96938e5e39873aabbe2d0f98b42d7da8681fa#加入集群
[root@k8s-node1 mnt]# kubeadm join 172.25.254.100:6443 --token m6lje3.iy61zsvjoxu0aq94 --discovery-token-ca-cert-hash sha256:e33711c2250e5dd61115af0ab0c96938e5e39873aabbe2d0f98b42d7da8681fa --cri-socket=unix:///var/run/cri-dockerd.sock [root@k8s-node2 mnt]# kubeadm join 172.25.254.100:6443 --token m6lje3.iy61zsvjoxu0aq94 --discovery-token-ca-cert-hash sha256:e33711c2250e5dd61115af0ab0c96938e5e39873aabbe2d0f98b42d7da8681fa --cri-socket=unix:///var/run/cri-dockerd.sock 

测试

所有节点的状态都为ready,就代表安装成功了

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

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

相关文章

Java体系中的异常

1. 异常 1.1 异常的概念 在Java中&#xff0c;我们将程序执行过程中发生的不正常行为称为异常。异常是在程序运行过程中发生的错误或意外情况&#xff0c;它打破了程序的正常执行流程。在Java中通过面向对象的编程思想&#xff0c;我们也将这些扰乱程序正常执行的行为用类组织…

LeetCode Hot100 | Day1 | 二叉树:二叉树的直径

LeetCode Hot100 | Day1 | 二叉树&#xff1a;二叉树的直径 主要学习内容&#xff1a; 二叉树深度求法 深度的 leftright1 得到的是从根结点到叶子结点的节点数量 543.二叉树的直径 [543. 二叉树的直径 - 力扣&#xff08;LeetCode&#xff09;](https://leetcode.cn/prob…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【262-271】

262. 回顾上一章内容 看视频 263. IDEA介绍 263.1 IDEA 介绍 IDEA 全称 IntelliJ IDEA在业界被公认为最好的 Java 开发工具IDEA 是 JetBrains 公司的产品&#xff0c;总部位于捷克的首都布拉格除了支持 Java 开发&#xff0c;还支持 HTML&#xff0c;CSS&#xff0c;PHP&am…

Qt之TCP收发图片的例子

一.效果 二.实现 1.发图片 void MainWindow::slotSendImage() {matrix.rotate(90);QPixmap tempPixmap = pixmap.transformed(matrix);QBuffer buffer;tempPixmap.save(&buffer,"jpg");ui->labelImage->setPixmap(tempPixmap);int dataLength = buffer.d…

[图形学]在半球面上均匀采样和cos加权采样

一、简介 本文介绍了如何在半球表面上进行半球面均匀采样、半球面cos加权采样采样。 给出了相关公式推导和python代码实现。 二、在半球上采样 0.预备知识 1).球面坐标系与笛卡尔坐标系 在半球面上采样时&#xff0c;常使用球面坐标系。先采样球面坐标系下的坐标参数 ( θ…

python sqlite3 工具函数

起因&#xff0c; 目的: sqlite3 最常用的函数。 比如&#xff0c;某人给了一个 database.db 文件。 但是你登录的时候&#xff0c;不知道账号密码。 此文件就是&#xff0c;查看这个数据库的详细内容。 有哪些表某个表的全部内容。添加数据 代码&#xff0c; 见注释 impor…

《数字图像处理基础》学习01-数字图像处理的相关基础知识

这篇文章只是对数字图像处理的相关基础知识有个大概的了解&#xff0c;之后的文章会接着补充和扩展。 目录 一&#xff0c;图像的基本概念 1&#xff0c;图像 2&#xff0c;图像的分类 1&#xff09;物理图像 2&#xff09;虚拟图像 二&#xff0c;数字图像处理 三&…

PostGIS--介绍

目录 1、什么是PostGIS&#xff1f;2、数据2.1 对象2.1.1 读取几何元数据信息函数2.1.2 处理点的函数2.1.3 处理线的函数2.1.4 处理面的函数2.1.5 集合 2.2 集合输入和输出2.3 shapefile文件 总结PS: 1、什么是PostGIS&#xff1f; PostGIS通过增加对空间类型、空间索引和空间…

【MaskGAN】MaskGAN: Towards Diverse and Interactive Facial Image Manipulation

文章目录 MaskGAN: Towards Diverse and Interactive Facial Image Manipulationkey points贡献方法密集映射网络DMN编辑行为模拟训练多目标学习CelebAMask-HQ数据集实验消融实验总结MaskGAN: Towards Diverse and Interactive Facial Image Manipulation 会议/期刊:CVPR 202…

实现mnist手写数字识别

基础知识 tensorflow TensorFlow是一个开源的机器学习框架&#xff0c;致力于各种数据流图的自动微分和深度神经网络的计算。简而言之&#xff0c;** TensorFlow帮助我们轻松地构建、训练和部署机器学习模型** 。它可以在各种平台上运行&#xff0c;包括桌面计算机、服务器…

Dyna-slam复现(保姆级详细图文版,百分百成功)

因最近论文要和这些算法做对比,故配置了一下,在此记录 因为是老的算法,cuda版本现在的显卡都不能使用,所以笔者找的电脑是华硕飞行堡垒17年的电脑,1080的显卡 深度学习及maskrcnn配置 先将dyna-slam git下来,终端执行 git clone https://github.com/BertaBescos/Dyna…

数据结构之红黑树实现(全)

一、红黑树 红黑树是一种自平衡的二叉搜索树&#xff0c;它通过约束节点的颜色和结构来保持平衡。红黑树是由 Rudolf Bayer 在1972年发明的&#xff0c;被认为是一种优秀的平衡树结构&#xff0c;广泛应用于各种数据结构和算法中。 1.红黑树的性质 1. 每个结点是红的或者黑的…

PhotoMaker部署文档

一、介绍 PhotoMaker&#xff1a;一种高效的、个性化的文本转图像生成方法&#xff0c;能通过堆叠 ID 嵌入自定义逼真的人类照片。相当于把一张人的照片特征提取出来&#xff0c;然后可以生成你想要的不同风格照片&#xff0c;如写真等等。 主要特点&#xff1a; 在几秒钟内…

前端工程化 - Vue

环境准备 Vue-cli是Vue官方提供的一个脚手架&#xff0c;用户快速生成一个Vue的项目模板。 Vue-cli提供了如下功能&#xff1a; 统一的目录结构本地调试热部署单元测试集成打包上线 需要安装Node.js 安装Vue-cli npm install -g vue/cli通过vue --version指令查看是否安装成…

常见排序详解(历时四天,哭了,必须释放一下)

目录 1、插入排序 1.1 基本思想 1.2 直接插入排序 1.2.1 思路 1.2.2 代码实现 1.2.3 性质 1.3 希尔排序 1.3.1 思路 1.3.2 代码实践 1.3.3 性质 2、选择排序 2.1 基本思想 2.2 直接选择排序 2.2.1 思路 2.2.2 代码实践 2.2.3 性质 2.3 堆排序 2.3.1 思路 2.…

108页PPT丨OGSM战略规划框架:实现企业目标的系统化方法论

OGSM战略规划框架是一种实现企业目标的系统化方法论&#xff0c;它通过将组织的目标&#xff08;Objectives&#xff09;、目标&#xff08;Goals&#xff09;、策略&#xff08;Strategies&#xff09;和衡量指标&#xff08;Measures&#xff09;进行系统化整合&#xff0c;确…

windows下DockerDesktop命令行方式指定目录安装

windows下DockerDesktop指定目录安装(重新安装) 因为DcokerDesktop占用内存较大, 并且拉去镜像后占用本地空间较多,所以建议安装时就更改默认安装路径和镜像存储路径 这里,展示了从下载到安装的过程: 首先下载DcokerDesktop;找到Docker Desktop Installer.exe 并重命名为 do…

国内超声波清洗机哪个品牌好?力荐四款超耐用超声波清洗机!

超声波清洗机作为一款高效实用的家庭与专业清洁利器&#xff0c;能够迅速且彻底地清洁多样化的物件。面对市场上琳琅满目的品牌与型号&#xff0c;每一款都各具特色与优势&#xff0c;故在决定购买前做足调研显得尤为重要&#xff0c;以免购入不尽如人意的产品&#xff0c;造成…

力扣110:判断二叉树是否为平衡二叉树

利用二叉树遍历的思想编写一个判断二叉树&#xff0c;是否为平衡二叉树 示例 &#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true思想&#xff1a; 代码&#xff1a; int getDepth(struct TreeNode* node) {//如果结点不存在&#xff0c;返回…

打造自己的RAG解析大模型:Windows部署OCR服务(可商业应用)

在上一篇文章中&#xff0c;我们介绍了如何在 Windows 环境中配置 OCR 相关模型&#xff0c;并完成了模型验证。本篇文章将基于之前的内容&#xff0c;进一步讲解如何将文本检测、方向分类和文本识别模型进行串联&#xff0c;最终搭建一个基础的 OCR 应用服务。通过这些模型的串…