当前位置: 首页 > news >正文

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 及其相关组件&#xff0…...

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…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...