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

news2024/10/6 18:48:16

目录

前言

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

Login 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 info
 Registry 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-1
    Follows: unit currently follows state of dev-mapper-rhel\x2dswap.swap
     Loaded: loaded
     Active: active since Fri 2024-10-04 09:47:14 CST; 7h ago
      Until: Fri 2024-10-04 09:47:14 CST; 7h ago
       What: /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.yml
          value: "5000"
        image: reg.timinglee.org/flannel/flannel:v0.25.5
        name: kube-flannel
        - cp
        image: reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
        name: install-cni-plugin
        - cp
        image: reg.timinglee.org/flannel/flannel:v0.25.5
        name: 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.coloradmin.cn/o/2192652.html

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

相关文章

自然种子启发,4D 打印软机器人,环境探索新工具

想象一下&#xff0c;一颗小小的种子&#xff0c;竟能成为软机器人的灵感源泉&#xff01;在科技的奇妙世界里&#xff0c;受牻牛儿苗科种子启发&#xff0c;研究人员利用 4D 打印技术&#xff0c;打造出了具有独特性能的软机器人——《4D Printing of Humidity‐Driven Seed I…

免费!推荐10个可商用模特图片素材网站!

平时我也会用到一些可商用的模特图片素材&#xff0c;包括正版商用和免费商用的都有&#xff0c;接下来罗列国内外10个主流图片下载站点&#xff0c;保证你可以快速得到你想要的正版模特素材&#xff01; 1.包图网 传送门&#xff1a;https://ibaotu.com/sy 国内的一个高清分…

Acwing 区间DP 计数类DP

1.区间DP Acwing 282.石子合并 思路分析&#xff1a; f(i,j)表示将第i堆石子到第j堆石子合并为一堆时的最小代价&#xff1b;状态划分&#xff1a;选一个分割点k&#xff0c;将[i-k]和[k1,j]这两个区间的石子合并&#xff0c;然后加上两个区间的合并总代价&#xff08;采用…

在线Xpath匹配定位测试工具

具体请前往&#xff1a;在线Xpath-匹配-定位-调试/测试工具

速速收藏!这些2024年上映的AI电影与短剧,申请加入你的国庆假期宅家计划!

2024年上映的AI电影 01 科幻惊悚电影《致命AI Afraid》 导演&#xff1a;克里斯韦兹上映日期:2024-08-30(美国)片长:84分钟剧情简介&#xff1a;Curtis一家被选中去测试一种革新性的居家设备&#xff1a;数字家庭助手AIA&#xff0c;包括各种感应设备和摄像头等&#xff0c;…

【2024】前端学习笔记13-JavaScript修改网页样式

学习笔记 1.修改网页样式1.1.修改内联样式(`style`属性)1.2.使用`cssText`属性:2.修改样式类(`classList`属性)2.1.添加和移除类名2.2.切换类名(`toggle`方法)1.修改网页样式 1.1.修改内联样式(style属性) 直接修改元素的style属性: 可以通过获取元素对象,然后直…

