【云原生】kubernetes最新版本1.30.2,集群搭建部署全方位攻略

news2025/1/16 15:56:34

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:云原生K8S,零基础到进阶实战
景天的主页:景天科技苑

文章目录

  • kubeadm安装k8s-1.30版本
    • 1.1、初始化安装k8s集群的实验环境
      • 1.1.1 修改机器IP,变成静态IP
      • 1.1.2 关闭selinux,所有k8s机器均操作
      • 1.1.3 配置机器主机名
      • 1.1.4 配置主机hosts文件,相互之间通过主机名互相访问
      • 1.1.5 配置主机之间无密码登录
      • 1.1.6 关闭交换分区swap,提升性能
      • 1.1.7 修改机器内核参数
      • 1.1.8 关闭firewalld防火墙
      • 1.1.9 配置阿里云的repo源
      • 1.1.10 配置时间同步
    • 1.2、安装containerd服务
      • 1.2.1 安装containerd
    • 1.3、安装初始化k8s需要的软件包
    • 1.4、kubeadm初始化k8s集群
    • 1.5、扩容k8s集群-添加作节点
    • 1.6、安装kubernetes网络组件-Calico

大家好,我是景天,前不久本专栏的博客中我更新了K8S集群的二进制部署和kubeadm两种方式的部署方式。
后来有小伙伴咨询说之前的K8S用的是docker,k8s 1.24版本之后采用的是containerd作为容器运行时,问啥时候更新一下基于containerd的k8s集群搭建方式的教程,这不,今天就来了。
目前k8s最新版本1.30.2集群搭建部署,保姆级教程,一文搞定搭建过程中的所有疑难杂症。

kubeadm安装k8s-1.30版本

k8s环境规划
物理机网段:10.10.0.0/24
Pod网段: 172.16.0.0/12
Service网段: 192.168.0.0/16

实验环境规划
操作系统:centos7.9或者rockylinux8.9
配置: 4Gib内存/4vCPU/60G硬盘
网络:NAT模式,用NAT模式可以确保机器在任何网络都能通过xshell连上去。

集群角色    ip             主机名          安装组件
控制节点    10.10.0.10     master01        apiserver、controller-manager、scheduler、etcd、docker、kube-proxy、容器运行时、calico、kubelet

工作节点    10.10.0.11     node01           Kube-proxy、calico、coredns、容器运行时、kubelet
工作节点    10.10.0.18     node02           Kube-proxy、calico、coredns、容器运行时、kubelet

1.1、初始化安装k8s集群的实验环境

在每台机器安装基础软件包,为了实验中用,提前安装即可:

yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack telnet ipvsadm

上述命令解释如下:
1.device-mapper-persistent-data:设备映射器持久数据,用于设备映射器的持久化存储。
2.lvm2:逻辑卷管理器,用于管理逻辑卷。
3.wget:用于从网络下载文件的命令行工具。
4.net-tools:包含了一系列网络工具,如ifconfig和netstat,用于配置和管理网络。
5.nfs-utils:NFS(Network File System)工具,用于搭建和管理NFS网络文件系统。
6.lrzsz:提供了用于在UNIX系统和计算机终端之间传输文件的工具。
7.gcc:GNU编译器集合,用于编译C语言和C++程序。
8.gcc-c++:GNU编译器集合的C++编译器。
9.make:用于自动化编译和安装程序的工具。
10.cmake:用于跨平台软件构建的工具。
11.libxml2-devel:libxml2的开发库,用于开发基于XML的应用程序。
12.openssl-devel:OpenSSL的开发库,用于在应用程序中使用加密和安全功能。
13.curl:用于从命令行或脚本中进行URL数据传输的工具。
14.curl-devel:libcurl的开发库,用于在应用程序中使用libcurl进行URL数据传输。
15.unzip:用于解压缩ZIP文件的命令行工具。
16.sudo:用于以其他用户的身份执行命令的工具,通常用于提升权限。
17.ntp:网络时间协议客户端,用于同步系统时钟。
18.libaio-devel:异步I/O(AIO)的开发库,用于开发异步I/O应用程序。
19.vim:文本编辑器,通常用于在命令行中编辑文本文件。
20.ncurses-devel:ncurses的开发库,用于在文本终端上显示复杂的图形界面。
21.autoconf:用于自动配置软件包的工具。
22.automake:用于自动生成Makefile文件的工具。
23.zlib-devel:zlib的开发库,用于在应用程序中进行数据压缩和解压缩。
24.python-devel:Python的开发库,用于在应用程序中使用Python编程语言。
25.epel-release:Extra Packages for Enterprise Linux (EPEL)软件源的发布包,用于安装额外的软件包。
26.openssh-server:OpenSSH服务器,用于远程访问和管理服务器。
27.socat:多功能的网络工具,用于在不同类型的网络连接之间传输数据。
28.ipvsadm:IPVS管理工具,用于配置Linux内核中的IPVS(IP Virtual Server)负载均衡。
29.conntrack:用于查看和管理Linux内核连接跟踪表的工具。
30.telnet:用于通过Telnet协议连接到远程主机的工具。

