Kubernetes(k8s)集群安装部署

news2024/11/19 0:47:03

一. 环境说明

名称IP系统配置
主控节点192.168.136.11Rocky9.22核4G
工作节点1192.168.136.12Rocky9.22核4G
工作节点2192.168.136.13Rocky9.22核4G

二. 系统先决条件配置(所有节点)

2.1 关闭防火墙

防火墙可能会导致重复的防火墙规则和破坏kube-proxy,并且Kubernetes 必须启用以下这些必要的端口后才能使 Kubernetes 的各组件相互通信,索性这里直接关闭了。
在这里插入图片描述

# 停止防火墙
systemctl stop firewalld
# 禁用防火墙开机自启
systemctl disable firewalld

2.2 关闭SELinux

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,在进程层面管控文件系统资源的访问的一种安全机制,进程只能访问那些在他的任务中所需要文件。
那为什么要关闭这个很好的功能呢?
SELinux安全机制较复杂,可能会与k8s本身的流量机制冲突,因为k8s本身会在netfilter里设置流量规则.
而且有些时候容器需要访问宿主机器去实现一些功能,比如pod 的网络需要方位宿主文件进行实现。

# 临时关闭SELinux
setenforce 0

# 修改/etc/selinux/config配置文件,将SELINUX设置为disabled
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

2.3 关闭Swap分区

Swap是一种特殊的分区或文件,可以用作内存扩展,当系统内存不足时,将一部分数据从物理内存中移动到Swap分区中,以释放出更多的内存空间。当需要访问被换出的数据时,系统会将其重新从Swap分区加载到物理内存。
那为什么要关闭这个功能呢?
1.在计算集群中,我们通常希望OOM的时候直接杀掉进程,向运维或者作业提交者报错提示,并且执行故障转移,把进程在其他节点上重启起来。而不是用swap续命,导致节点hang住,集群性能大幅下降,并且还得不到报错提示。
2.Swap会导致docker的运行不正常,性能下降,是个bug,但是后来关闭swap就解决了,就变成了通用方案。
3. Kubernetes 云原生的实现目的是将运行实例紧密包装到尽可能接近 100% 。所有的部署、运行环境应该与 CPU 以及内存限定在一个可控的空间内。所以如果调度程序发送一个 Pod 到某一台节点机器,它不应该使用 Swap。如果使用Swap,则其实node的pod使用内存总和可能超过了node的内存,这样其实就达不到资源的严格限制和管理的目的。

#临时关闭swap分区,当前会话生效
swapoff  -a

# 永久关闭swap分区,修改/etc/fstab文件,注释掉有swap的这一行
sed -ri 's/.*swap.*/#&/' /etc/fstab 

2.4 设置主机名

三台机器分别执行

 hostnamectl set-hostname k8s-master
 hostnamectl set-hostname k8s-work1
 hostnamectl set-hostname k8s-work2

2.5 配置hosts文件

cat >> /etc/hosts << EOF
192.168.136.11 k8s-master
192.168.136.12 k8s-work1
192.168.136.13 k8s-work2
EOF

2.6 确保每个节点MAC地址和 product_uuid 的唯一性

你可以使用命令 ip linkifconfig -a 来获取网络接口的 MAC 地址
可以使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验
一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。 Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装失败。

2.7 转发 IPv4 并让 iptables 看到桥接流量

对于插件开发人员以及时常会构建并部署 Kubernetes 的用户而言, 插件可能也需要特定的配置来支持 kube-proxy。 iptables 代理依赖于 iptables,插件可能需要确保 iptables 能够监控容器的网络通信。 例如,如果插件将容器连接到 Linux 网桥,插件必须将 net/bridge/bridge-nf-call-iptables sysctl 参数设置为 1,以确保 iptables 代理正常工作。 如果插件不使用 Linux 网桥,而是使用类似于 Open vSwitch 或者其它一些机制, 它应该确保为代理对容器通信执行正确的路由。
默认情况下,如果未指定 kubelet 网络插件,则使用 noop 插件, 该插件设置 net/bridge/bridge-nf-call-iptables=1,以确保简单的配置 (如带网桥的 Docker)与 iptables 代理正常工作。

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 应用 sysctl 参数而不重新启动
sudo sysctl --system

