k8s集群部署:容器运行时
1. 卸载旧版本 Docker
# 卸载旧版本的 Docker 组件
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
注释: 该命令会移除系统中现有的 Docker 及其相关组件,以确保不会与新的 Docker 版本冲突。
2. 二进制包安装 Docker
2.1 下载 Docker RPM 包
访问以下 URL 下载适用于 CentOS 9 ARM64 架构的 Docker RPM 包下载:
https://download.docker.com/linux/centos/9/aarch64/stable/Packages/
注释: 根据系统架构下载相应的 Docker RPM 包文件。
2.2 安装 RPM 包
# 安装 Docker 及相关组件
sudo yum install -y ./containerd.io-1.7.20-3.1.el9.aarch64.rpm \./docker-ce-27.1.2-1.el9.aarch64.rpm \./docker-ce-cli-27.1.2-1.el9.aarch64.rpm \./docker-buildx-plugin-0.16.2-1.el9.aarch64.rpm \./docker-ce-rootless-extras-27.1.2-1.el9.aarch64.rpm \./docker-compose-plugin-2.29.1-1.el9.aarch64.rpm
注释: 通过 yum 安装下载的 Docker 二进制包文件,其中包括 Docker 引擎、CLI 工具、Buildx 插件、Rootless 组件以及 Compose 插件。
2.3 启动并启用 Docker
# 启动 Docker 服务
sudo systemctl start docker
# 设置 Docker 开机自启
sudo systemctl enable docker
注释: 安装完成后,启动 Docker 并将其设置为开机自启,以确保系统重启后 Docker 自动启动。
2.4 验证安装
# 查看 Docker 版本信息
sudo docker version
# 运行 hello-world 容器来确认 Docker 是否工作正常
sudo docker run hello-world
注释: hello-world 容器的成功运行标志着 Docker 已正确安装并可以正常工作。
2.5 使非 root 用户可操作 Docker
# 将 kubernetes 用户添加到 docker 组中
sudo usermod -aG docker kubernetes
注释: 该命令将 kubernetes 用户添加到 docker 组,使其能够无需 root 权限运行 Docker 命令。
# 切换用户会话以使更改生效
su - kubernetes
注释: 用户组的更改需要重新登录才能生效。
# 验证 kubernetes 用户是否加入 docker 组
groups kubernetes
注释: groups 命令应显示 docker 组在 kubernetes 用户的组列表中。
# 使用非 root 用户运行 Docker 命令测试
docker run hello-world
3. 安装 cri-dockerd
3.1 下载 cri-dockerd
从以下地址下载适用于 ARM64 架构的 cri-dockerd下载:
https://github.com/Mirantis/cri-dockerd/releases
3.2 解压 cri-dockerd
# 使用 tar 解压 cri-dockerd 文件
tar -xvzf cri-dockerd-0.3.15.arm64.tgz
注释: 解压后会得到 cri-dockerd 的二进制文件。
3.3 将 cri-dockerd 移动到系统路径
# 将 cri-dockerd 二进制文件复制到 /usr/local/bin 目录
sudo cp cri-dockerd/cri-dockerd /usr/local/bin/
# 设置执行权限
sudo chmod +x /usr/local/bin/cri-dockerd
注释: 将 cri-dockerd 二进制文件移动到系统的可执行路径并赋予可执行权限。
3.4 创建 Systemd 服务文件
# 创建 cri-dockerd 的 systemd 服务文件
sudo vi /etc/systemd/system/cri-docker.service
添加以下内容:
[Unit]
Description=CRI Interface for Docker Application Container Engine # 服务的描述,表示这是Docker的CRI接口
Documentation=https://docs.mirantis.com # 文档链接,供用户查阅详细信息
After=network-online.target firewalld.service docker.service # 这个服务需要在网络服务、firewalld(防火墙服务)、docker服务启动后再启动
Wants=network-online.target # 确保网络在服务启动时已启动
Requires=cri-docker.socket # 要求 cri-docker.socket 作为依赖,在 cri-dockerd 启动时同时启动 socket 文件
[Service]
Type=notify # 通知型服务类型,服务启动后会向 systemd 发送通知表明它已准备好
ExecStart=/usr/local/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.1
# 指定服务启动命令,此处 cri-dockerd 启动并使用 CNI 作为网络插件,指定 pod 的基础镜像为 pause 镜像,用于 Kubernetes 中
ExecReload=/bin/kill -s HUP $MAINPID # 当服务重新加载时发送 HUP 信号,重新启动主进程
TimeoutSec=0 # 禁用超时,允许服务无限期运行
RestartSec=2 # 服务失败后2秒钟后自动重启
Restart=always # 如果服务意外停止,总是自动重启
StartLimitBurst=3 # 在60秒内允许的启动次数为3次
StartLimitInterval=60s # 如果在60秒内超过了允许的启动次数限制,则不再重新启动
LimitNOFILE=infinity # 无限制地允许服务打开的文件数量
LimitNPROC=infinity # 无限制地允许服务可启动的进程数
LimitCORE=infinity # 无限制地允许服务生成的core dump文件大小
TasksMax=infinity # 服务可以创建的进程和线程总数不受限制
Delegate=yes # 将资源控制的管理委托给该服务,允许服务创建的进程和子进程进行自己的资源管理
KillMode=process # 仅杀死主进程而不杀死整个服务的所有子进程
[Install]
WantedBy=multi-user.target # 指定该服务将在多用户目标下启动,即系统进入普通多用户模式时
注释: 该文件定义了 cri-dockerd 的 systemd 服务,确保 cri-dockerd 在系统启动时自动启动。
3.5 创建 Systemd Socket 文件
# 创建 cri-dockerd 的 socket 文件
sudo vi /etc/systemd/system/cri-docker.socket
添加以下内容:
[Unit]
[Unit]
Description=CRI Docker Socket for the API # socket文件的描述,表示这是用于CRI Docker API通信的socket
[Socket]
ListenStream=%t/cri-dockerd.sock # 定义 socket 文件路径,%t 表示系统的运行时目录(通常为 /run)
SocketMode=0660 # 设置 socket 文件权限为0660,拥有者和组有读写权限,其他用户无权访问
SocketUser=root # socket文件由 root 用户拥有
SocketGroup=docker # socket文件属于 docker 组,允许 docker 组内的用户使用该socket
[Install]
WantedBy=sockets.target # 该socket文件将在系统的 sockets.target 下启动,用于管理socket
注释: 该文件配置 cri-dockerd 的 socket 通信。
3.6 启动并启用服务
# 重新加载 systemd 配置以应用更改
sudo systemctl daemon-reload# 启用并启动 cri-docker 服务和 socket
sudo systemctl enable cri-docker.service
sudo systemctl enable cri-docker.socket
sudo systemctl start cri-docker.service
sudo systemctl start cri-docker.socket
注释: 通过 systemctl 启动并启用 cri-docker 服务和 socket。
3.7 验证安装
# 检查 cri-docker 服务状态
sudo systemctl status cri-docker.service
# 检查 cri-docker socket 状态
sudo systemctl status cri-docker.socket
注释: 确认 cri-dockerd 服务和 socket 是否已启动并正在运行。
专栏目录:
1、k8s集群部署:环境准备
2、k8s集群部署:容器运行时
3、k8s集群部署:安装 kubeadm
本文参考:http://www.weifos.com/Home/TechStack/1807017272963891200
相关文章:
k8s集群部署:容器运行时
1. 卸载旧版本 Docker # 卸载旧版本的 Docker 组件 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine注释: 该命令会移除系统中现有的 Docker 及其相关组件࿰…...
PHP7 的内核结构
PHP7 是 PHP 语言的一个重要版本,带来了许多性能提升和语言特性改进。要深入了解 PHP7 的内核,我们需要探讨其设计和实现的关键方面,包括 PHP 的执行模型、内存管理、编译和优化过程等。 1. PHP7 的内核结构 1.1 执行模型 PHP 是一种解释型…...