1.1.1 修改机器IP,变成静态IP

如果是Centos7.9操作系统,按照如下方式修改:

[root@master01 ~ ]#vim /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="8b354e37-4cf0-4e2a-9e56-8348bd232b25"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="10.10.0.10"
PREFIX="24"
GATEWAY="10.10.0.1"
DNS1="223.5.5.5"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY="no"

修改配置文件之后需要重启网络服务才能使配置生效,重启网络服务命令如下:

systemctl restart network.service

1.1.2 关闭selinux,所有k8s机器均操作

为什么要关闭selinux?
SELinux 是 Linux 系统的一种安全机制,可以限制系统资源(如文件、网络等)的访问,提高系统的安全性。在 Kubernetes 运行过程中,需要访问系统资源,但 SELinux 可能会限制访问,从而影响 Kubernetes 的运行。因此,在安装 Kubernetes 时,需要关闭 SELinux,以避免它对 Kubernetes 的影响。

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#备注:修改selinux配置文件之后,重启linux机器,selinux配置才能永久生效,重启之后,登录到机器,执行如下命令:

getenforce

如果显示Disabled说明selinux已经关闭
在这里插入图片描述

1.1.3 配置机器主机名

在10.10.0.10上执行如下:

hostnamectl set-hostname master01 && bash 

在10.10.0.11上执行如下:

hostnamectl set-hostname node01 && bash

在10.10.0.18上执行如下:

hostnamectl set-hostname node02 && bash

1.1.4 配置主机hosts文件,相互之间通过主机名互相访问

修改每台机器的/etc/hosts文件,文件最后增加如下内容:

10.10.0.10  master01
10.10.0.11   node01
10.10.0.18   node02

修改之后的文件如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.10.0.10 master01
10.10.0.11 node01
10.10.0.18 node02

在这里插入图片描述

备注:Linux机器配置主机名的用处:
1.标识主机:主机名是用来标识计算机或网络设备的名称。通过配置主机名,可以使得其他计算机或网络服务更容易地识别和定位该主机。在网络环境中,主机名是在进行网络通信时进行标识的重要信息之一。
2.管理网络服务:一些网络服务和应用程序可能需要知道主机的名称才能正常运行。通过配置主机名,可以确保这些服务能够正确地识别和绑定到正确的主机上。
3.方便管理:在管理多台服务器或设备时,通过为每台设备配置唯一的主机名可以更轻松地进行识别和管理。这在进行系统日志分析、远程管理以及配置文件管理时特别有用。
4.日志记录:主机名通常会出现在系统日志中,以标识生成日志的主机。通过主机名,可以更容易地跟踪和管理日志,特别是在分布式系统中。
5.安全性:在一些情况下,主机名也用于识别访问权限。例如,通过配置防火墙规则或访问控制列表(ACL)时,可以基于主机名来限制对特定主机的访问。

1.1.5 配置主机之间无密码登录

不是必须操作,对安装k8s无直接影响,主要是为了方便相互之前传文件。
配置master01到其他机器免密登录
[root@master01 ~]# ssh-keygen #一路回车,不输入密码
在这里插入图片描述

把本地生成的密钥文件和私钥文件拷贝到远程主机
[root@master01 ~ ]#ssh-copy-id -i .ssh/id_rsa.pub node01
在这里插入图片描述

[root@master01 ~ ]#ssh-copy-id -i .ssh/id_rsa.pub node02
在这里插入图片描述

1.1.6 关闭交换分区swap,提升性能

Swap交换分区是一种在计算机中使用的虚拟内存技术。当物理内存不足以容纳当前运行的程序时,操作系统将会把一部分内存空间暂时转移到硬盘上,以便为当前程序提供运行所需的内存空间。
这个过程就称为交换。交换分区(Swap Partition)就是硬盘上专门预留给操作系统进行交换的一块空间。

交换分区的使用可以有效避免程序因为内存不足而崩溃或运行缓慢的问题,但是硬盘的读写速度比内存要慢得多,因此交换分区的使用会对系统的性能产生一定的影响。