通过运行以下指令确认 br_netfilter 和 overlay 模块被加载

lsmod | grep br_netfilter
lsmod | grep overlay

通过运行以下指令确认 net.bridge.bridge-nf-call-iptablesnet.bridge.bridge-nf-call-ip6tablesnet.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

2.8 同步时间

如果各机器上时间都没有问题,也没有偏差,则可以跳过该步骤。

# 安装ntp工具
yum install -y ntp

#设置时区
timedatectl set-timezone 'Asia/Shanghai'

# 同步时间
ntpdate ntp1.aliyun.com

三. 安装Docker(所有节点)

3.1 安装yum-utils包,并设置docker存储库

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

在这里插入图片描述

3.2 安装最新版本的Docker Engine和 containerd

sudo yum install docker-ce docker-ce-cli containerd.io

在这里插入图片描述

3.3 启动Docker

sudo systemctl start docker

四. 安装cri-dockerd(所有节点)

Kubernetes 的早期版本仅适用于特定的容器运行时:Docker Engine。 后来,Kubernetes 增加了对使用其他容器运行时的支持。为了实现编排器和许多不同的容器运行时之间交互操作创建了CRI 标准。 Docker Engine 没有实现(CRI)接口,所以Kubernetes 项目创建了特殊代码dockershim来帮助过渡,Dockershim 代码一直是一个临时解决方案(因此得名:shim)。 Kubernetes自v1.24移除了对Dockershim 的支持,而Docker Engine默认又不支持CRI规范,因而二者将无法直接完成整合。为此,Mirantis和Docker联合创建了cri-dockerd项目,用于为Docker Engine提供一个能够支持到CRI规范的垫片,从而能够让Kubernetes基于CRI控制Docker 。

https://github.com/Mirantis/cri-dockerd/releases


#下载对应版本的cri-dockerd rpm包,注意版本和linux版本,也可以自行下载上传至所有主机
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el8.x86_64.rpm

#安装
rpm -ivh cri-dockerd-0.3.2-3.el8.x86_64.rpm

#重新加载systemctl
systemctl daemon-reload

#启动cri-docker
systemctl start cri-docker.service

#设置cri-docker开机自启
systemctl enable cri-docker.service

Rokcy系统可能出现libcgroup依赖的问题,解决办法如下

wget https://mirror.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/libcgroup-0.41-21.el7.x86_64.rpm
rpm -ivh libcgroup-0.41-21.el7.x86_64.rpm

五. 安装Kubeadm Kubectl Kubelet (所有节点)

Kubeadm 是一个快捷搭建kubernetes(k8s)的安装工具,它提供了kubeadm init 以及 kubeadm join这两个命令来快速创建kubernetes集群。kubeadm 通过执行必要的操作来启动和运行最小可用集群。 按照设计,它只关注启动引导,而非配置机器。

Kubectl 是 Kubernetes 命令行工具 , 让你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。

Kubelet 是 kubernetes 工作节点上的一个代理组件,运行在每个节点上。

设置yum源

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装 kubeadm、kubelet、kubectl

sudo yum install -y kubelet kubeadm kubectl 

kubeadm将使用kubelet服务以容器方式部署kubernetes的主要服务 所以先启动kubelet服务

systemctl start kubelet
systemctl enable kubelet 

六.

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

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

相关文章

如何编写一个测试方案?---她是这样做的!

1、背景 工作上的项目规范要求&#xff1a;测试排期大于3D的项目要编写测试方案。调研了部分同学的情况&#xff0c;在此流程规范要求的基础上&#xff0c;对于需求的逻辑复杂或技术实现复杂等情况也会准备测试方案。 我个人主要负责OMS系统测试&#xff0c;它是整个履约流转中…

