Rocky Linux 9搭建K8s-1.28.0+docker一主多从集群测试环境

news2025/2/4 1:06:32

集群类型:

Kubernetes集群大体上分为两类:一主多从和多主多从

一主多从:一台master节点和多台node节点,搭建简单,但是有单机故障风险,适用于测试环境

多主多从:多台master节点和多台node节点,搭建麻烦,安全性高,适用于生产环境

安装方式:

Kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包

  • Minikube:一个用于快速搭建单节点kubernetes的工具。
  • Kubeadm:一个用于快速搭建kubernetes集群的工具。

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

  • 二进制包:从官网下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效。

https://github.com/kubernetes/kubernetes

说明:现在需要安装kubernetes的集群环境,但是又不想过于麻烦,所有选择使用kubeadm方式 

1. kubernetes集群规划

集群各节点资源规划分配

主机名IP地址角色操作系统硬件配置
master01192.168.204.110管理节点Rocky Linux 9.42core/4G内存/50G
node01192.168.204.111工作节点Rocky Linux 9.42core/4G内存/50G
node02192.168.204.112工作节点Rocky Linux 9.42core/4G内存/50G

2. 操作系统准备工作

2.1. 配置主机名称

2.1.1. Master01节点运行

[root@localhost ~]# hostnamectl hostname master01

2.1.2. Node01节点运行

[root@localhost ~]# hostnamectl hostname node01

2.1.3. Node02节点运行

[root@localhost ~]# hostnamectl hostname node02
2.2. 配置系统hosts文件(全部节点)

分别在所有节点运行

[root@localhost ~]# echo "192.168.204.110 master01" >> /etc/hosts
[root@localhost ~]# echo "192.168.204.111 node01" >> /etc/hosts
[root@localhost ~]# echo "192.168.204.112 node02" >> /etc/hosts
2.3. 关闭防火墙和selinux(全部节点)

分别在所有节点运行

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config
2.4. 配置国内系统镜像源和安装epel源

2.4.1. 配置阿里云系统源(全部节点)。阿里云网上的文件名是Rocky.repo,系统上的是rocky-*.repo,注意修改查看

[root@master01 ~]# sed -e 's|^mirrorlist=|#mirrorlist=|g' \
 -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
 -i.bak \
 /etc/yum.repos.d/rocky-*.repo
 
[root@master01 ~]# yum makecache

2.4.2. 配置epel源(全部节点)

文件内容取自我的华为云主机如下

