kubuadm 方式部署 k8s 集群

  • 准备三台机器
主机名IP地址CPU/内存角色K8S版本Docker版本
k8s231192.168.99.2312C4Gmaster1.23.1720.10.24
k8s232192.168.99.2322C4Gwoker1.23.1720.10.24
k8s233192.168.99.2332C4Gwoker1.23.1720.10.24

  • 需要在K8S集群各节点上面安装docker,如未安装则参考        二进制部署 docker_docker 二进制包-CSDN博客

               yum 方式部署 docker_配置docker的yum源-CSDN博客

  • Harbor仓库如果不需要可以不装,如果需要则参考(可选安装)

        基于 HTTP 协议部署 harbor 仓库-CSDN博客

        基于 HTTPS 方式部署 harbor 仓库-CSDN博客

  • 由于K8S与docker的爱恨情仇,1.23版本与1.24版本之后发生了巨大变化,就是1.24版本之后就不需要单独安装docker,而是需要安装containerd,但我又习惯使用docker,这次我就部署 1.23.17 版本

1. 各节点环境准备

1. 1 关闭 swap 分区

#临时关闭
swapoff -a && sysctl -w vm.swappiness=0
#基于配置文件永久关闭
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

1.2 确保各个节点MAC地址或Product_uuid唯一

ifconfig  eth0  | grep ether | awk '{print $2}'
cat /sys/class/dmi/id/product_uuid 

温馨提示:

        一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。

        Kubernetes使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装失败。

1.3 检查网络节点是否互通

        检查K8S集群各个节点是否互通,可以使用 ping 命令来测试

1.4 所有节点修改Linux内核参数调优

cat > /etc/sysctl.d/k8s.conf <<'EOF'
#允许 Linux 系统作为路由器转发 IPv4 数据包。当设置为 1 时,表示启用 IP 数据包转发功能。
net.ipv4.ip_forward = 1

#启用桥接设备在通过 iptables 进行网络过滤时的调用。
net.bridge.bridge-nf-call-iptables = 1

#启用桥接设备在通过 ip6tables 进行 IPv6 网络过滤时的调用。
net.bridge.bridge-nf-call-ip6tables = 1

#允许 Linux 在不重新引起操作的情况下卸载正在使用的挂载点。
fs.may_detach_mounts = 1

#设置内存过量分配策略。当设置为 1 时,Linux 将允许分配超过物理内存总量的虚拟内存。
vm.overcommit_memory=1

#当内存耗尽(OOM,Out-Of-Memory)时,是否触发内核崩溃。设置为 0 表示禁用这个行为。
vm.panic_on_oom=0

#设置用户可以监视的文件数量的最大值,对于文件系统监视服务很重要,比如 inotify。
fs.inotify.max_user_watches=89100

#设置系统中打开的文件描述符的最大数量。
fs.file-max=52706963

#设置系统中打开文件描述符的最大数量,和 fs.file-max 有类似的作用。
fs.nr_open=52706963

#设置连接跟踪表的最大条目数量,用于管理网络连接状态。
net.netfilter.nf_conntrack_max=2310720

#设置 TCP keepalive 超时时间(单位:秒),用于检测空闲连接是否仍然可用。
net.ipv4.tcp_keepalive_time = 600

#在认定连接失效之前,发送多少个 TCP keepalive 探测包。
net.ipv4.tcp_keepalive_probes = 3

#两次 TCP keepalive 探测之间的时间间隔(单位:秒)。
net.ipv4.tcp_keepalive_intvl =15

#设置 TIME-WAIT 状态的最大连接数。
net.ipv4.tcp_max_tw_buckets = 36000

#允许重新使用 TIME-WAIT 状态的 TCP 连接。
net.ipv4.tcp_tw_reuse = 1

#允许系统保持的最大无主 TCP 连接数。
net.ipv4.tcp_max_orphans = 327680

#设置在关闭套接字时内核应该进行多少次重试。
net.ipv4.tcp_orphan_retries = 3

#启用 TCP SYN cookies,用于防范 SYN 攻击。
net.ipv4.tcp_syncookies = 1

#设置 TCP SYN 队列的最大长度。
net.ipv4.tcp_max_syn_backlog = 16384

#设置 IPv4 连接跟踪表的最大条目数量。
net.ipv4.ip_conntrack_max = 65536

#控制着系统允许的未完成的 TCP 握手队列的最大长度
net.ipv4.tcp_max_syn_backlog = 16384

#禁用 TCP 时间戳,可能用于防范某些攻击。
net.ipv4.tcp_timestamps = 0

#设置系统级别的最大并发连接数,影响 TCP 和 UDP 套接字的 listen 函数的 backlog 参数的默认值。
net.core.somaxconn = 16384
EOF

