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

离线部署kubernetes

麒麟Linux服务器 AMR架构

🧰 离线部署 Kubernetes v1.25.9(麒麟系统 + Docker)

一、验证Docker部署状态 ‌检查Docker服务运行状态‌

systemctl status docker 预期输出应显示 Active: active (running),表明服务已启动‌18。 ‌运行测试容器验证功能‌

docker run --rm hello-world 若输出包含 Hello from Docker!,表明Docker引擎及容器运行时正常‌8。 ‌查看Docker版本信息‌

docker version 确认 Client 和 Server 版本信息一致且无报错‌18。

✅ 你需要准备的资源(在联网的 Windows 上下载)

{ "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"], "exec-opts": ["native.cgroupdriver=cgroupfs"] }

  1. Kubernetes 安装包

    • 下载 Linux 版二进制工具: https://dl.k8s.io/release/v1.25.9/bin/linux/amd64/

      • kubeadm

      • kubelet

      • kubectl

    • 或通过离线 yum 源(我可以帮你整理)

  2. Kubernetes 必需镜像 使用以下命令获取 Kubernetes 所需镜像列表(版本 1.25.9):

    bash
    ​
    ​
    复制编辑
    kubeadm config images list --kubernetes-version=v1.25.9

    输出大概是:

    bash复制编辑registry.k8s.io/kube-apiserver:v1.25.9
    registry.k8s.io/kube-controller-manager:v1.25.9
    registry.k8s.io/kube-scheduler:v1.25.9
    registry.k8s.io/kube-proxy:v1.25.9
    registry.k8s.io/pause:3.8
    registry.k8s.io/etcd:3.5.4-0
    registry.k8s.io/coredns/coredns:v1.9.3

    然后:

    • 在 Windows 上用 WSL/Docker Desktop 拉取这些镜像;

    • docker save 保存成 tar 包:

      bash
      ​
      ​
      复制编辑
      docker save -o k8s-images.tar <镜像列表>
  3. 网络插件 Flannel(或 Calico)

    • 推荐下载 flannel yaml: https://github.com/flannel-io/flannel/releases

    • 或使用这个命令保存 YAML 文件:

      bash
      ​
      ​
      复制编辑
      curl -O https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

💾 将这些文件复制到麒麟系统中

推荐用以下方式之一:

  • U 盘或移动硬盘;

  • Windows → Linux 的 scp

  • WinSCP 工具图形化上传;


🏗️ 麒麟服务器离线安装步骤

前提:在麒麟服务器上新建一个目录存放所有离线资源:

mkdir -p /root/k8s-offline

cd /root/k8s-offline

1️⃣ 安装 kubelet/kubectl/kubeadm

将下载好的三大组件移动到 /usr/bin/ 目录,并赋予执行权限:

chmod +x kubeadm kubelet kubectl
mv kubeadm kubelet kubectl /usr/bin/

2️⃣ 配置 systemd 启动 kubelet

2.1 创建 systemd 配置目录

sudo mkdir -p /etc/systemd/system/kubelet.service.d

2.2 创建 kubelet 配置文件

编辑 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,内容如下:

sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

[Service] Environment="KUBELET_KUBEADM_ARGS=--container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cgroup-driver=cgroupfs/systemd" ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBEADM_ARGS

检查docker采取哪个驱动:docker info | grep -i "Cgroup Driver"

2.3 创建主服务文件

编辑 /etc/systemd/system/kubelet.service,内容如下:

[Unit] Description=kubelet: The Kubernetes Node Agent Documentation=Kubernetes Documentation | Kubernetes After=network.target

[Service] ExecStart=/usr/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10

[Install] WantedBy=multi-user.target

2.4 重载并启用服务

systemctl daemon-reexec systemctl daemon-reload systemctl enable kubelet

3️⃣ 加载镜像

删除镜像 docker rmi <镜像名或镜像ID>  
​
docker load -i kube-apiserver-v1.25.9-arm64.tar
docker load -i kube-controller-manager-v1.25.9-arm64.tar
docker load -i kube-scheduler-v1.25.9-arm64.tar
docker load -i kube-proxy-v1.25.9-arm64.tar
docker load -i pause-3.8-arm64.tar
docker load -i etcd-3.5.6-0-arm64.tar
docker load -i coredns-v1.9.3-arm64.tar
​
​
加载完成后,你可以通过以下命令来确认镜像的架构:
docker inspect <镜像名> | grep Architecture
例如:docker inspect kube-apiserver:v1.25.9 | grep Architecture     --"Architecture": "arm64"

