使用 Sealos 在离线环境中光速安装 K8s 集群
作者:尹珉。Sealos 开源社区 Ambassador,云原生爱好者。
当容器化交付遇上离线环境
在当今快节奏的软件交付环境中,容器化交付已经成为许多企业选择的首选技术手段。在可以访问公网的环境下,容器化交付不仅能够提高软件开发和交付的效率,还能够帮助企业实现快速迭代和持续交付。
然而,在离线环境中,容器化交付面临着诸多挑战,包括软件包和镜像的准备困难、配置繁琐、部署时间长等。在本文中,我们将以运维的角度去探讨基于离线环境下使用容器化交付的痛点,提出一些解决方案以帮助企业在离线环境中实现高效的容器化交付。
业务场景
我司主要面向政企客户,所交付的产品必须是部署在内网中。作为运维负责人,一直苦恼于如何在客户离线环境中以容器化的方式交付业务系统。政企客户 IDC 机房的环境特殊性,导致目前运维同学在使用容器化交付时效率不高,客户满意度不高的情况,为了解决这个问题,我们需要找到一个能够在离线环境中快速部署和管理 Kubernetes 集群的工具。
在离线环境中用容器化交付存在以下常见痛点
1. 学习和理解成本高
Kubernetes 是一个复杂的系统,需要进行一定的学习和理解才能熟练使用。这对于不是很精通这项技术的运维工程师来说是一个很大的难点。
2. 镜像管理
在离线环境中,无法直接从互联网下载 Kubernetes 的镜像和依赖项。因此需要将所需的镜像和依赖项提前下载到本地,并将其导入到 Kubernetes 集群中。这可能需要花费一定的时间和精力。
3. 环境配置
在离线环境中,需要手动配置 Kubernetes 所需的所有组件和依赖项,例如 etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy 等等。这需要在部署时有较高的运维经验来对环境初始化问题进行排查和解决。
4. 网络设置
Kubernetes 集群需要正确配置网络设置,以便容器之间可以互相通信。在离线环境中,网络设置可能会更加复杂,需要仔细设置才能确保正常运行。
基于以上常见的痛点,我们可以看出,在离线环境中用容器化技术进行交付还是存在较高的学习门槛和配置难度,达不到开箱即用闪电交付的效果。
解决方案
1. 使用 Sealos 实现一键打包闪电交付?
Sealos 可以像 Docker 那样把整个集群制作成镜像,实现分布式软件的构建、交付、运行。
Sealos 项目地址:https://github.com/labring/sealos
2. 应用场景
- Kubernetes 集群安装
- Kubernetes 集群、数据库、中间件、SaaS 应用整体打包,一键交付
- 离线交付,多架构支持,国产化支持
- 各种在 Kubernetes 上编排的分布式应用交付
3.部署架构图
4. 编写一个和 Dockerfile 很类似的 Kubefile,就可以构建一个集群镜像,使用 Clusterfile 去运行一个集群
实战部署
1. 下载 Sealos 二进制文件
$ wget https://github.com/labring/sealos/releases/download/v4.1.4/sealos_4.1.4_linux_amd64.tar.gz \&& tar zxvf sealos_4.1.4_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin
2. 编写 kubefile 并构建集群镜像
说明:此处基于 Kubernetes1.24.0 封装含有 Calico 的镜像作为演示,实际的业务镜像也可以基于此方式进行封装即可。
FROM labring/kubernetes:v1.24.0-amd64
COPY cni ./cni
CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml"]
$ sealos build -t registry.cn-hangzhou.aliyuncs.com/flowyun/kubernetes-calico:latest -f Kubefile .
3. 保存构建出的镜像
$ sealos save -o Kubernetes.tar registry.cn-hangzhou.aliyuncs.com/demo/Kubernetes-calico:latest
4. 拷贝 sealos 二进制文件和集群镜像到离线环境
$ tar zxvf sealos_4.1.4_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin
$ sealos load -i Kubernetes.tar
5. 查看集群镜像是否导入成功
$ sealos images
6. 安装集群
说明:以单机安装为例,集群安装同理。
$ sealos run registry.cn-hangzhou.aliyuncs.com/demo/Kubernetes-calico:latest --single
7. 验证集群
$ kubectl get pod -A
8.访问业务系统验证
效率对比
部署服务名称 | 传统交付方式部署耗时 | Sealos 闪电交付方式部署耗时 |
---|---|---|
MariaDB数据库 | 1’hour | 1’min |
中间件(redis、nacos) | 1’hour | 30’min |
Kubernetes搭建 | 4’hour | |
Kubernetes组件配置调试 | 2’hour | |
业务系统服务 | 2’hour | |
12’hour/人 | 31’min/人 |
七、总结
- Sealos 可以快速部署和升级 Kubernetes 集群。由于 Sealos 使用离线包来提供软件,因此不需要依赖 Internet 连接,可以在离线环境下快速部署和升级集群,提高了部署效率。
- Sealos 在离线环境下运行非常稳定和可靠。由于不受外部网络波动等影响,Sealos 的设计使得它在离线环境下运行时非常稳定和可靠,提高了可靠性。
- Sealos 使用离线包,不需要从 Internet 下载软件,因此不易受到网络攻击和恶意软件的影响,提高了安全性。
- Sealos 使用标准的 Kubernetes YAML 文件来创建集群,这意味着用户可以根据自己的需求进行定制和扩展,从而提高了灵活性。
- Sealos 使用简单,不需要复杂的配置和命令,只需按照指南进行操作即可,降低了学习和使用的门槛,提高了易用性。
Sealos 是一款功能强大、易于使用的工具,可以帮助企业在离线环境中实现高效的容器化交付。Sealos 可以快速部署和升级 Kubernetes 集群,在离线环境下运行非常稳定和可靠,使用离线包,不需要从 Internet 下载软件,因此不易受到网络攻击和恶意软件的影响,使用标准的 Kubernetes YAML 文件来创建集群,降低了学习和使用的门槛,提高了易用性。
相关文章:

使用 Sealos 在离线环境中光速安装 K8s 集群
作者:尹珉。Sealos 开源社区 Ambassador,云原生爱好者。 当容器化交付遇上离线环境 在当今快节奏的软件交付环境中,容器化交付已经成为许多企业选择的首选技术手段。在可以访问公网的环境下,容器化交付不仅能够提高软件开发和交付…...

算法-模拟
1、旋转数组 public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 旋转数组* param n int整型 数组长度* param m int整型 右移距离* param a int整型一维数组 给定数组* return int整型一维数组*/…...

如何通过Instagram群发消息高效拓展客户?
之前小S有跟大家说过关于独立站+Instagram如何高效引流,发现大家都对Instagram的话题挺关注的。Instagram作为全球最受欢迎的社交媒体之一,对于许多商家和营销人员来说,Instagram是一个不可忽视的营销平台,他们可以通过…...

基于springboot实现多线程抢锁的demo
1、本代码基于定时调度和异步执行同时处理,如果只加异步处理,会导致当前任务未执行完,下个任务到点也不会触发执行 Scheduled(fixedRate 50_000)Asyncpublic void testThread() throws Exception{ZkLock lock new ZkLock(zkJob.getZK(), &q…...

Java I/O模型发展以及Netty网络模型的设计思想
Java I/O模型发展以及Netty网络模型的设计思想 I/O模型Java BIOJava NIOJava AIO NIO Reactor网络模型单Reactor单线程模型单Reactor多线程模型主从Reactor多线程模型 Netty通信框架 前言: BIO、NIO的代码实践参考:Java分别用BIO、NIO实现简单的客户端服…...

智能电网时代:数字孪生的崭露头角
随着科技的不断进步,数字孪生已经开始在电力行业崭露头角,为这个关键的行业带来了前所未有的机遇和潜力。本文就带大家了解一下数字孪生在哪些方面为电力行业做出改变,以及未来的创新应用。 首先,数字孪生可以提高电力系统运营效率…...

每日一题 501二叉搜素树中的众数(中序遍历)
题目 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST 满足如下定义&a…...

测试理论与方法----测试流程第三个环节:设计测试用例
测试流程第三个环节:设计测试用例:怎么测<——>测试需求的提取:测什么 ### 5、测试用例 描述:测试用例(TestCase):是一份关于【具体测试步骤】的文档,是为了达到最佳的测试效果或高效揭露软件中潜藏的…...

C++多态案例2----制作饮品
#include<iostream> using namespace std;//制作饮品的大致流程都为: //煮水-----冲泡-----倒入杯中----加入辅料//本案例利用多态技术,提供抽象类制作饮品基类,提供子类制作茶叶和咖啡class AbstractDrinking {public://煮水//冲水//倒…...

机械零件保养3d模拟演示打消客户购买顾虑
复杂机械的工作运转是复杂的,想要对机械有深度的理解和迭代,必须了解它的运转原理及参数,复杂机械运行原因教学存在着不可视、系统庞杂及知识点多等弊病,3D虚拟展示是基于web3d网页运行的三维页面,可以将复杂机械运行过…...

SpringBoot的自动装配源码分析
文章目录 一:什么是自动装配二、springboot的启动流程1.调用SpringApplication()的构造方法2.执行核心run方法()3.执行核心prepareContext()4.执行核心refreshContext()5…...

Linux常用命令——csplit命令
在线Linux命令查询工具 csplit 将一个大文件分割成小的碎片文件 补充说明 csplit命令用于将一个大文件分割成小的碎片,并且将分割后的每个碎片保存成一个文件。碎片文件的命名类似“xx00”,“xx01”。csplit命令是split的一个变体,split只…...

React 组件的3大属性: state
state 一、理解二、用途三、使用3.1、类初始化3.2、函数初始化 四、状态读更4.1、组件内部状态管理和数据更新4.2、state 和 props 一起使用 一、理解 组件被称为"状态机", 页面的显示是根据组件的state 属性的数据来显示。 state 是一个用于存储和管理组件内部数据的…...

vscode 上传项目到gitlab
第一步初始化项目 如果没有创建过分支(创建分支这里不记录),默认是master分支: ①将所需要的上传的文件添加到暂存区,如图: ②填写一下注释信息,将暂存区的文件上传到本地分支(没有创…...

[羊城杯 2020] easyphp
打开题目,源代码 <?php$files scandir(./); foreach($files as $file) {if(is_file($file)){if ($file ! "index.php") {unlink($file);}}}if(!isset($_GET[content]) || !isset($_GET[filename])) {highlight_file(__FILE__);die();}$content $_GE…...

QT 常用类与组件
0 思维导图 1 信息调试类(QDebug) #include "widget.h" #include<iostream> //printf #include<QDebug> //qDebuf using namespace std; //coutWidget::Widget(QWidget *parent): QWidget(parent) {//输出函数//使用…...

C#控制台连接Mysql数据库,有配置数据库连接字符串的配置文件
C#控制台连接Mysql数据库,有配置数据库连接字符串的配置文件 实现功能 读取..txt 中的配置文件,来初始化连接字符串让连接字符串的配置文件不存在会主动创建默认的连接字符串 注意点: 需要引用Newtonsoft使用mysql 代码如下 using Syst…...

PowerBuilder连接SQLITE3
PowerBuilder,一个古老的IDE,打算陆续发些相关的,也许还有人需要,内容可能涉及其他作者,但基本都是基于本人实践整理,如涉及归属,请联系. SQLite,轻型数据库,相对与PowerBuilder来说是个新事务,故发数来,以供参考. PB中使用OLE Microsoft OLE DB方式进行连接,如下 // Profile…...

Git 基本原理和常用操作
Git Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源的版本控制软件。 Git 常用操作 git 提交流程:工作区 -> git add 到暂存区 -> gi…...

单元测试和集成测试的区别
单元测试和集成测试是软件开发中常用的两种测试方法,它们的主要区别如下: 范围不同:单元测试关注于对软件中的最小功能单元进行测试,通常是对独立的函数、方法或类进行测试。而集成测试则更加综合,涉及多个模块、组件或…...

node基础概念
前言:可以让别人访问我们的网页,可以开发服务端应用、工具类应用、桌面端应用(electron) 1. 计算机基础 概念:CPU 内存 硬盘 主板 显卡 2. 进程和线程 概念:进程是一个程序的执行,线程组合形…...

ArcGIS Maps SDK for JS(二):MapView简介----创建2D地图
文章目录 1 AMD 引用 ArcGIS Maps SDK for JavaScript2 加载相应模块3 创建地图4 创建 2D 视图 view5 确定页面内容6 CSS 样式7 完整代码 本教程使用 AMD 模块,指导您如何在二维地图视图中创建一个简单的地图。 1 AMD 引用 ArcGIS Maps SDK for JavaScript 在 <…...

知识图谱推理研究综述9.3
综述分类 根据样本量大小的不同,将知识图谱推理方法分为多样本推理、少样本推理和零与单样本推理 KG定义:(Y) 知识图谱是以图的形式表示真实世界的实体与关系之间关系的知识库。 具体来说知识图谱是通过将应用数学、图形学、信…...

详细介绍c++中的类
C 中的类是面向对象编程的基本概念,它指的是一种能够封装数据和方法的用户定义数据类型。类是程序中一个重要的概念,它允许程序员通过定义类来实现代码复用、模块化和继承等特性。 C 中的类由以下部分组成: Data members:成员变量…...

C语言:扫雷小游戏
文接上一篇博文C语言:三子棋小游戏。本篇博文是使用C语言来实现扫雷小游戏的。这里不对扫雷的规则进行赘述。玩家通过键盘输入坐标来探雷。博主在实现扫雷之前从未看过扫雷实现的相关视频,所以这里实现的扫雷完全是博主的原生思路,具有逻辑性…...

VScode SSH无法免密登录
配置方法 引用高赞贴:点击 debug方法 连不上需要找到问题原因,看ssh的 log Linux服务器:2222是我们指定的端口,可以是1234等 sudo /usr/sbin/sshd -d -p 2222windows这边:端口号要一致 ssh -vvv ubuntusername192…...

Spring Cloud--从零开始搭建微服务基础环境【四】
😀前言 本篇博文是关于Spring Cloud–从零开始搭建微服务基础环境【四】,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,…...

FreeRTOS操作系统中,断言输出 Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,766 原因
分析:Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,766 出现这个原因表示,你现在系统某个中断的优先级高于FreeRTOS可管理的优先级范围,一旦你这个中断触发,断言的信息即你串口就会输出这个条语句(前提你串口…...

【Linux】进程间通信与同步
IPC进程间通信 无名管道pipe(血缘关系的进程)有名管道fifo (无血缘关系的进程)共享内存信号(开销小)消息队列信号量套接字 进程间同步 文件锁信号量...

SpringBoot 统一功能处理
目录 一、用户登录权限验证 1.1 SpringAOP可以进行处理吗? 1.2 创建自定义拦截器 1.3 将自定义拦截器配置到系统配置项中 1.4 拦截器的实现原理 1.4.1 实现原理源码分析 1.5 统一访问前缀添加 二、统一异常处理 2.1 为什么需要使用统一异常处理?…...