HTTPS的加密技术——中间人攻击

HTTPS的加密技术 文章目录 HTTPS的加密技术认识HTTPS对称加密和非对称加密①只使用对称加密方式②只使用非对称加密③两种加密算法联合使用&#x1f9db;‍♂️中间人攻击&#x1f4d6;引入证书总结https加密技术&#x1f431;‍&#x1f464; http和 https之间相差一个字母&a…

基于springboot+mybatis-plus+mysql+vue在线考试系统

基于springbootMybatis-plusmysqlvue在线考试系统 一、系统介绍1.系统主要功能&#xff1a;2.涉及技术框架&#xff1a;3.本项目所用环境&#xff1a; 二、功能展示三、其它系统四、获取源码 一、系统介绍 1.系统主要功能&#xff1a; 权限控制 本系统存在三个不同的角色&…

Linux 提权前信息搜集

linux前期提权也是要信息搜集 linux信息搜集可以使用软件进行&#xff0c;这里写四个脚本 (我们拿到webshell或者普通用户时&#xff0c;上传第三方软件的目录应该是Linux的tmp目录&#xff0c;tmp目录是临时目录&#xff0c;每次linux重启后该目录内容就会清除&#xff0c;而…

Dubbo源码篇05---SPI神秘的面纱---使用篇

Dubbo源码篇05---SPI神秘的面纱---使用篇 引言Jdk提供的SPI机制基本流程缺陷 Dubbo的SPI机制实例演示 Dubbo VS JDK SPI 小结Adaptive自适应扩展点demo演示如何做到动态适配的 按条件批量激活扩展点小结 引言 SPI全称是Service Provider Interface&#xff0c;其中服务提供者定…

全面提升测试效率,一键实现多文件、多Sheet的WEB自动化测试!

目录 前言&#xff1a; 设计目标 框架结构 实现 总结 前言&#xff1a; 在WEB开发中&#xff0c;自动化测试框架是一个不可或缺的组件。封装一个既能支持多文件&#xff0c;又能支持多Sheet的WEB自动化框架&#xff0c;将会极大地提升我们的开发效率。下面我将会详细介绍…

GPT-4平替版:MiniGPT-4,支持图像理解和对话,现已开源

项目地址&#xff1a;https://minigpt-4.github.io/ 论文链接&#xff1a;https://github.com/Vision-CAIR/MiniGPT-4/blob/main/MiniGPT_4.pdf 代码&#xff1a;https://github.com/Vision-CAIR/MiniGPT-4 视频&#xff1a;https://youtu.be/__tftoxpBAw 数据集&#xff…

el-dialog 关闭再打开后窗口内容不刷新问题

页面中有增加和编辑两个功能,由于弹窗样式都是一样的,于是将它拆分成一个子组件,父组件把状态传给子组件,子组件根据这个状态判断是做编辑操作还是新增操作. 编辑 添加 问题一:但是这样遇到了一个问题,在编辑时&#xff0c;只有第一次点编辑时&#xff0c;回显的数据才能正确显…

大学生就业工资低,想转行IT?0基础培训班学习半年云计算出来可以就业吗?挑战高薪职业!

大学生就业工资低&#xff0c;想转行IT&#xff1f;0基础学习云计算可以就业吗&#xff1f; 大学生就业工资低&#xff0c;想转行IT&#xff1f;0基础培训班学习半年云计算出来可以就业吗&#xff1f;这是一个很常见的问题&#xff0c;也是很多大学毕业生关心的话题。根据我了解…

探索2023年海外网红营销合作方式:提升品牌曝光度的创新策略

随着社交媒体的崛起和用户对网红的追捧&#xff0c;海外网红营销已经成为品牌推广的不可忽视的一部分。在2023年&#xff0c;有7种最火爆的海外网红营销合作方式备受瞩目。本文Nox聚星将和大家一起来详细了解这7种方式&#xff0c;为品牌提供更多营销灵感和策略。 1、跨平台合作…

