部署k8s 1.28.9版本
继上篇通过vagrant与virtualBox实现虚拟机的安装。笔者已经将原有的vmware版本的虚拟机卸载掉了。这个场景下,需要重新安装k8s 相关组件。由于之前写的一篇文章本身也没有截图。只有命令。所以趁着现在。写一篇,完整版带截图的步骤。现在行业这么卷。离职了让我能好好的写点东西。
描述:此篇文章只有具体的步骤,组件内部核心控件。以及具体使用方式。并不包含在这篇内容中。如果有需要。小伙伴儿们可以提出来。作为持续的内容更新也是不错的。好了不喜欢看唠叨的同学们。咱们直接开始。上述纯属无聊的废话。
版本:V1.28.9 版本
部署方式:Kubeadm 【单master 多node部署】
下方 master节点 和node节点 都要进行配置 。
(1) 升级linux内核,由于低版本linux内核有可能引发一些不确定因素 所以笔者在此升级了下linux内核
#查询当前linux内核
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg# 步骤依次执行即可
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgyum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpmyum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64grub2-set-default 0grub2-mkconfig -o /boot/grub2/grub.cfg#重新启动
reboot #启动后 重新查询linux内核是否变更
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
(2)关闭防火墙状态。
#停止当前防火墙
systemctl stop firewalld# 重启后也关闭防火墙 避免自动重启
systemctl disable firewalld #检查当前防火墙状态
systemctl status firewalld

(3)关闭掉swap分区
#关闭当前swap分区
sed -i 's/.*swap.*/#&/' /etc/fstab
swapoff -a

(4)关闭掉 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

(5)添加host 请修改成自己的maste节点IP和workNode节点IP
echo "192.168.18.219 master \
192.168.18.220 node01
192.168.18.221 node02" >> /etc/hosts

(6)添加hostname 同时让hostname 生效
#替换成自己的主机名称 也可以按照上述内容 master node01 node02 配置
hostnamectl set-hostname 主机名称# 查询当前hostname
hostname#使hstname生效
systemctl restart NetworkManager

(7)安装时间同步插件 保证三台机器时钟都是同步的
yum install chrony -y
systemctl start chronyd && systemctl enable chronyd && chronyc sources
date

(8)添加路由转发
# 内核路由转发 以及网桥过滤
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.swappiness=0
EOF
(9)使路由转发生效
sysctl --system

(10) 安装ipset
# 安装ipset
yum -y install ipset ipvsadm

(11) 加载ipvs
# 加载
cat > /etc/sysconfig/modules/ipvs.modules << EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

(12) 给ipvs 赋予权限
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

(13)安装docker 请直接按照步骤来
#如果 之前安装过docker 可以按照此步骤先进行卸载操作 如果首次安装 不需要第一步
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine#安装 yum-utils
yum install -y yum-utilsyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#上述如果地址添加失败可以通过下述地址下载
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin#查看当前docker 版本
docker -v#开机自启动 docker
systemctl enable docker.service
systemctl enable containerd.service#启动 docker
systemctl start docker && systemctl status docker

(14) 添加docker 镜像地址
cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://dockerhub.azk8s.cn",
"http://hub-mirror.c.163.com"
]
}
EOF
(15) 安装wget 为了安装 cri-docker cri-docker 因为k8s新版本是基于container.io实现的 所以需要
下载 cri-docker ,请注意 下述命令中的 $MAINPID 执行过程中有可能会丢失。 请手动 补充到位置
#安装wget 为了下载cri-docker 由于k8s 新版本是基于 container.io 所以可以通过cri-docker 适#配
yum install wget #下载 cri-docker
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8.amd64.tgz#解压当前 tar包 默认下载当前目录
tar xf cri-dockerd-0.3.8.amd64.tgz#将解压内容 移动到 /usr/bin
mv cri-dockerd/cri-dockerd /usr/bin/#创建cri-docker.service 文件
cat > /usr/lib/systemd/system/cri-docker.service<<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd://
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF#上述中的 $MAINPID 有可能会丢失 如果丢失 请执行如下代码 添加上 $MAINPID
vim /usr/lib/systemd/system/cri-docker.service

(16) 添加cri-docker.socket
cat > /usr/lib/systemd/system/cri-docker.socket<<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker[Install]
WantedBy=sockets.target
EOF

(17) 修改了 systemd 的相关配置 所以需要让其生效
# 对cri-docker 的配置让其生效
systemctl daemon-reload #开机自启动 启动cri-docker 同时查看状态
systemctl enable cri-docker && systemctl start cri-docker && systemctl status cri-docker


(18) 添加k8s镜像地址
# 添加k8s镜像源地址
cat <<EOF | tee /etc/yum.repos.d/kubernetes.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
EOF

(19) 前期准备工作已经做好 那么 安装 kubeadm kubelet kubectl 同时启动kubelet 设置开机自启动 同时查看状态 现在的kubelet还是启动失败的 请不要慌张
#安装 kuebadm kubelet kubectl
yum install -y kubelet kubeadm kubectl#启动kubelet 并设置开机自启动
systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet


(20) 配置cgroup 和docker 保持一致
# 配置 cgroup 驱动与docker一致
cp /etc/sysconfig/kubelet{,.bak}cat > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF#安装自动补全 工具
yum install -y bash-completion
(21) 用户bash目录 添加kubectl 变量
source /usr/share/bash-completion/bash_completionecho "source <(kubectl completion bash)" >> ~/.bashrcsource ~/.bashrc

(22) 查看 kubeadm 镜像
查看镜像仓库是否有相关镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers

(23)拉取相关镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock

上述为 master节点 和node节点 都要进行配置 下述 将分开说明 master 和 node 的配置
下方配置请注意 一部分是master 需要配置的 一部分是node需要配置的
Master配置
# master节点运行 启动master节点相关组件及容器【master】
kubeadm init \
--apiserver-advertise-address 192.168.31.219 \
--kubernetes-version v1.28.11 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--ignore-preflight-errors=all#上述配置中的
api-server-address 代表的是主节点的ip地址
kubernetes-version 代表的是k8s组件版本
pod-network-cidr 代表内部的区分流量
image-repository 镜像仓库地址
cri-socket 指定cri-docker的 地址

(master)上述执行成功后 会提示执行相关命令
# 创建kubeconfig master启动完成后也会提示此命令【master】
mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config
(master) 创建自有证书 生成内容 在node节点是有用的 请一定要记住 下方已经标注出来了,一个是token 一个是生成的 有效的sha256的值
# 创建相关kubeadm token 【master】生成的值 在node节点中是需要的请记住
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'# 使用我们自己生成的证书 在子节点进行join时需要token 以及sha【masert】
kubeadm token create --ttl 0 --print-join-command# 查看是否已经创建成功证书 在node节点join要用到 【master】

master 下载网络插件 还记着前边笔者说过的 kubelet还没起来的问题吗 ,当把cin插件下载完成后 kubelet就会恢复正常
修改相关配置 calico.yml文件中相关配置CALICO_IPV4POOL_CIDR 改成admin init中 --pod-network-cidr 参数相同,但是由于现在的dokerhub无法下载镜像,通过阿里云下载相关镜像还无法找到对应的版本的网络代理插件。那么笔者喜欢让大家白嫖。压缩包会同步出来。这样你们就不用科学上网去自己寻找了。如果按照笔者的配置就不需要修改上述的CALICO_IPV4POOL_CIDR。
请将所有tar 包 执行 docker load 添加到master 镜像中 然后 通过kubectl 执行
wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yam# 如果下载失败 请把使用笔者给的安装包的内容
kubectl apply -f calico.yamll


Node节点
将node节点添加到 master中去
#在node节点执行 加入到主节点
kubeadm join 192.168.31.219:6443 --token juw32i.1cb4jrcr4fm8scvy --discovery-token-ca-cert-hash sha256:5be9defe9be83e5b50b51490009b8bb8a22a7bf9b9d71c6176cca81581d98fba --cri-socket=unix:///var/run/cri-dockerd.sock#解释
token 是在主节点生成的 上述标黄的内容
sha256: 自己生成的值 也在上述标黄的内容中

最终 可以在master 查看 节点状态 如果显示ready 那么就是正常启动的