在 Kubernetes 运行过程中,需要频繁地使用内存和磁盘等系统资源。如果使用了交换分区,会导致 Kubernetes 的运行速度变慢,从而影响整个集群的性能。因此,在安装 Kubernetes 时,通常会建议关闭交换分区。
以一个类比的方式来说,就好像开车上高速,如果路况通畅,车速可以很快,但是如果遇到堵车,需要走应急车道,就会耽误时间。交换分区就像是道路上的堵车,会影响系统的运行速度和效率。因此,为了让 Kubernetes 运行更加高效,通常会建议关闭交换分区。

临时关闭

[root@master01 ~]# swapoff -a
[root@node01 ~]# swapoff -a
[root@node02 ~]# swapoff -a

永久关闭:注释swap挂载,给swap这行开头加注释

[root@master01 ~]# vim /etc/fstab   
#/dev/mapper/centos-swap swap      swap    defaults        0 0
[root@node01 ~]# vim /etc/fstab
#/dev/mapper/centos-swap swap      swap    defaults        0 0
[root@node02 ~]# vim /etc/fstab
#/dev/mapper/centos-swap swap      swap    defaults        0 0

1.1.7 修改机器内核参数

每个节点都操作

[root@master01 ~]# modprobe br_netfilter
</

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

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

相关文章

SimGCL graph contrastive learning by finding homophily in heterophily

发表于: Knowledge and Information Systems, ccfb 推荐指数: #paper/ ⭐ 总结: 重新定义了相似度矩阵, 重新定义了特征, 重新设计了节点删除概率等, 但是, 换汤不换药, 引入了大量的超参 (快 10 个了吧). 创新点不够, 所以 ccf B 期刊理所应该. (甚至我觉得更低) 相关知识: 本…

详细教程 MySQL 数据库 下载 安装 连接 环境配置 全面

数据库就是储存和管理数据的仓库&#xff0c;对数据进行增删改查操作&#xff0c;其本质是一个软件。 首先数据有两种&#xff0c;一种是关系型数据库&#xff0c;另一种是非关系型数据库。 关系型数据库是以表的形式来存储数据&#xff0c;表和表之间可以有很多复杂的关系&a…

通俗易懂玩Qt:时间滑动选择器实现(内附主要源码)

时间滑动选择器实现 组件说明&#xff1a; 本组件命名为时间滑动选择器&#xff0c;主要运用于 arm 平台下的触摸屏上&#xff0c;虽然 QT 自带有时间选择组件&#xff0c;但是对触摸屏的使用并不友好&#xff0c;为了提升项目界面的交互性&#xff0c;于是就有了时间滑动选择器…

【深海王国】初中生也能画的电路板?番外1:Arduino其他家族成员的拓展板开发(1)

Hi~ (o^^o)♪, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~ 辛苦工作的你今天也辛苦啦(/≧ω) 今天大都督为大家带来电路板的番外系列——初中生也能画的电路板&#xff1f;番外1&#xff1a;Arduino其他家族成员的拓展板开发&#xff0c;带你给其他Arduino家族成…

数据库漫游记:表、视图、函数、存储过程及触发器之跨平台兼容性分析(上)

先言之 &#x1f31f;余撰此文&#xff0c;乃为导引初窥数据库之学人&#xff0c;俾其明了表、视图、函数、存储过程及触发器之义理&#xff0c;及其于诸般平台之上创建、修改与废弃之法式。盖初学之人&#xff0c;常陷于迷雾之中&#xff0c;难辨东西&#xff0c;故须详述而明…

lombok使用@slf4j 运行时提示找不到符号log(Missing POM for org.projectors:lombok:jar)

1.问题表现 原本是之前搭建好的工程&#xff0c;只是换了个开发环境重新启动就不行了。一直编译不通过&#xff01; 可以看到IDEA其实是引入了依赖的 都没有出现红色波浪线 <mapstruct.version>1.5.5.Final</mapstruct.version> <lombok.version>1.18.30<…

鸿蒙(API 12 Beta2版)NDK开发【JSVM-API使用规范】

JSVM-API使用规范 生命周期管理 【规则】 合理使用OH_JSVM_OpenHandleScope和OH_JSVM_CloseHandleScope管理JSVM_Value的生命周期&#xff0c;做到生命周期最小化&#xff0c;避免发生内存泄漏问题。 每个JSVM_Value属于特定的HandleScope&#xff0c;HandleScope通过OH_JSV…

【Python实战因果推断】71_图因果模型6