4️⃣ 关闭 swap、优化内核

swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
modprobe br_netfilter
sysctl -w net.bridge.bridge-nf-call-iptables=1
sysctl -p

5️⃣ 初始化 Kubernetes

kubeadm init --kubernetes-version=1.25.9 \--apiserver-advertise-address=192.168.1.210 \--pod-network-cidr=10.244.0.0/16kubeadm init --kubernetes-version=1.25.9 \--apiserver-advertise-address=172.20.10.9 \--pod-network-cidr=10.244.0.0/16如果有报错:!!    [ERROR CRI]: container runtime is not running: output: time="2025-04-18T00:03:22-07:00" level=fatal msg="unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory\""
​
一.安装 crictl
打开浏览器,访问 https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.25.0/crictl-v1.25.0-linux-amd64.tar.gz(已下载)
下载后解压,得到一个可执行文件 crictl
把 crictl 拷贝到你的 Kylin 服务器,比如你现在的 /k8s-offline 目录。
然后在服务器执行:
chmod +x crictl
mv crictl /usr/bin/
验证:
which crictl
crictl --version
​
​
二.安装cri-dockerd   Kubernetes v1.24 起,默认已移除对 Docker 的直接支持(即 Dockershim 被移除了)。
​
1. 你需要准备以下资源并从外网下载 ()cri-dockerd文件
2.创建 cri-dockerd.service
sudo tee /etc/systemd/system/cri-dockerd.service > /dev/null <<EOF
[Unit]
Description=CRI interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network.target docker.service
Requires=docker.service
​
[Service]
Type=notify
--ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock
ExecReload=/bin/kill -s HUP \$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-999
​
[Install]
WantedBy=multi-user.target
EOF
3. 创建 cri-dockerd.socket
sudo tee /etc/systemd/system/cri-dockerd.socket > /dev/null <<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-dockerd.service
​
[Socket]
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
​
[Install]
WantedBy=sockets.target
EOF
​
修改完重启:
sudo systemctl daemon-reload
sudo systemctl restart cri-docker.service
sudo systemctl restart kubelet
​
​
​
​
4.# 移动可执行文件
install -o root -g root -m 0755 cri-dockerd /usr/bin/cri-dockerd
5.# 安装 systemd 配置(如有)
cp cri-docker.service cri-docker.socket /etc/systemd/system/
​
三.安装 conntrack 的命令如下:
在联网的机器上执行: yum install --downloadonly --downloaddir=./conntrack conntrack
这将把 conntrack 的 RPM 包下载到当前目录。
安装:sudo rpm -ivh /root/rpms/conntrack-*.rpm  --修改自己的安装路劲
​
​
sudo rpm -ivh libnetfilter_cthelper-1.0.0-15.el8.aarch64.rpm \libnetfilter_cttimeout-1.0.0-11.el8.aarch64.rpm \libnetfilter_queue-1.0.4-3.el8.aarch64.rpm \conntrack-tools-1.4.4-11.el8.aarch64.rpm
​
​
四:部署 socat
先从联网机器下载 RPM 包 : yum install --downloadonly --downloaddir=./socat socat
安装: sudo rpm -ivh /root/rpms/socat-*.rpm    --修改自己的安装路劲验证:
conntrack --version
socat -V
​
在联网的机器上执行:
​
​
6.# 重新加载 systemd 配置并启动
# 重新加载 systemd
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
​
# 启用服务开机自启
sudo systemctl enable cri-dockerd.socket
sudo systemctl enable cri-dockerd.service
​
# 启动服务
sudo systemctl start cri-dockerd.socket
sudo systemctl start cri-dockerd.service
​
# 查看状态(贴这个输出)验证
sudo systemctl status cri-dockerd.service
sudo systemctl status kubelet
systemctl status kubelet -l
journalctl -u kubelet -xe --no-pager
​
验证 kube-apiserver 容器是否运行
crictl ps | grep kube-apiserver
​
​
7.执行
kubeadm init \--kubernetes-version=1.25.9 \--apiserver-advertise-address=192.168.1.210 \--pod-network-cidr=10.244.0.0/16 \--cri-socket=unix:///var/run/cri-dockerd.sock kubeadm init \--kubernetes-version=1.25.9 \--apiserver-advertise-address=172.20.10.9 \--pod-network-cidr=10.244.0.0/16 \--cri-socket=unix:///var/run/cri-dockerd.sock如果需要重新初始化:-------
kubeadm reset -f
rm -rf /etc/cni/net.d /var/lib/etcd /etc/kubernetes
systemctl restart kubelet
​
​