相关文章:
部署k8s 1.28.9版本
继上篇通过vagrant与virtualBox实现虚拟机的安装。笔者已经将原有的vmware版本的虚拟机卸载掉了。这个场景下,需要重新安装k8s 相关组件。由于之前写的一篇文章本身也没有截图。只有命令。所以趁着现在。写一篇,完整版带截图的步骤。现在行业这么卷。离…...
实验二:图像灰度修正
目录 一、实验目的 二、实验原理 三、实验内容 四、源程序和结果 源程序(python): 结果: 五、结果分析 一、实验目的 掌握常用的图像灰度级修正方法,包括图象的线性和非线性灰度点运算和直方图均衡化法,加深对灰度直方图的理解。掌握对比度增强、直方图增强的原理,…...
bash: ip: command not found
输入: ip addr 报错: bash: ip: command not found 报错解释: 这个错误表明在Docker容器中尝试执行ip addr命令时,找不到ip命令。这通常意味着iproute2包没有在容器的Linux发行版中安装或者没有正确地设置在容器的环境变量PA…...
全开源TikTok跨境商城源码/TikTok内嵌商城/前端uniapp+后端+搭建教程
多语言跨境电商外贸商城 TikTok内嵌商城,商家入驻一键铺货一键提货 全开源完美运营 海外版抖音TikTok商城系统源码,TikToK内嵌商城,跨境商城系统源码 接在tiktok里面的商城。tiktok内嵌,也可单独分开出来当独立站运营 二十一种…...
云原生、Serverless、微服务概念
云原生(Cloud Native) 云原生是一种设计和构建应用程序的方法,旨在充分利用云计算的优势。云原生应用程序通常具有以下特征: 容器化:应用程序和其依赖项被打包在容器中,确保一致的运行环境。常用的容器技…...
Windows上LabVIEW编译生成可执行程序
LabVIEW项目浏览器(Project Explorer)中的"Build Specifications"就是用来配置项目发布方法的。在"Build Specifications"右键菜单中选取"New",可以看到程序有几种不同的发布方法:Application(EXE)、Installer、.Net Inte…...
ref 和 reactive 区别
在Vue 3中,ref和reactive都是用于创建响应式数据的API,但它们之间存在一些关键的区别。以下是ref和reactive的主要区别: 1. 数据类型处理 ref:主要用于定义基本类型的数据(如字符串、数字、布尔值等)以及…...
深度学习计算机视觉中, 多尺度特征和上下文特征的区别是?
在深度学习和计算机视觉中,多尺度特征和上下文特征都是用来捕捉和理解图像中复杂模式和关系的重要概念,但它们的侧重点有所不同。 多尺度特征 (Multi-scale Features) 多尺度特征是指在不同尺度上对图像进行特征提取,以捕捉不同尺度的物体特…...
Facebook未来展望:数字社交平台的进化之路
在信息技术日新月异的时代,社交媒体平台不仅是人们交流沟通的重要工具,更是推动社会进步和变革的重要力量。作为全球最大的社交媒体平台之一,Facebook在过去十多年里,不断创新和发展,改变了数十亿用户的社交方式。展望…...
uniapp-vue3-vite 搭建小程序、H5 项目模板
uniapp-vue3-vite 搭建小程序、H5 项目模板 特色准备拉取默认UniApp模板安装依赖启动项目测试结果 配置自动化导入安装依赖在vite.config.js中配置 引入 prerttier eslint stylelint.editorconfig.prettierrc.cjs.eslintrc.cjs.stylelintrc.cjs 引入 husky lint-staged com…...
sealos快速安装k8s
Sealos 提供一套强大的工具,使得用户可以便利地管理整个集群的生命周期。 功能介绍 使用 Sealos,您可以安装一个不包含任何组件的裸 Kubernetes 集群。此外,Sealos 还可以在 Kubernetes 之上,通过集群镜像能力组装各种上层分布式…...
智慧水利:迈向水资源管理的新时代,结合物联网、云计算等先进技术,阐述智慧水利解决方案在提升水灾害防控能力、优化水资源配置中的关键作用
本文关键词:智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…...
MATLAB——字符串处理
文章目录 MATLAB——字符串处理字符串处理函数字符串或字符串数组构造 MATLAB——字符串处理 字符串处理函数 MATLAB中的字符串处理函数如下: 函数名称说明eval(string)作为一个MATLAb命令求字符串的值blanks(n)返回一个具有n个空格的字符串deblank去掉字符串末尾…...
Qt实现一个简单的视频播放器
目录 1 工程配置 1.1 创建新工程 1.2 ui界面配置 1.3 .pro配置 2 代码 2.1 main.c代码 2.2 widget.c 2.3 widget.h 本文主要记述了如何使用Qt编写一个简单的视频播放器,整个示例采用Qt自带组件就可以完成。可以实现视频的播放和暂停等功能。 1 工程配置 1.…...
微服务治理新篇章:Eureka中细粒度策略管理实现
微服务治理新篇章:Eureka中细粒度策略管理实现 在微服务架构中,服务的治理和管理是确保系统稳定性和可扩展性的关键。Eureka作为Netflix开源的服务发现框架,提供了基本的服务注册与发现功能。然而,随着微服务规模的扩大和业务需求…...
快排的3种方式
//(前两种时间复杂度为o(n^2) , 最后一种为o(n*logn)public static void swap(int[] arr , int i , int j){arr[i] arr[i] ^arr[j];arr[j] arr[i] ^arr[j];arr[i] arr[i] ^arr[j]; } //使数组中以arr[R]划分,返回循环后arr[R]的所在地 public…...
el-date-picker手动输入日期,通过设置开始时间和阶段自动填写结束时间
需求:根据开始时间,通过填写阶段时长,自动填写结束时间,同时开始时间和节数时间可以手动输入 代码如下: <el-form ref"ruleForm2" :rules"rules2" :model"formData" inline label-po…...
springboot 适配ARM 架构
下载对应的maven https://hub.docker.com/_/maven/tags?page&page_size&ordering&name3.5.3-alpinedocker pull maven:3.5.3-alpinesha256:4c4e266aacf8ea6976b52df8467134b9f628cfed347c2f6aaf9e6aff832f7c45 2、下载对应的jdk https://hub.docker.com/_/o…...
ElementUI el-select 组件动态设置disabled后,高度变更的问题解决办法
问题描述 Vue2 项目在使用 el-select 组件时,动态将disabled变更为了 true,元素的高度发生了变化。 问题原因 通过浏览器开发人员工具面板,发现,组件内的 input 元素被动态设置了height的样式: 在项目中检查后并…...
写个网络爬虫
网络爬虫是一种自动化程序,通过发送HTTP请求并解析HTML等网页内容,获取指定网页数据的工具。下面是一个简单的Python代码示例,用于实现一个基本的网络爬虫: import requests from bs4 import BeautifulSoupdef get_html(url):try…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
