容器领航者: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-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,就代表安装成功了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值