6️⃣ 设置 kubectl 配置

mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

7️⃣ 安装 Flannel 网络插件

kubectl apply -f kube-flannel.yml

8️⃣ 去除 master 污点,让其也能跑 Pod:

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

相关文章:

离线部署kubernetes

麒麟Linux服务器 AMR架构 &#x1f9f0; 离线部署 Kubernetes v1.25.9&#xff08;麒麟系统 Docker&#xff09; 一、验证Docker部署状态 ‌检查Docker服务运行状态‌ systemctl status docker 预期输出应显示 Active: active (running)&#xff0c;表明服务已启动‌18。 ‌…...

【AI提示词】私人教练

提示说明 以专业且细致的方式帮助客户实现健康与健身目标&#xff0c;提升整体生活质量。 提示词 # Role: 私人教练## Profile - language: 中文 - description: 以专业且细致的方式帮助客户实现健康与健身目标&#xff0c;提升整体生活质量 - background: 具备丰富的健身经…...

爬虫学习——获取动态网页信息

对于静态网页可以直接研究html网页代码实现内容获取&#xff0c;对于动态网页绝大多数都是页面内容是通过JavaScript脚本动态生成(也就是json数据格式)&#xff0c;而不是静态的&#xff0c;故需要使用一些新方法对其进行内容获取。凡是通过静态方法获取不到的内容&#xff0c;…...

第54讲:总结与前沿展望——农业智能化的未来趋势与研究方向

目录 一、本板块内容回顾:人工智能助力农业的多元化应用 ✅ 精准农业与AI ✅ 农业金融与AI ✅ AI与农业政策 ✅ 农业物联网与AI 二、前沿趋势与研究方向:迈向智能、可持续农业的未来 1. AIGC(生成式AI)在农业中的应用 2. 数字孪生农业:虚拟与现实的无缝对接 3. A…...

创新项目实训开发日志4

一、开发简介 核心工作内容&#xff1a;logo实现、注册实现、登录实现、上传gitee 工作时间&#xff1a;第十周 二、logo实现 1.设计logo 2.添加logo const logoUrl new URL(/assets/images/logo.png, import.meta.url).href <div class"aside-first">…...

常见接口测试常见面试题(JMeter)

JMeter 是 Apache 提供的开源性能测试工具&#xff0c;主要用于对 Web 应用、REST API、数据库、FTP 等进行性能、负载和功能测试。​它支持多种协议&#xff0c;如 HTTP、HTTPS、JDBC、SOAP、FTP 等。 在一个线程组中&#xff0c;JMeter 的执行顺序通常为&#xff1a;配置元件…...

发布事件和Insert数据库先后顺序

代码解释 csharp await PublishCreatedAsync(entity).ConfigureAwait(false); await Repository.InsertAsync(entity).ConfigureAwait(false);PublishCreatedAsync(entity)&#xff1a;这是一个异步方法&#xff0c;其功能是发布与实体创建相关的事件。此方法或许会通知其他组…...

函数重载(Function Overloading)

1. 函数重载的核心概念 函数重载允许在 同一作用域内定义多个同名函数&#xff0c;但它们的 参数列表&#xff08;参数类型、顺序或数量&#xff09;必须不同。编译器在编译时根据 调用时的实参类型和数量 静态选择最匹配的函数版本。 2. 源码示例&#xff1a;基础函数重载 示…...

CGAL 网格等高线计算

文章目录 一、简介二、实现代码三、实现效果一、简介 这里等高线的计算其实很简单,使用不同高度的水平面与网格进行相交,最后获取不同高度的相交线即可。 二、实现代码 #include <iostream> #include <iterator> #include <map>...

计算机组成与体系结构:缓存(Cache)

目录 为什么需要 Cache&#xff1f; &#x1f9f1; Cache 的分层设计 &#x1f539; Level 1 Cache&#xff08;L1 Cache&#xff09;一级缓存 &#x1f539; Level 2 Cache&#xff08;L2 Cache&#xff09;二级缓存 &#x1f539; Level 3 Cache&#xff08;L3 Cache&am…...

