搭建k8s集群
一、准备工作(所有节点)
在开始部署之前,我们需要对所有节点进行以下准备工作。
1.1、关闭防火墙
# 关闭防火墙
systemctl stop firewalld# 禁止防火墙开机自启
systemctl disable firewalld
1.2、 关闭 SELinux
# 永久关闭 SELinux
sed -i 's/enforcing/disabled/' /etc/selinux/config# 重启系统使更改生效
reboot# 临时关闭 SELinux
setenforce 0
1.3、关闭 Swap 分区
# 永久关闭 Swap 分区
sed -ri 's/.*swap.*/#&/' /etc/fstab# 重启系统
reboot# 临时关闭 Swap 分区
swapoff -a
在搭建 Kubernetes 集群之前关闭防火墙、SELinux(Security-Enhanced Linux)以及禁用 swap 分区通常有以下原因:
1. 防火墙:- Kubernetes 集群中的各个节点需要通过一系列网络端口进行通信,包括 API 服务器、kubelet、etcd 等。关闭防火墙可以避免阻碍节点之间的网络通信,确保集群的正常运行。- 在生产环境中,建议使用网络策略(Network Policies)来限制 Pod 之间和 Pod 与外部的网络通信,而不是完全关闭防火墙。2. SELinux:- SELinux 是一个 Linux 内核的安全模块,用于强化系统的安全性。但是,它有时会与 Kubernetes 组件和容器运行时产生冲突,导致权限问题和功能受限。- 关闭 SELinux 可以简化 Kubernetes 集群的配置和维护,避免潜在的权限问题。3. 禁用 Swap 分区:- Kubernetes 对内存的管理和调度依赖于 Linux 内核的内存管理机制。Swap 分区的存在可能导致内存调度行为不稳定,从而影响容器的性能和稳定性。- Kubernetes 官方建议在所有集群节点上禁用 swap 分区,以确保容器可以充分利用主机的物理内存,并避免因为交换空间导致的性能问题。
虽然关闭防火墙、SELinux 和禁用 swap 分区可以简化 Kubernetes 的搭建和维护,但同时也会降低系统的安全性。在生产环境中,建议根据安全策略来适当配置防火墙规则,并针对 SELinux 进行合适的配置,以确保系统安全性和 Kubernetes 的正常运行。
1.4、 设置主机名
# 设置主机名(以 node1 为例)
hostnamectl set-hostname node1# 或者直接修改 /etc/hostname 文件,内容为:
node1
生成ssh,并且同步到其他节点
[root@master ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:I8nt/Be5ue9Rq2/u/zYvYCSgAQEHR15sYvwpIcFkqwE root@master
The key's randomart image is:
+---[RSA 2048]----+
|Eo***+. |
|..o==.+ . |
|. .o.= + . |
| o ..+o . . |
|. .+ S o . .|
| + . = ..|
| o . =.. |
| . + o+.|
| ...=B*O|
+----[SHA256]-----+
[root@master ~]# ssh-copy-id root@node1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@node1's password: Number of key(s) added: 1Now try logging into the machine, with: "ssh 'root@node1'"
and check to make sure that only the key(s) you wanted were added.
在每个节点上添加 hosts 文件的配置:
cat >> /etc/hosts << EOF
192.168.88.160 master
192.168.88.161 node1
EOF
1.5、 内核参数
cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1 # 启用对ipv6流量的桥接网络数据包的iptables的过滤功能,走iptables的规则
net.bridge.bridge-nf-call-iptables = 1 # 对ipv4的iptables的过滤功能
net.ipv4.ip_forward = 1 # 启动对ipv4数据包的转发功能;pod想要访问外网或者访问另外一个Pod,这个功能必须打开,否则系统只会管自己,不会帮别人转发数据包,就是只会管理发给自己的数据包的请求,不是自己的请求不会管
modprobe br_netfilter # 加载linux内核模块sysctl -p /etc/sysctl.d/k8s.conf # 加载指定配置文件的参数值,立即生效
二、安装docker
2.1、配置源
[root@master ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.m.daocloud.io","https://p5lmkba8.mirror.aliyuncs.com","https://registry.docker-cn.com", "https://docker.1ms.run", "https://docker.xuanyuan.me"],"exec-opts": ["native.cgroupdriver=systemd"], # 驱动设置为systemd,有一个重要的点就是kubelet使用的是systemd驱动,docker使用的cgroupfs驱动,有冲突,这里解决一下"storage-driver": "overlay2" # docker高版本需要配置这个
}
2.2、安装docker
yum -y install yum-utilsyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum -y install docker-cesystemctl enable docker --now
三、安装K8s
3.1、配置K8s源:
[root@master ~]# cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
3.2、安装k8s
# 指定版本
[root@master ~]# yum -y install kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0# 列出所安装需要的核心镜像
[root@master ~]# kubeadm config images list
I1117 14:17:57.019109 2908 version.go:255] remote version is much newer: v1.31.2; falling back to: stable-1.23
k8s.gcr.io/kube-apiserver:v1.23.17 # 但是这些镜像国内访问不了,使用阿里云上面的镜像即可
k8s.gcr.io/kube-controller-manager:v1.23.17
k8s.gcr.io/kube-scheduler:v1.23.17
k8s.gcr.io/kube-proxy:v1.23.17
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6
设置开机自启
# 开机自启,等会后面会自己启动的
[root@master ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
启动docker、containerd、kubelet
systemctl restart docker
systemctl restart containerd
systemctl restart kubelet# 启动后通过status查看是否异常
问题:failed to load Kubelet config file /var/lib/kubelet/config.yaml
解决:原因是没有还需要执行kubeadm init,这个步骤稍后会执行
3.3、修改kubeadm-flags.env文件
注释:–network-plugin=cni
[root@master ~]# cat /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6"
# KUBELET_KUBEADM_ARGS="--network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6"[root@master ~]# systemctl restart kubelet
3.4、初始化k8s【只有master节点需要执行这个!!!!!!!!!!!!】
只需要修改apiserver-advertise-address
kubeadm init --apiserver-advertise-address=192.168.88.160 --kubernetes-version=v1.23.0 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers# --apiserver-advertise-address # 控制节点的ip地址
# --kubernetes-version=v1.23.0 # k8s的版本
# --service-cidr # 指定使用的网络地址,dns和svc的范围,会从这个里面进行分配
# --pod-network-cid # 指定pod分配的地址范围
# --image-repository # 指定拉取控制平面组件的镜像仓库# 主要就是安装和配置api server,controller manager,scheduler等组件
如果初始化失败,可以使用 sudo kubeadm reset -f 进行重置
其他相关命令介绍:
# 获取node join的令牌,用于node节点接入
kubeadm token create --print-join-command
3.5、配置kubectl 访问权限【master节点】
root用户添加全局变量!!!!!!
# export KUBECONFIG=/etc/kubernetes/admin.conf
非root用户执行下面的命令:
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.6、添加到环境变量
master节点:
ls /etc/kubernetes # 查看是否有/etc/kubernetes/admin.conf文件echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profilesource ~/.bash_profile
其他节点:将主节点(master)中的“/etc/kubernetes/admin.conf”文件拷贝到从节点(node)相同目录下,再执行上面的操作。
四、安装calico网络插件
wget https://docs.projectcalico.org/v3.21/manifests/calico.yaml# 修改里面的配置,否则会警告,当然也可以不修改
policy/v1beta1 改成policy/v1 # 因为高版本的k8s逐步的启用这个api了‘kubectl apply -f calico.yaml
五、检查
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 3h49m v1.23.0
node1 Ready <none> 85m v1.23.0
六、安装kubernetes-dashboard
https://blog.csdn.net/Stephen_Daa/article/details/129737078
命令参考:
# 先获得dashboard的secret对象的名字
kubectl get secret -n kube-system|grep admin|awk '{print $1}'# 获取token
kubectl describe secret dashboard-admin-token-9lwnc -n kube-system|awk '/^token/ {print $2}'
参考:
https://blog.csdn.net/m0_73950916/article/details/143834840
https://blog.csdn.net/Lentr0py/article/details/141127252
https://stark.blog.csdn.net/article/details/128444657
https://blog.csdn.net/m0_59029800/article/details/134267672
相关文章:

搭建k8s集群
一、准备工作(所有节点) 在开始部署之前,我们需要对所有节点进行以下准备工作。 1.1、关闭防火墙 # 关闭防火墙 systemctl stop firewalld# 禁止防火墙开机自启 systemctl disable firewalld1.2、 关闭 SELinux # 永久关闭 SELinux sed -…...

Android SystemUI——最近任务应用列表(十七)
对于最近任务应用列表来说,在 Android 原生 SystemUI 中是一个单独的组件。 <string-array name="config_systemUIServiceComponents" translatable="false">……<item>com.android.systemui.recents.Recents</item> </string-arra…...

java 根据前端传回的png图片数组,后端加水印加密码生成pdf,返回给前端
前端传回的png图片数组,后端加水印加密码生成pdf,返回给前端 场景:重点:maven依赖controllerservice 场景: 当前需求,前端通过html2canvas将页面报表生成图片下载,可以仍然不满意。 需要java后…...

《探秘鸿蒙Next:如何保障AI模型轻量化后多设备协同功能一致》
在鸿蒙Next的多设备协同场景中,确保人工智能模型轻量化后功能的一致性是一项极具挑战性但又至关重要的任务。以下是一些关键的方法和策略。 统一的模型架构与标准 采用标准化框架:选择如TensorFlow Lite、PyTorch Mobile等在鸿蒙Next上适配良好的轻量化…...

C语言二级
//请编写函数fun(),该函数的功能是:计算并输出给定整数n的所有因 //子(不包括1和自身)之和。规定n的值不大于1000。例如,在主函数 //中从键盘给n输入的值为856,则输出为:sum 763。 //注意&…...

隐私保护+性能优化,RyTuneX 让你的电脑更快更安全
RyTuneX 是一款专为 Windows 10 和 11 用户量身打造的系统优化工具,采用先进的 WinUI 3 框架开发,以其现代化的设计风格和强大的功能集合脱颖而出。这款工具不仅界面简洁美观,还提供了多样化的系统优化选项,旨在帮助用户最大化设备…...

rust学习-宏的定义与使用
rust学习-宏的定义与使用 声明宏(macro_rules! 宏)使用方式1. 简单的宏2. 带参数的宏3. 多个模式的宏 过程宏1. 定义过程宏1.1 属性宏1.2 函数宏1.3 派生宏 2. 使用过程宏2.1 属性宏2.2 函数宏2.3 派生宏 在 Rust 中,宏(macro&…...

【学习总结|DAY032】后端Web实战:登录认证
在 Web 后端开发中,登录认证是保障系统安全和用户数据隐私的关键环节。本文将结合实际开发案例,深入探讨登录功能与登录校验的实现思路和技术细节,希望能帮助读者更好地掌握这一重要知识点。 一、登录功能实现 1.1 思路分析 登录功能的核心…...

leetcode 123. 买卖股票的最佳时机 III
题目:123. 买卖股票的最佳时机 III - 力扣(LeetCode) O(N)的算法: f[i] max(max(0, prices[i] - min(prices[0], prices[1], ... , prices[i - 1)), f[i - 1]); g[i] max(max(0, max(prices[i 1], prices[i 2], ... , pric…...

Apache Tika 详解
Apache Tika是一个开源的、跨平台的库,专门用于检测、提取和解析多种文件格式的元数据。以下是对Apache Tika的详细解析: 一、概述 Apache Tika旨在为各种类型的数据提取提供一个单一的API,它支持多种文件格式,包括文档、图片、…...

ChatGPT被曝存在爬虫漏洞,OpenAI未公开承认
OpenAI的ChatGPT爬虫似乎能够对任意网站发起分布式拒绝服务(DDoS)攻击,而OpenAI尚未承认这一漏洞。 本月,德国安全研究员Benjamin Flesch通过微软的GitHub分享了一篇文章,解释了如何通过向ChatGPT API发送单个HTTP请求…...

Qt——界面优化
在Qt中进行界面优化,可以从以下几个方面入手: 1.使用QWidget:setVisible来控制Widget的 显示和隐藏,而不是删除和重建。 2.使用QPainter直 接绘制组件,避免使用复杂的布局。 3.使用QSS进行样式设置, 减少图片资源的使用。 4.使…...

python学opencv|读取图像(四十一 )使用cv2.add()函数实现各个像素点BGR叠加
【1】引言 前序已经学习了直接在画布上使用掩模,会获得彩色图像的多种叠加效果,相关文章链接为: python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖-CSDN博客 这时候如果更进一步,直接…...

Spring MVC和Spring WebFlux的区别
目录 一、编程模型 二、IO处理方式 三、数据流处理 四、适用场景 五、生态系统 在当今的Web开发领域,Spring框架无疑占据着重要的地位。其中,Spring MVC和Spring WebFlux作为Spring框架中用于构建Web应用程序的两个重要模块,各自具有独特…...

Linux探秘坊-------4.进度条小程序
1.缓冲区 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }执行此代码后,会 先停顿两秒,再打印出hello bite,但是明明打印在sleep前面,为什么会后打印呢? 因为ÿ…...

Llama 3:开源大模型的里程碑式突破
标题:Llama 3:开源大模型的里程碑式突破 文章信息摘要: Meta通过Llama 3展现了开源LLM的重大突破:采用超大规模训练数据和多阶段训练方法(SFT、rejection sampling、PPO和DPO),突破了传统的Chi…...

计算机网络 (56)交互式音频/视频
一、定义与特点 定义:交互式音频/视频是指用户使用互联网和其他人进行实时交互式通信的技术,包括语音、视频图像等多媒体实时通信。 特点: 实时性:音频和视频数据是实时传输和播放的,用户之间可以进行即时的交流。交互…...

STM32 GPIO工作模式
GPIO工作模式 1. GPIO简介2. GPIO工作模式2.1 输入浮空2.2 输入上拉2.3 输入下拉2.4 模拟2.5 开漏输出2.6 推挽输出2.7 开漏式复用功能2.8 推挽式复用功能 1. GPIO简介 GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚,STM32 芯片的 GPI…...

自动化实现的思路变化
阶段一: 1、成功调用。第一步,一般是用现用的工具,或者脚本成功调用接口 2、解决关联接口的参数传递。有的接口直接,存在参数的传递,一般的思路,就是将这个参数设置为变量。 3、简化代码。总会有些东西是重…...

MongoDB的索引与聚合
一、实验目的 1. 理解索引的概念及其在MongoDB中的重要性和作用。 2. 学习如何选择适合建立索引的字段。 3. 掌握如何创建、删除索引以及如何强制使用索引。 4. 熟悉MongoDB的聚合框架和MapReduce工具,以及简单聚合命令的使用。 二、实验环境准备 1. JAV…...

Java菜鸟养成计划(java基础)--java运算符
java中的运算符 1、java中的运算符1.1 、 、-、 * 、/ 、 %1.2 、、-、 *、/、%1.3 、、--【自增\自减运算符】1.4、>、 <、 > 、< 、 、! 、! 1.5、&&、||、|、&1.6、&、|、~、^1.7、>> 、 <<、>>>位运算1.8、?:三目运算符…...

除了基本的事件绑定,鸿蒙的ArkUI
鸿蒙操作系统(HarmonyOS)是由华为技术有限公司开发的分布式操作系统,旨在为多种智能设备提供一个统一的操作平台。它不仅适用于智能手机,还适用于平板电脑、智能手表、智能电视等物联网设备。为了使开发者能够更加便捷地创建跨设备…...

0164__【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os
【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os_gcc -o0-CSDN博客...

vue3组件传值具体使用
问: left.vue文件调用接口获取了后端返回的urlLink字段,我该怎么传递给总的父组件index.vue中,我需要点击父组件的一个按钮来触发跳转? 回答: 在 Vue 3 中使用 TypeScript 和 setup 语法糖时,可以通过 e…...

Web 音视频(二)在浏览器中解析视频
前言 浏览器中已经能直接播放视频,为什么还需要手动写代码解析? 因为,某些场景需要对视频进行更细致的处理,比如截取关键帧、提取视频中的文字、人物打码、极低延时播放视频等等。 总之,除了最单纯的视频播放外&…...

江天科技主要产品销售单价下滑,应收账款、存货周转率大幅下降
《港湾商业观察》廖紫雯 日前,苏州江天包装科技股份有限公司(以下简称:江天科技)冲击北交所,保荐机构为国投证券。 江天科技主要从事标签印刷产品的研发、生产与销售,公司主要产品包括薄膜类和纸张类的不…...

我国的金融组织体系,还有各大金融机构的分类,金融行业的组织
中国金融组织体系介绍 中国金融组织体系是一个复杂而多层次的系统,涵盖了各种类型的金融机构和监管机构。以下是关于中国金融组织体系的详细介绍,包括一行三会等金融监管机构,各大金融机构的分类、涉及的银行以及行业组织。 (一…...

vue md5加密
在Vue中使用MD5加密,你可以使用第三方库如crypto-js。首先,你需要安装这个库: npm install crypto-js --save然后,在你的Vue组件中引入crypto-js并使用其MD5功能: <template><div><input v-model&quo…...

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证7)
本文验证基于请求头中传递token信息的认证方式,webapi项目的控制器类中新建如下函数,仅通过验证的客户端能调用,需要客户端请求在Header中添加’Authorization’: Bearer token’的键值对且通过token验证后才能调用。 [Authorize] [HttpGet]…...

Ubuntu16.04 安装OpenCV4.5.4 避坑
Ubuntu16.04 安装C版OpenCV4.5.4 Ubuntu16.04 VSCode下cmakeclanglldb调试c 文章目录 Ubuntu16.04 安装C版OpenCV4.5.41. 下载Opencv压缩包2. 安装Opencv-4.5.43. 配置OpenCV的编译环境4.测试是否安装成功 1. 下载Opencv压缩包 下载Opencv压缩包,选择source版本。…...