1.5 加载文件

sysctl --system

1.6 配置主机解析

cat >> /etc/hosts <<EOF
192.168.99.250 linux250
192.168.99.251 linux251
192.168.99.252 linux252
EOF

1.7 禁用防火墙,网络管理,邮箱

systemctl disable  --now firewalld NetworkManager postfix

1.8 禁用SELinux

sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config 
grep ^SELINUX= /etc/selinux/config

1.9 修改cgroup的管理进程systemd

阿里云镜像加速

harbor私有仓库解析

修改cgroup的管理进程systemd

cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://0pcinxc2.mirror.aliyuncs.com"],
"insecure-registries": ["harbor253.bihuang.com","192.168.99.253"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

#重启docker
systemctl restart docker

#查看是否修改
[root@linux250 ~]# docker info | grep "Cgroup"
 Cgroup Driver: systemd
 Cgroup Version: 1

温馨提示:

        如果不修改cgroup的管理驱动为systemd,则默认值为cgroupfs,在初始化 master 节点时会失败

2. 所有节点安装 kubeadm,kubelet,kubectl

2.1 安装包概述

你需要在每台机器上安装以下的软件包:

        kubeadm:

                用来初始化集群的指令。

        kubelet:

                在集群中的每个节点上用来启动Pod和容器等。

        kubectl:

                用来与集群通信的命令行工具。

        kubeadm不能帮你安装或者管理kubelet或kubectl,所以你需要确保它们与通过kubeadm安装的控制平面(master)的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。

        然而,控制平面与kubelet间的相差一个次要版本不一致是支持的,但kubelet的版本不可以超过"API SERVER"的版本。 例如,1.7.0版本的kubelet可以完全兼容1.8.0版本的"API SERVER",反之则不可以。

2.2 配置软件源

cat  > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF

2.3 查看 kubeadm 的版本

yum -y list kubeadm --showduplicates | sort -r

2.4 安装 kubeadm,kubelet,kubectl软件包(可联网直接安装)

yum -y install kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0

        如果没有办法联网的话,可以找一台能联网的机器,将 yum 安装保存rpm包功能打开,然后安装好之后,将rpm打包,再发送到各个节点,如下:

2.4.1 打开 yum 保存 rpm 包

[root@k8s233 ~]# cat /etc/yum.conf 
[main]
#rpm包存储目录
cachedir=/var/cache/yum/$basearch/$releasever
#值为1为开启rpm包保存,为0则关闭
keepcache=1
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

2.4.2 安装 kubeadm,kubelet,kubectl

yum -y install kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0

2.4.3 打包保存的rpm包

mkdir kubeadm--kubelet-kubectl/
find /var/cache/yum -name "*.rpm" | xargs mv -t kubeadm--kubelet-kubectl/
tar zcf bihuang-kubeadm--kubelet-kubectl.tar.gz

2.4.4 发送到其他节点

scp bihuang-kubeadm--kubelet-kubectl.tar.gz root@linux251:~
scp bihuang-kubeadm--kubelet-kubectl.tar.gz root@linux252:~

2.4.5 各个节点解压并安装

tar xf bihuang-kubeadm--kubelet-kubectl.tar.gz
yum -y localinstall kubeadm--kubelet-kubectl/*.rpm

2.5 启动kubelet服务(若服务启动失败时正常现象,其会自动重启,因为缺失配置文件,初始化集群后恢复!)

systemctl enable --now kubelet
systemctl status kubelet

3. 初始化 Master 节点

3.1 使用kubeadm 初始化 master

kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=172.100.0.0/16 --service-cidr=172.200.0.0/16 --service-dns-domain=bihuang.com

#相关参数说明
​    --kubernetes-version:

​       指定K8S master组件的版本号。

​       

​    --image-repository:

​       指定下载k8s master组件的镜像仓库地址。

​       

​    --pod-network-cidr:

​       指定Pod的网段地址。

​       

​    --service-cidr:

​       指定SVC的网段

 

​    --service-dns-domain:

​       指定service的域名。若不指定,默认为"cluster.local"。

3.2 如果集群初始化失败可以重置

kubeadm reset –f

3.3 拷贝授权文件用于管理 K8S 集群

这个命令看你初始化完成之后反馈的内容如图,不要复制我的

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

3.4 查看集群节点

kubectl get cs


#scheduler 状态OK
#controller-manager 状态 OK
#etcd-0 状态OK

#APIserver 状态OK
		因为kubectl get cs 命令是发送给 API server 的能够查询出来说明API server 正常

4. 添加worker nodes 节点到集群

master 初始化完成之后会有返回信息,如图:

        将这个命令在其他 worker node 节点上执行一下即可

注意:每次部署的时候这个命令都不一样

4.1 查看添加前集群 nodes 节点

kubectl get nodes

4.2 查看添加后当前集群 nodes 节点

kubectl get nodes

5. 部署 Flannel 组件

5.1 查看现有的网络插件

一般常用的两种网络插件:

        Calico:可实现网络策略,适用于需要网络策略的特殊场景

        Flannel:支持更多的网络协议

需要哪个组件直接点击哪个组件即可,这里下载的是 Flannel

安装扩展(Addon) | Kubernetes

5.2 下载 Flannel 资源清单文件

如图:

        使用master 节点在初始化的时候,使用的是默认的网段(10.244.0.0/16)则直接执行图中的命令即可。

        如果没有使用默认的,而是单独指定了网段则需要将 kube-flannel.yml 下载下来稍作修改。也就是 --pod-network-cidr=172.100.0.0/16 这个参数

5.3 下载 kube-flannel.yaml 文件

wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

5.4 修改 kube-flannel.yaml 文件

1.#查看 当前使用的网段
grep "\"Network\"" kube-flannel.yml

2.#将默认网段修改为 master 初始化指定的网段 172.100
[root@k8s231 ~]# sed -ri '/\"Network\"/s#10.244#172.100#' kube-flannel.yml

3.#查看是否修改成功
[root@k8s231 ~]# grep "\"Network\"" kube-flannel.yml 
      "Network": "172.100.0.0/16",

5.5 部署 flannel 组件

#在配置文件目录运行
kubectl apply -f kube-flannel.yml

5.6 查看 flannel 组件是否正常运行

kubectl get pods -A -o wide | grep flannel

 

5.7 查看各节点是否正常

[root@k8s231 ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE    VERSION
k8s231   Ready    control-plane,master   106m   v1.23.17
k8s232   Ready    <none>                 98m    v1.23.17
k8s233   Ready    <none>                 98m    v1.23.17

都为 Ready 状态则为正常

部署 flannel 之前的状态,都为 NotReady

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探究互联网领域知识,解密数字化时代神秘面纱

随着信息时代的不断发展&#xff0c;互联网的发展呈现出爆炸式的增长&#xff0c;以至于引起广泛的关注和深入的探究。互联网作为一个庞大的网络体系&#xff0c;涵盖着无穷无尽的信息和知识&#xff0c;其背后的科技和应用已经改变了人们的生活&#xff0c;产生了翻天覆地的变…

使用java代码实现GUI画面的简易项目操作

要使用Java创建一个图形用户界面&#xff08;GUI&#xff09;&#xff0c;我们可以使用Swing库&#xff0c;它是Java提供的一个标准GUI工具包。以下是一个简单的Java Swing程序示例&#xff0c;它创建了一个窗口&#xff08;JFrame&#xff09;&#xff0c;并在其中添加了一个标…

Ubuntu系统,实现FastDDS的源码编译

目录 一、Ubuntu系统介绍二、FastDDS是什么三、FastDDS的源码编译四、FastDDS的简单测试 一、Ubuntu系统介绍 Ubuntu是一个基于Linux的开源操作系统&#xff0c;由Canonical公司开发和维护。它以其易用性、稳定性和安全性而受到广泛赞誉。Ubuntu系统提供了一个图形化的桌面环境…

深入解析链表:解锁数据结构核心奥秘

一. 链表的定义 链表是一种线性数据结构&#xff0c;由一系列节点组成。每个节点包含两个部分&#xff1a; 数据域&#xff08;Data&#xff09;&#xff1a;存储节点的数据。指针域&#xff08;Pointer&#xff09;&#xff1a;存储指向下一个节点的地址。 链表的第一个节点…

微信小程序开发_准备工作

1 注册小程序 注册地址 https://mp.weixin.qq.com/wxopen/waregister?actionstep1&sourcempregister&token&langzh_CN 2 完善小程序信息 进入微信公众平台https://mp.weixin.qq.com/,登录账号 登录后,在首页完善小程序信息和小程序类目 完成后在左侧找到开发…

权威认可 | Smartbi连续5年入选“Gartner增强数据分析代表厂商”

近日&#xff0c;全球权威技术研究与咨询公司Gartner最新发布《2024 年中国数据、分析和人工智能技术成熟度曲线》&#xff0c;Smartbi以其卓越的增强数据分析及自助分析能力&#xff0c;再次入选代表厂商&#xff0c;这也是Smartbi连续5年入选增强数据分析及自助分析代表厂商&…

优选算法2

五、位运算 常见位运算总结 &&#xff1a;有0就是0&#xff1b; |&#xff1a;有1就是1 ^&#xff1a;相同为0&#xff0c;相异就是1/无进位相加 给定一个数n,确定它的二进制表示中的第x位是0还是1&#xff1a;二进制中权值最小的是第0位&#xff0c;所以int整型是从第0位到…

os实训课程模拟考试(选择题复习)

目录 一、操作系统的基本功能和设计目标 &#xff08;1&#xff09;基础知识 &#xff08;2&#xff09;题目与答案 1、操作系统是一组 B &#xff08;单选&#xff09; 2、以下哪项不是操作系统关心的主要问题&#xff1f;D &#xff08;单选&#xff09; 3、下列关于…

基于Ansys workbench进行发动机风扇非定常流固耦合计算

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&…

MFC扩展库BCGControlBar Pro v35.0新版亮点 - 工具栏、菜单全新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.0已全新发布了&#xff0c;这个版本改进类Visual Studio 2022的视觉主题、增强对多个…

pytest中的极其重要固件(request)的理解

pytest 是一个非常流行的Python测试框架&#xff0c;它为开发人员提供了丰寴的测试工具和功能。 在pytest中&#xff0c;固件&#xff08;fixture&#xff09;是一种非常核心的概念&#xff0c;用于设置测试前的预条件&#xff0c;清理测试后的环境&#xff0c;或者提供测试过…

vxeTable反转表格

文章目录 前言 前言 如果遇到列为动态值&#xff0c;行相对固定的情况&#xff0c;这种时候就需要用到行列反转&#xff0c;这里我以vxeTable表格为例。 直接上代码 <vxe-gridref"tableRefRight":auto-resize"true":columns"dataColumn":dat…

springboot中使用springboot cache

前言&#xff1a;SpringBoot中使用Cache缓存可以提高对缓存的开发效率 此图片是SpringBootCache常用注解 Springboot Cache中常用注解 第一步&#xff1a;引入依赖 <!--缓存--><dependency><groupId>org.springframework.boot</groupId><artifactId…

【ai】trition:tritonclient yolov4:ubuntu18.04部署python client成功

X:\05_trition_yolov4_clients\01-python server代码在115上,client本想在windows上, 【ai】trition:tritonclient.utils.shared_memory 仅支持linux 看起来要分离。 【ai】tx2 nx:ubuntu18.04 yolov4-triton-tensorrt 成功部署server 运行 client代码远程部署在ubuntu18.0…

分布式锁及其实现与应用场景

分布式锁及其实现与应用场景 分布式锁是一种用于在分布式系统中协调多个进程或线程对共享资源进行访问的机制。它的主要目的是确保在同一时间只有一个进程或线程可以访问特定资源&#xff0c;从而避免数据竞争和不一致问题。分布式锁通常用于集群环境中&#xff0c;例如微服务…

二次封装 el-dialog 实现 全屏和最小化 功能

效果 封装后的组件 <template><el-dialog v-model"dialogVisible" :show-close"false" :fullscreen"fullscreen" draggable overflow><template #header"{ close }"><div><span style"font-weight: b…

Python operator模块这么用,效率杠杠的!

目录 1、基础操作符应用 🐍 1.1 加载operator模块 1.2 使用itemgetter进行排序 1.3 attrgetter与方法调用 2、高级功能探索 🔍 2.1 methodcaller的妙用 2.2 操作符重载与定制 3、结合lambda表达式 ✨ 3.1 lambda与operator模块协同工作 3.2 实战案例分析 4、结合…

nginx架构基本数据结构配置模块请求详解

nginx源码的目录结构&#xff1a; . ├── auto 自动检测系统环境以及编译相关的脚本 │ ├── cc 关于编译器相关的编译选项的检测脚本 │ ├── lib nginx编译所需要的一些库的检测脚本 │ ├── os 与平台相关的一些系统参…

【sqlmap命令学习及测试dvwa_SQL_Injection】

文章目录 1.sqlmap命令及 不同级别探索 能否注入命令option1.1 low等级1.2 Medium等级1. 3 High等级 2. 注入流程2.1 数据库2.2 指定数据库表名2.3 指定表的 字段名2.4 内容2.5 当前用户信息2.6 用户密码2.7 其他 1.sqlmap命令及 不同级别探索 能否注入 命令option sqlmap -u…

石家庄高校大学智能制造实验室数字孪生可视化系统平台项目验收

智能制造作为未来制造业的发展方向&#xff0c;已成为各国竞相发展的重点领域。石家庄高校大学智能制造实验室积极响应国家发展战略&#xff0c;结合自身优势&#xff0c;决定引进数字孪生技术&#xff0c;构建一个集教学、科研、生产于一体的可视化系统平台。 数字孪生可视化…