Flutter 在全新 Platform 和 UI 线程合并后,出现了什么大坑和变化?

Flutter 在全新 Platform 和 UI 线程合并后&#xff0c;出现了什么大坑和变化&#xff1f; 在两个月前&#xff0c;我们就聊过 3.29 上《Platform 和 UI 线程合并》的具体原因和实现方式&#xff0c;而事实上 Platform 和 UI 线程合并&#xff0c;确实为后续原生语言和 Dart 的…...

开发 MCP Proxy(代理)也可以用 Solon AI MCP 哟!

MCP 有三种通讯方式&#xff1a; 通道说明备注stdio本地进程内通讯现有sse http远程 http 通讯现有streamable http远程 http 通讯&#xff08;MCP 官方刚通过决定&#xff0c;mcp-java-sdk 还没实现&#xff09; 也可以按两大类分&#xff1a; 本地进程间通讯远程通讯&…...

JetBrains GoLang IDE无限重置试用期,适用最新2025版

注意本文仅用于学习使用&#xff01;&#xff01;&#xff01; 本文在重置2024.3.5版本亲测有效&#xff0c;环境为window(mac下应该也一样奏效) 之前eval-reset插件只能在比较低的版本才能起作用。 总结起来就一句&#xff1a;卸载重装&#xff0c;额外要删掉旧安装文件和注册…...

python中socket(套接字)库详细解析

目录 1. 前言 2. socket 库基础 2.1 什么是 socket&#xff1f; 2.2 socket 的类型 3. 基于 TCP 的 socket 编程 3.1 TCP 服务器端代码示例 3.2 TCP 客户端代码示例 3.3 代码分析 4. 基于 UDP 的 socket 编程 4.1 UDP 服务器端代码示例 4.2 UDP 客户端代码示例 4.3…...

鸿蒙-状态管理V1和V2在ForEach循环渲染的表现

目录 前提遇到的问题换V2呗 状态管理V2已经出来好长时间了&#xff0c;移除GAP说明也有一段时间了&#xff0c;相信有一部分朋友已经开始着手从V1迁移到V2了&#xff0c;应该也踩了不少坑。 下面向大家分享一下我使用状态管理V1和Foreach时遇到的坑&#xff0c;以及状态管理V2在…...

深入了解递归、堆与栈:C#中的内存管理与函数调用

在编程中&#xff0c;理解如何有效地管理内存以及如何控制程序的执行流程是每个开发者必须掌握的基本概念。C#作为一种高级编程语言&#xff0c;其内存管理和函数调用机制包括递归、堆与栈。本文将详细讲解这三者的工作原理、用途以及它们在C#中的实现和应用。 1. 递归 (Recur…...

图论---Prim堆优化(稀疏图)

题目通常会提示数据范围&#xff1a; 若 V ≤ 500&#xff0c;两种方法均可&#xff08;朴素Prim更稳&#xff09;。 若 V ≤ 1e5&#xff0c;必须用优先队列Prim vector 存图。 #include <iostream> #include <vector> #include <queue> #include <…...

stm32之GPIO函数详解和上机实验

目录 1.LED和蜂鸣器1.1 LED1.2 蜂鸣器 2.实验2.1 库函数&#xff1a;RCC和GPIO2.1.1 RCC函数1. RCC_AHBPeriphClockCmd2. RCC_APB2PeriphClockCmd3. RCC_APB1PeriphClockCmd 2.1.2 GPIO函数1. GPIO_DeInit2. GPIO_AFIODeInit3. GPIO_Init4. GPIO_StructInit5. GPIO_ReadInputDa…...

用 PyQt5 和 asyncio 打造接口并发测试 GUI 工具

接口并发测试是测试工程师日常工作中的重要一环&#xff0c;而一个直观的 GUI 工具能有效提升工作效率和体验。本篇文章将带你用 PyQt5 和 asyncio 从零实现一个美观且功能实用的接口并发测试工具。 我们将实现以下功能&#xff1a; 请求方法选择器 添加了一个下拉框 QComboBo…...

OpenHarmony Camera开发指导(四):相机会话管理(ArkTS)