目录 Positivity Assumption An Identification Example with Data Confounding Bias Positivity Assumption 调整公式同样强调了正则性&#xff08;positivity&#xff09;的重要性。因为你正在对治疗和结果之间的差异在X的条件下求平均&#xff0c;你必须确保对于所有X的…

【32单片机篇】项目:WIFI天气预报

一、项目需求 使用 ESP8266 通过 HTTP 获取天气数据&#xff08;心知天气&#xff09;&#xff0c;并显示在 OLED 屏幕上。 按键 1 &#xff1a;循环切换今天/明天/后天天气数据&#xff1b; 按键 2 &#xff1a;更新天气 二、项目框图 三、硬件部分 四、项目源码及实现 1.项…

MySQL是怎样运行的——第1章 初识MySQL

文章目录 1. 1 MySQL的客户端/服务器架构1.2 安装MySQL&#xff08;略&#xff09;1.3 启动MySQL服务器程序1.4 启动MySQL客户端程序1.5 客户端与服务器连接的过程1.6 服务器处理客户端请求 1. 1 MySQL的客户端/服务器架构 MySQL的运行过程就是C/S架构。多个客户端程序连接到服…

洛谷 P1868 饥饿的奶牛

原题 题目描述 有一条奶牛冲出了围栏&#xff0c;来到了一处圣地&#xff08;对于奶牛来说&#xff09;&#xff0c;上面用牛语写着一段文字。 现用汉语翻译为&#xff1a; 有 N 个区间&#xff0c;每个区间x,y 表示提供的x∼y 共y−x1 堆优质牧草。你可以选择任意区间但不…

dockerfile定制镜像 docker-compose编排容器

1 dockerfile dockerfile本质上是利用了Linux系统的挂载&#xff08;UnionFS&#xff09;&#xff0c;将多个目录挂载到同一目录下&#xff0c;实现镜像的层叠式结构&#xff0c;从而实现功能聚合。 1.1 一个最简单的程序 package mainimport "fmt"func main() {f…

【leetcode详解】覆盖所有点的最少矩形数目(C++思路详解)

思路详解&#xff1a; 0. 题目情境并未限制矩形高度&#xff0c;故矩形数目的判断只和点的横坐标有关 1. 为了不重不漏地考虑到所有点&#xff0c;故笔者选择首先将二维数组中的点按横坐标的大小排序 //说明&#xff1a;本来笔者以为需要自定义sort排序&#xff0c;后来发现…

智慧水务项目(三)django(drf)+angular 18 创建系统管理的用户、角色、部门、权限管理等model

一、说明 添加各model 添加requirement.txt中的库 添加env.py中的动态配置 二、env.py全文 import os from smartwater.settings import BASE_DIR# # # ************** mysql数据库 配置 ************** # # # # 数据库地址 DATABASE_ENGINE "django.db.backends.…

SQL查询注意事项

判断字符串长度要用函数CHAR_LENGTH(str)&#xff0c;他会返回字符串的长度&#xff0c;如果使用length(str)函数&#xff0c;在对中文字符或特殊字符时&#xff0c;返回的是在当前编码下该字符的字节数。如在mysql中的utf-8编码情况下&#xff0c;length(&#xffe5;)返回结果…

ASUS/华硕幻14 2021 GA401Q系列 原厂win10系统 工厂文件 带F12 ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;一键恢复&#xff0c;以及机器所有驱动软件。 系统版本&#xff1a;windows10 原厂系统下载网址&#xff1a;http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意&#xff1a;仅支持以上型号专用…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-62 - 判断元素是否可操作

软件测试微信群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 有些页面元素的生命周期如同流星一闪&#xff0c;昙花一现。我们也不知道这个元素在没在页面中出现过&#xff0c;为了捕获这一美好瞬间&#xff0c;让其成为永恒。我们就来判…

HiFi桌搭的新选择,更符合发烧友使用习惯的飞傲K19

飞傲的便携设备很多人都用过&#xff0c;性价比很高&#xff0c;设计也很精致&#xff0c;并且功能上针对不同的需求也有丰富的选择&#xff0c;而在针对耳机的台式设备方面&#xff0c;飞傲同样非常有实力&#xff0c;我最近用了一款飞傲K19&#xff0c;这台设备不仅功能完备&…

ZYNQ SDK/Vitis undefined reference to `sin‘ wave.c

问题 ZYNQ SDK或者VItis在使用到sin函数时编译报错&#xff1a; undefined reference to sin wave.c问题解决&#xff1a; 右键点开C/C Build Settings 选项 在Settings 选项的Libraries 添加 m&#xff0c;点击OK