java计算机毕设课设—推箱子游戏(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; 基于JAVA的推箱子游戏是一个经典的益智游戏&#xff0c;旨在通过推动箱子到指定位置来锻炼玩家的思维和策略能力。本游戏提供了多种不同难度的关卡&#xff0c;以满足不同玩家的需求。整个程序包括五个主要模块&#xff1a;初始化模块、画图模块、移…

Dart 高级语法

Dart 是一种由 Google 开发的开源编程语言&#xff0c;旨在为构建高性能、可移植的应用程序提供支持。它被设计用于多种平台&#xff0c;包括Web、移动设备&#xff08;通过 Flutter 框架&#xff09;、服务器端应用以及桌面应用。以下是一些 Dart 中比较高级的语言特性和模式。…

Ambari搭建Hadoop集群 — — 问题总结

Ambari搭建Hadoop集群 — — 问题总结 一、部署教程&#xff1a; 参考链接&#xff1a;基于Ambari搭建大数据分析平台-CSDN博客 二、问题总结&#xff1a; 1. VMwear Workstation 查看网关 2. 资源分配 参考&#xff1a; 硬盘&#xff1a;master&#xff08;29 GB&#xff…

连续时间傅里叶变换

一、非周期信号的表示&#xff1a;连续时间傅里叶变换 傅里叶变换对&#xff1a; 通常称为的频谱 二、傅里叶变换的收敛 1、绝对可积 2、在任何有限区间内&#xff0c;只有有限个最大值和最小值 3、在任何有限区间内&#xff0c;有有限个不连续点&#xff0c;且在每个不连…

C语言动态内存管理(26)

文章目录 前言一、引子二、malloc三、calloc四、realloc五、free六、常见的动态内存错误对NULL指针进行解引用操作对动态开辟空间的越界访问对非动态开辟的内存使用free释放使用free释放动态开辟内存的一部分对同一块内存多次释放动态开辟内存忘记释放&#xff08;内存泄漏&…

k8s 之安装helm服务

helm安装包下载helm官网_zh 作者&#xff1a;程序那点事儿 日期&#xff1a;2024/01/30 00:51 下载安装包 wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz 解压安装包 tar -zxcf helm-v3.2.3-linux-amd64.tar.gz 进入到解压目录 cd linux-amd64 将helm目录拷贝…

101. 对称二叉树【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路3.1 递归3.2 迭代 四、参考代码4.1 递归4.2 迭代 零、原题链接 101. 对称二叉树 一、题目描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 进阶&#xff1a;你可以运用递归和迭代两种方法解决…

YOLO11改进|注意力机制篇|引入上下文锚注意力机制CAA

目录 一、【CAA】注意力机制1.1【CAA】注意力介绍1.2【CAA】核心代码 二、添加【CAA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【CAA】注意力机制 1.1【CAA】注意力介绍 CAA注意力机制的结构图如下&#xff0c;下面根据…

Selenium WebDriver和Chrome对照表

PS&#xff1a;我的没下载WebDriver 也没配置环境变量 也能用Selenium 网上有说把WebDriver放到chrome的安装目录并将路径配到path中【可能之前用playwright下载过】 查看浏览器版本号 在浏览器的地址栏&#xff0c;输入chrome://version/&#xff0c;回车后即可查看到对应版…

Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 在健康意识日益增强的今天&#xff0c;如何为用户提供个性化、精准的卫生健康建议成为了一个亟待解决…

java中的多层循环控制,包括金字塔和九九乘法表的打印

多重循环控制 多重循环控制练习 多重循环控制 1.将一个循环放在另一个循环体内&#xff0c;就形成了嵌套循环。其中&#xff0c;for&#xff0c;while&#xff0c;do…while均可以作为外层循环和内层循环。【建议一般用两层&#xff0c;最多不要超过3层&#xff0c;否则代码的…

【前端】前端数据转化为后端数据

【前端】前端数据转化为后端数据 写在最前面格式化数组代码解释hasOwnProperty是什么&#xff1f; &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限…

k8s实战-3

k8s实战-3 一、Ingress1.安装2.测试 二、存储抽象1.环境准备2.PV和PVC3.ConfigMap4.Secret 总结 一、Ingress Ingress 类似于一个“网关”&#xff0c;它负责将外部 HTTP 请求路由到集群内的服务。你可以把它想象成一个“交通警察”&#xff0c;根据请求的 URL 和路径&#xf…

无锡自闭症康复寄宿学校:每天的康复方式揭秘

无锡自闭症康复寄宿学校的启示&#xff1a;揭秘广州星贝育园的日常康复方式 在自闭症儿童的教育与康复领域&#xff0c;每一所学校都在用自己的方式探索着前行的道路。无锡的自闭症康复寄宿学校以其独特的康复方式和显著的效果&#xff0c;为众多家庭带来了希望。而在广州&…