JVM合集
序言: 1.什么是JVM? JVM就是将javac编译后的.class字节码文件翻译为操作系统能执行的机器指令翻译过程: 前端编译:生成.class文件就是前端编译后端编译:通过jvm解释(或即时编译或AOT)执行.class文件时跨平台的,jvm并不是跨平台的通过javap进行反编译2.java文件是怎么变…...

tomcat端口被占用解决方法
在安装目录的conf下修改server.xml文件,修改后保存重启即可...

全新的训练算法:Reflection 70B进入大众的视野
在2024年9月6日,大模型的圈子迎来了一位新成员——Reflection 70B,它横扫了MMLU、MATH、IFEval、GSM8K等知名的模型基准测试,完美超越了GPT-4o,同时也超越了Claude3.5 Sonnet成为了新的大模型之王,Reflection 70B到底是…...
静态标注rtk文件参数解析
目录 在静态标注中,rtk(Real-Time Kinematic)文件的主要作用 rtk文件包含几种类型数据 具体作用 具体示例 %RAWIMUSA #INSPVAXA $GPRMC 背景: 最近工作中涉及到静态标注 slam相关,因为初入门,对于rtk文件中有很多参数&…...
TensorFlow和PyTorch小知识
TensorFlow和PyTorch是当前最流行的两个开源机器学习库,它们都广泛用于研究和工业界的深度学习项目。下面是对它们的介绍: 1,TensorFlow - **开发背景:** TensorFlow最初由Google Brain Team开发,并于2015年11月开源…...
Java证书信息收集
1.Java二级 【NCRE 二级Java语言程序设计02】考试流程及二级Java大纲_java语言程序设计计算机二级-CSDN博客...
flink写入hudi MOR表
第一步:创建flink内存表从kafka读取数据: DROP TABLE IF EXISTS HUDI_KAFKA_DEBEZIUM_ZHANG; CREATE TABLE IF NOT EXISTS HUDI_KAFKA_DEBEZIUM_ZHANG( ID STRING comment 编码 ,NAME STRING comment 名称 ,PRIMARY KEY(RCLNT,RLDNR,RRCTY,RVERS,RYEAR,…...
智能工厂程序设计 之-2 (Substrate) :三个世界--“存在的意义”-“‘我’的价值的实现” 之2
Q13、我刚看了一下前门前面的讨论。有一段文字您的重新 理解一下。那就是: 对题目 的另一角度( “智能工厂的程序设计”的三个层次词 分别关注的问题 及其 解决 思路的描述)的解释: 三个不同层次(深度)&…...

概要设计例题
答案:A 知识点: 概要设计 设计软件系统的总体结构:采用某种方法,将一个复杂的系统按照功能划分成模块;确定每个模块的功能;确定模块之间的调用关系;确定模块之间的接口,即模块之间…...
注册表模式:使用注册表和装饰器函数的模块化设计
在现代软件开发中,模块化设计是提高代码可维护性和可扩展性的关键技术之一。本文将探讨如何使用注册表(Registry)和装饰器函数(Decorator Function)来实现模块化设计,提升代码的灵活性和可扩展性。 什么是…...

怎样将vue项目 部署在ngixn的子目录下
如果同一服务器的80端口下,需要部署两个或以上数量的vue项目,那么就需要将其中一个vue项目部署在根目录下,其他的项目部署在子目录下. 像这样的配置 访问根目录 / 访问灭火器后台管理,访问 /mall/ 访问商城的后台管理 那么商场的vue项目,这样配置,才能在/mall/下正常访问? 1…...

FPGA开发:Verilog数字设计基础
EDA技术 EDA指Electronic Design Automation,翻译为:电子设计自动化,最早发源于美国的影像技术,主要应用于集成电路设计、FPGA应用、IC设计制造、PCB设计上面。 而EDA技术就是指以计算机为工具,设计者在EDA软件平台上…...

哈希表,算法
一.什么是哈希表 哈希表是一种用于快速数据存取的数据结构。它通过哈希函数将键(key)映射到表中的一个位置,从而实现高效的插入、删除和查找操作。 二.哈希冲突 哈希冲突发生在多个键通过哈希函数映射到哈希表的同一位置时。由于哈希表的大…...

Java数组的定义及遍历
数组的声明 长度不能超过定义的长度。超过则会报错通过下标来访问 数组的遍历 最常用最简单的方法是增强for循环。...

【电路笔记】-反相运算放大器
反相运算放大器 文章目录 反相运算放大器1、概述2、理想反相运算放大器3、实际反相运算放大器3.1 闭环增益3.2 输入阻抗3.3 输出阻抗4、反相运算放大器示例5、总结1、概述 上一篇关于同相运算放大器的文章中已介绍了该运算放大器配置的所有细节,该配置在同相引脚 (+) 上获取输…...

【电子通识】半导体工艺——刻蚀工艺
在文章【电子通识】半导体工艺——光刻工艺中我们讲到人们经常将 Photo Lithography(光刻)缩写成 Photo。光刻工艺是在晶圆上利用光线来照射带有电路图形的光罩,从而绘制电路。光刻工艺类似于洗印黑白照片,将在胶片上形成的图像印…...

vue-router 之如何在模版(template)中获取路由配置信息?
vue-router 之如何在模版(template)中获取路由配置信息? 获取当前路由信息 在vue3 中,route通常使用useRoute()钩子获取的,**代表当前激活的路由信息。**它包含了与当前路由相关的数据,比如路径、参数、查…...

HPL 源码结构分析
文件夹结构: $ cd /home/hipper/ex_hpl_hpcg/ $ pwd $ mkdir ./openmpi $mkdir ./openblas $mkdir ./hpl $ tree 1. 安装openmpi 1.1.1 使用Makefile下载配置编译安装 openmpi Makefile: all:wget https://download.open-mpi.org/release/open-m…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...