[root@master01 ~]# vi /etc/yum.repos.d/epel.repo
 [epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
# It is much more secure to use the #metalink, but if you wish to use a local mirror
# place its address here.
baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/$basearch/
#metalink=https://mirrors.fedoraproject.org/#metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
 
[epel-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
# It is much more secure to use the #metalink, but if you wish to use a local mirror
# place its address here.
baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/$basearch/debug/
#metalink=https://mirrors.fedoraproject.org/#metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
 
[epel-source]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
# It is much more secure to use the #metalink, but if you wish to use a local mirror
# place its address here.
baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/source/tree/
#metalink=https://mirrors.fedoraproject.org/#metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
[root@master01 ~]# yum makecache

2.5. 时区和时间(全部节点)

检查时区和时间,由于我装机时候已经配置好,无需操作。

[root@master01 ~]# timedatectl 
 Local time: Fri 2024-05-31 18:26:23 CST
 Universal time: Fri 2024-05-31 10:26:23 UTC
 RTC time: Fri 2024-05-31 10:26:23
 Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
 NTP service: active
 RTC in local TZ: no
[root@master01 ~]# date 
Fri May 31 06:27:40 PM CST 2024

如果时区和时间不对,需要手动设置时区和设置时间同步

本次使用系统自带的时间同步chrony工具。

2.6. 修改系统最大打开文件数(全部节点)

[root@master01 ~]# vi /etc/security/limits.conf

编辑文件,在文件后面添加一下两行数据

* soft nofile 65535
* hard nofile 65535
2.7. 修改内核参数(全部节点)

[root@master01 ~]# vi /etc/sysctl.conf

打开文件,在文件后面填入以下几行。

net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_max_tw_buckets = 20480 
net.ipv4.tcp_max_syn_backlog = 20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout = 20

并运行一下命令使得配置的sysctl.conf文件生效

[root@master01 ~]# sysctl -p
2.8. 关闭swap(全部节点)
[root@master01 ~]# swapoff -a
[root@master01 ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab
2.9. 安装系统性能分析工具和其他(全部节点)
[root@master01 ~]# yum install -y gcc autoconf sysstat
2.10. 开启bridge网桥过滤(全部节点)

[root@master01 ~]# vi /etc/sysctl.d/k8s.conf

编辑文件写入以下几行

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

加载br_netfilter模块,并查看

[root@master01 ~]# modprobe br_netfilter && lsmod | grep br_netfilter

加载配置文件,使其生效

[root@master01 ~]# sysctl -p /etc/sysctl.d/k8s.conf

3. Docker环境准备

3.1. 配置阿里云docker源(全部节点)
[root@master01 ~]# yum install -y yum-utils
[root@master01 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.2. 查看可用的docker版本(全部节点)
[root@master01 ~]# yum list docker-ce.x86_64 --showduplicates | sort -r
3.3. 安装docker,指定安装25.0.5-1.el9版本(全部节点)
[root@master01 ~]# yum -y install docker-ce-25.0.5-1.el9
3.4. 配置Docker Cgroup控制组(全部节点)
[root@master01 ~]# vi /etc/docker/daemon.json    # 编辑文件写入以下行
{
 "exec-opts": ["native.cgroupdriver=systemd"]
}
3.5. 启动Docker服务并设置随机自启(全部节点)
[root@master01 ~]# systemctl enable docker --now

4. 配置cri-docker

4.1. 下载cri-docker
[root@master01 ~]# wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgz
4.2. 解压cri-docker
[root@master01 ~]#tar -xvf cri-dockerd-0.3.9.amd64.tgz --strip-components=1 -C /usr/local/bin/
4.3. 下载cri-docker service文件
[root@master01 ~]# wget -O /etc/systemd/system/cri-docker.service https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service
[root@master01 ~]# wget -O /etc/systemd/system/cri-docker.socket https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket
4.4. 编辑cri-docker.server

修改ExecStart行内容为

ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --cri-dockerd-root-directory=/var/lib/docker
4.5. 编辑cri-docker.socket

修改ListenStream行内容为

ListenStream=/var/run/cri-dockerd.sock
4.6. 复制cri-dockerd-0.3.9.amd64.tgz到其他节点
[root@master01 ~]# scp cri-dockerd-0.3.9.amd64.tgz root@192.168.204.111:/root/
[root@master01 ~]# scp cri-dockerd-0.3.9.amd64.tgz root@192.168.204.112:/root/
4.7. 节点解压cri-docker
[root@node01 ~]# tar -xvf cri-dockerd-0.3.9.amd64.tgz --strip-components=1 -C /usr/local/bin/
[root@node02 ~]# tar -xvf cri-dockerd-0.3.9.amd64.tgz --strip-components=1 -C /usr/local/bin/
4.8. 复制修改好的service文件到其他节点
[root@master01 ~]# scp /etc/systemd/system/cri-docker.s* root@192.168.204.111:/etc/systemd/system/
[root@master01 ~]# scp /etc/systemd/system/cri-docker.s* root@192.168.204.112:/etc/systemd/system/
4.9. 启动并设置自启动
[root@master01 ~]# systemctl daemon-reload
[root@master01 ~]# systemctl enable cri-docker.service --now

5. kubeadm部署kubernetes集群

5.1. 配置阿里云k8s源(全部节点)

编辑文件/etc/yum.repos.d/k8s.repo

[root@master01 ~]# vi /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
5.2. 安装集群所需软件包kubelet kubeadm kubectl(全部节点)
[root@master01 ~]# yum install -y kubelet kubeadm kubectl
5.3. 配置k8s Cgoup控制组(全部节点)
[root@master01 ~]# vi /etc/sysconfig/kubelet

打开文件写入以下行

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
5.4. 配置kubelet自启动(全部节点)
[root@master01 ~]# systemctl enable kubelet.service
5.5. 初始化集群(master节点运行)

5.5.1. 打印master节点所需的镜像文件(master节点运行)

[root@master01 ~]# kubeadm config images list

5.5.2. 打印集群初始化配置文件(master节点运行)

主机名ot@master01 ~]# kubeadm config print init-defaults > kubeadm-config.yaml

5.5.3. 修改参数(master节点)

[root@master01 ~]# vi kubeadm-config.yaml
…
localAPIEndpoint:
 advertiseAddress: 192.168.204.110 #修改,集群初始化的主节点IP
 bindPort: 6443
nodeRegistration:
 criSocket: unix:///var/run/cri-dockerd.sock #修改使用docker
 imagePullPolicy: IfNotPresent
 name: master01  #修改节点名称
 taints: null
…
…
…
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #修改使用阿里云镜像仓库
…
…

注意:修改以上标记的位置即可

5.5.4. 使用配置文件初始化(master节点运行)

[root@master01 ~]# kubeadm init --config kubeadm-config.yaml --upload-certs

--upload-certs参数是将集群密钥添加到etcd数据库

5.5.5. 配置环境变量(master节点运行)

根据初始化完成提示运行下面行

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

5.5.6. 工作节点加入集群(工作节点运行)

根据初始化完成提示将工作节点添加入集群

kubeadm join 192.168.204.110:6443 --token abcdef.0123456789abcdef  --discovery-token-ca-cert-hash sha256:fedc160482922f0c5c4077121fb45ed13ca9e169f937628eda2cbfcbba99015e --cri-socket=unix:///var/run/cri-dockerd.sock

注意:--cri-socket=unix:///var/run/cri-dockerd.sock参数是指定使用docker作为容器管理引擎。

5.6. 下载calico文件(master节点运行)

Calico是为集群中的 Pod 提供网络功能。

[root@master01 ~]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml
5.7. 创建calico网络(master节点运行)
[root@master01 ~]# kubectl apply -f calico.yaml
5.8. 查看集群各节点状态
[root@master01 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane 16h v1.28.10
node01 Ready <none> 16h v1.28.10
node02 Ready <none> 16h v1.28.10
5.9. 查看k8s集群的各组件
[root@master01 ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-9d57d8f49-dkkkn 1/1 Running 1 (15h ago) 16h
calico-node-jllq5 1/1 Running 1 (15h ago) 16h
calico-node-q8fhr 1/1 Running 1 (15h ago) 16h
calico-node-tbdqk 1/1 Running 1 (15h ago) 16h
coredns-6554b8b87f-55k4c 1/1 Running 1 (15h ago) 16h
coredns-6554b8b87f-c6hrv 1/1 Running 1 (15h ago) 16h
etcd-master01 1/1 Running 1 (15h ago) 16h
kube-apiserver-master01 1/1 Running 1 (15h ago) 16h
kube-controller-manager-master01 1/1 Running 1 (15h ago) 16h
kube-proxy-7xl56 1/1 Running 1 (15h ago) 16h
kube-proxy-9x4dp 1/1 Running 1 (15h ago) 16h
kube-proxy-trgk8 1/1 Running 1 (15h ago) 16h
kube-scheduler-master01 1/1 Running 1 (15h ago) 16h

6. 安装ingress-nginx(不用域名访问可不装)

由于镜像拉不下来我就取消部署了,本来想时候手动导入镜像的。后来觉得不是用这个直接用IP访问也可以。就没有部署ingress-nginx。

6.1. 下载ingress-nginx部署文件
[root@master01 ~]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml
6.2. 部署ingress-nginx到k8s集群上
[root@master01 ~]# kubectl apply -f deploy.yaml

完成! 

思维导图:

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

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

相关文章

ELK日志收集之ES的DSL查询语句

一、简介 在Elasticsearch中&#xff0c;我们可以使用Elasticsearch-DSL(Elasticsearch Domain Specific Language)来构建和执行复杂的搜索查询。官方Query DSL指导文档。 叶查询&#xff1a;在特定字段中寻找特定值,例如 match ,term 或 range。 复合查询&#xff1a;具有查询…

【进阶OpenCV】 (5)--指纹验证

文章目录 指纹验证1. 验证原理2. 读取图片3. 计算特征匹配点 总结 指纹验证 指纹验证基于人类指纹的独特性和稳定性。每个人的指纹在图案、断点和交叉点上各不相同&#xff0c;这种唯一性和终生不变性使得指纹成为身份验证的可靠手段。指纹识别技术通过采集和分析指纹图像&…

39 C 语言枚举类型、枚举常量、枚举变量、枚举的遍历、枚举数组、枚举与 switch

目录 1 什么是枚举 2 定义枚举类型 2.1 语法格式 2.2 枚举元素的特点 2.3 案例演示 3 枚举变量 3.1 什么是枚举变量 3.2 定义枚举变量的多种方式 3.3 案例演示 1&#xff1a;标准版枚举类型 3.4 案例演示 2&#xff1a;简化版枚举类型 3.5 案例演示 3&#xff1a;匿…

【教学类-77-01】20241005青花瓷立体书

背景需求&#xff1a; 今天翻到小红书上一个青花瓷立体书 &#x1f1ed;&#x1f1f0;香港免费展览&#xff5c;青花瓷立体纸艺观展册&#x1f4d6; - 小红书 (xiaohongshu.com)https://www.xiaohongshu.com/discovery/item/6426a8fb000000001303653e?app_platformandroid&a…

买卖股票大合集

刷题刷题往死里刷。 121. 买卖股票的最佳时机 链接 121. 买卖股票的最佳时机 思路&#xff1a; 二次做所以有思路了&#xff0c; 从头遍历数组&#xff0c;维持一个最小值&#xff0c;且遇到一个值就计算差值&#xff0c;且维护这个最大值为答案。 class Solution {public …

文心智能体——制作你的专属AI

随着社会的进步和互联网技术的发展&#xff0c;人工智能领域正蓬勃发展。最近几年关于人工智能的新闻日渐增多并且成为了当代最大的热点&#xff0c;所有的领域都在引进AI、训练AI、使用AI&#xff0c;AI正逐步融入人们的生活。从前几年chatGPT大语言模型的横空出世&#xff0c…

【CSDN入门级教程】

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Linux进程调度和进程切换

并行&#xff08;Parallel&#xff09; 含义&#xff1a;并行是指多个任务在同一时刻同时执行。 硬件要求&#xff1a;需要多个处理器&#xff08;如多核CPU&#xff09;或者多台计算设备来实现&#xff0c;这些执行单元能够真正地同时处理不同的任务。例如&#xff0c;一个具…

vite学习教程05、vite+vue2构建本地 SVG 图标

文章目录 前言一、构建本地SVG图标详细步骤1、安装开发依赖2、配置vite2.1、配置vite.config.js2.2、封装vite引入插件脚本 解决报错&#xff1a;can not find package fast-glob imported 二、实际应用应用1&#xff1a;未封装&#xff0c;直接vue应用应用2&#xff1a;封装vu…

Self-Operating Computer:基于PyAutoGui加AI实现无人“驾驶“电脑,让Python带你走近未来世界

近年来&#xff0c;AI 领域不断取得突破&#xff0c;特别是多模态模型的出现&#xff0c;为计算机无人操控带来了全新的可能性。 想象一下&#xff0c;你的电脑不再需要你手动操作&#xff0c;而是可以像人一样&#xff0c;理解你的指令&#xff0c;并自动执行一系列鼠标键盘操…

【word脚注】双栏设置word脚注,脚注仅位于左栏,右栏不留白

【word脚注】双栏设置word脚注&#xff0c;脚注仅位于左栏&#xff0c;右栏不留白 调整前效果解决方法调整后效果参考文献 调整前效果 调整前&#xff1a;脚注位于左下角&#xff0c;但右栏与左栏内容对其&#xff0c;未填充右下角的空白区域 解决方法 备份源文件复制脚注内…

MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)

目录 一、前言二、聚合查询2.1 聚合函数2.1.1 COUNT():统计所有行2.1.2 SUM(列名) 求和2.1.3 AVG()2.1.4 MAX()、MIN() 2.2 GROUP BY子句&#xff08;分组查询&#xff09;2.3 HAVING 三、联合查询3.1表的笛卡儿积3.2内连接3.2.1 例题一3.2.2 例题二 3.3外连接3.3.1 右外连接3.…

【每天学个新注解】Day 16 Lombok注解简解(十五)—@FieldNameConstants

FieldNameConstants 根据属性名生成常量类的常量。 1、如何使用 加在需要根据属性名生成常量的属性上。 2、代码示例 例&#xff1a; FieldNameConstants public class Test {private String iAmAField;private int andSoAmI;FieldNameConstants.Exclude private int asA…

Microsoft AI部门的CEO额备忘录

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

kafka-windows集群部署

kafka-windows集群部署目录 文章目录 kafka-windows集群部署目录前言一、复制出来四个kafka文件夹二、修改集群每个kafka的配置文件四、启动zookeeper&#xff0c;kafka集群 前言 部署本文步骤可以先阅读这一篇博客&#xff0c;这篇是关于单机kafka部署测试的。本文用到的文件…

VUE2常见问题以及解决方案汇总(不断更新中)

解决vue项目中 el-table 的 row-click 事件与行内点击事件冲突&#xff0c;点击事件不生效&#xff08;表格行点击事件和行内元素点击事件冲突&#xff09;需要阻止事件冒泡 问题描述 1.点击列的编辑按钮&#xff0c;会触发按钮本身事件&#xff0c;同时会触发行点击事件 2.点…

自用Proteus(8.15)常用元器件图示和功能介绍(持续更新...)

文章目录 一、 前言二、新建工程&#xff08;以51单片机流水灯为例&#xff09;2.1 打开软件2.2 建立新工程2.3 创建原理图2.4 不创建PCB布版设计2.5 创建成功2.6 添加元器件2.7 原理图放置完成2.8 编写程序&#xff0c;进行仿真2.9 仿真 三、常用元器件图示和功能介绍3.1 元件…

春秋云镜靶场之CVE-2022-28525

1.环境搭建 我们开启环境 可以看到题目提示我们是文件上传漏洞&#xff0c;那么我们就进行测试 2.开启环境 我们开启环境&#xff0c;可以看到是一个登录页面&#xff0c;登录页面:一种是弱口令&#xff0c;一种是自己进行注册&#xff0c;一种是SQL注入&#xff0c;一种是在…

【rCore OS 开源操作系统】Rust 异常处理

【rCore OS 开源操作系统】Rust 异常处理 前言 虽然人还在旅游ing&#xff0c;但是学习不能停止&#xff0c;所以还是写点博客记录下。 对于 Rust 的异常处理&#xff0c;我的感受是&#xff1a;晦涩难懂&#xff0c;繁琐难记。 但是没办法&#xff0c;正如一位故人所说的&…

算法 | 位运算(哈希思想)

位运算 &与两个位都为1时&#xff0c;结果才为1&#xff08;有0为0&#xff09;|或两个位都为0时&#xff0c;结果才为0&#xff08;有1为1&#xff09;^异或两个位相同为0&#xff0c;相异为1~取反0变1&#xff0c;1变0<<左移各二进位全部左移若干位&#xff0c;高…