概述 相机在使用预览、拍照、录像、获取元数据等功能前&#xff0c;都需要先创建相机会话。 相机会话Session的功能如下&#xff1a; 配置相机的输入流和输出流。 配置输入流即添加设备输入&#xff0c;通俗来讲即选择某一个摄像头进行拍照录像&#xff1b;配置输出流&#x…...

深入探索RAG(检索增强生成)模型的优化技巧

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4o-mini模型生成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认其准…...

Spring boot 中的IOC容器对Bean的管理

Spring Boot 中 IOC 容器对 Bean 的管理&#xff0c;涵盖从容器启动到 Bean 的生命周期管理的全流程。 步骤 1&#xff1a;理解 Spring Boot 的容器启动 Spring Boot 的 IOC 容器基于 ApplicationContext&#xff0c;在应用启动时自动初始化。 入口类&#xff1a;通过 SpringB…...

Qt实战之将自定义插件(minGW)显示到Qt Creator列表的方法

Qt以其强大的跨平台特性和丰富的功能&#xff0c;成为众多开发者构建图形用户界面&#xff08;GUI&#xff09;应用程序的首选框架。而在Qt开发的过程中&#xff0c;自定义插件能够极大地拓展应用程序的功能边界&#xff0c;让开发者实现各种独特的、个性化的交互效果。想象一下…...

【Vue】TypeScript与Vue3集成

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Vue 文章目录 1. 前言2. 环境准备与基础搭建2.1. 安装 Node.js 与 npm/yarn/pnpm2.2. 创建 Vue3 TypeScript 项目2.2.1. 使用 Vue CLI2.2.2. 使用 Vite&#xff08;推荐&#xff09;2.2.3. 目录结构简述 3. Vue3 TS 基础语法整…...

Linux之七大难命令(The Seven Difficult Commands of Linux)

Linux之七大难命令 、背景 作为Linux的初学者&#xff0c;肯定要先掌握高频使用的指令&#xff0c;这样才能让Linux的学习在短时间内事半功倍。但是&#xff0c;有些指令虽然功能强大&#xff0c;但因参数多而让初学者们很害怕&#xff0c;今天介绍Linux中高频使用&#xff0…...

Spring Boot单元测试实战指南:从零到高效测试

在Spring Boot开发中&#xff0c;单元测试是保障代码质量的核心环节。本文将基于实际开发场景&#xff0c;手把手教你如何快速实现分层测试、模拟依赖、编写高效断言&#xff0c;并分享最佳实践&#xff01; 一、5分钟环境搭建 添加依赖 在pom.xml中引入spring-boot-starter-te…...

5.3.1 MvvmLight以及CommunityToolkit.Mvvm介绍

MvvmLight、CommunityToolkit.Mvvm是开源包,他们为实现 MVVM(Model-View-ViewModel)模式提供了一系列实用的特性和工具,能帮助开发者更高效地构建 WPF、UWP、MAUI 等应用程序。 本文介绍如下: 一、使用(旧)的MvvmLight库 其特点如下,要继承的基类是ViewModelBase;且使用…...

Dbeaver 执行 SQL 语句和执行 SQL 脚本的区别

执行 SQL 语句 执行 SQL 语句对应图标&#xff1a; 适用于执行单个 SQL 的情形&#xff0c;默认是在光标处或选中的文本上执行 SQL 查询。 实际上同时选择多个 SQL 并通过该方式去执行也可能成功&#xff0c;只是有失败的风险。因此不建议使用它来同时执行多个 SQL 语句。 情况…...

《Python3网络爬虫开发实战(第二版)》配套案例 spa6

Scrape | Moviehttps://spa6.scrape.center/ 请求影片列表api时&#xff0c;不仅有分页参数&#xff0c;还多了一个token&#xff0c;通过重发请求发现token有时间限制&#xff0c;所以得逆向token的生成代码。 通过xhr断点定位到接口请求位置 刷新页面或者点翻页按钮&#x…...

AWS 中国区 CloudFront SSL 证书到期更换实战指南

适用场景: AWS 中国区(宁夏区域 cn-northwest-1 或北京区域 cn-north-1)CloudFront 分配的 SSL 证书到期后无缝替换,域名主体为 domain.cn。 背景与痛点 当 CloudFront 使用的 SSL 证书即将到期时,需手动替换新证书以避免服务中断。由于 AWS 中国区 不支持 ACM 证书,必须…...