Codeforces Round 834 (Div. 3)

题集链接 Codeforces Round 834 A. Yes-Yes?B. Lost PermutationC. Thermostat A. Yes-Yes? Example input 12 YES esYes codeforces es se YesY esYesYesYesYesYesYe seY Yess sY o Yesoutput NO YES NO YES NO YES YES NO NO YES NO YES题意&题解&#xff1a; 其实就…

Windows环境下安装及部署Nginx教程(含多个站点部署)

目录 一、下载安装Nginx 二、部署Nginx 三、多站点部署的情况 1、nginx域名解析&#xff0c;虚拟主机&#xff1a; 四、带https的站点如何部署&#xff0c;与http的有何不同点&#xff1f; 一、下载安装Nginx 1、官网下载地址&#xff1a;https://nginx.org/en/download.h…

2022 年第四届河南省 CCPC 大学生程序设计竞赛vp补题

Dashboard - 2022 CCPC Henan Provincial Collegiate Programming Contest - Codeforces Problem B. Hash 思路&#xff1a; 发现31的次幂取模的答案&#xff0c;所以如果一段太长肯定不如拆成2段。首先如果一段长度为7,那么无论他的开头是a,eh,n的谁,都有val>31^6887503…

0基础学习VR全景平台篇第29章:场景功能-音乐解说

本期为大家带来蛙色VR平台&#xff0c;场景管理模块-音乐功能&#xff01; 功能位置示意 一、本功能将用在哪里&#xff1f; 优秀VR全景作品不仅注重视觉的体验&#xff0c;接入契合场景的背景音乐与解说&#xff1b; 可将音乐与解说进行全局播放或进行分场景播放&#xff0…

前端学习--Vue(4) 生命周期

一、组件的生命周期 一个组件从创建-运行-销毁的真个阶段&#xff0c;强调的是一个时间段 1.1 生命周期函数 1.1.1 创建 &#xff08;只执行一次&#xff09; created() 阶段任务&#xff1a;最早可以使用methods中的方法发起ajax请求获取数据&#xff0c;并将数据挂载到d…

论文阅读笔记(三)——有监督解耦+信息瓶颈

论文信息 《Disentangled Information Bottleneck》 论文地址&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/17120 代码地址&#xff1a;GitHub - PanZiqiAI/disentangled-information-bottleneck inproceedings{pan2021disentangled, title{Disentangled in…

vue3与vue2共存环境搭建

1、全局安装vue2 npm install vue-cli -g2、自行在任意位置创建一个文件夹&#xff0c;局部安装vue3 npm初始化 npm initnpm初始化 提示&#xff1a; 初始化后 出现文件package.json 如果没有初始化 会报错&#xff0c;且文件夹中不会新增内容 3、局部安装vue3 npm install …

一名优秀的黑客,具备的有哪些特质

想要成为网络hacker黑客&#xff1f;十个必会的特质 一、基本的计算机知识 把它列为第一条&#xff0c;相信很多人肯定会觉得不以为然&#xff0c;其实掌握必要的计算机知识对黑客入门非常重要。这些包括&#xff1a;计算机硬件的组成、操作系统的安装、Windows批处理命令、命…

LeetCode_DFS_困难_1377.T 秒后青蛙的位置

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你一棵由 n 个顶点组成的无向树&#xff0c;顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下&#xff1a; 在一秒内&#xff0c;青蛙从它所在的当前顶点跳到另一个未访问过的顶点&#xff08;如果它…

apt remove purge的区别 删除包的同时删除配置文件

1、apt remove purge的区别 查看 man apt apt remove&#xff1a;删除软件包&#xff0c;不删除配置文件。这么做的目的是将来再次安装这个包时 原来的配置文件会自动加载供使用。也可以避免误删除包&#xff0c;配置文件还在的话&#xff0c;重新安装一次软件包就可以恢复到…