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

【经验分享】容器云搭建的知识点

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了
虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的
由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公开出来

欢迎各位大佬指正文章内容

在这里插入图片描述

涉及技术比较多,只对技术进行简单介绍,不深入解释

概念

容器云(Container Cloud)是指基于容器技术提供的云计算服务,可以用于快速部署、管理和扩展应用程序。容器技术可以将应用程序和其依赖项打包到一个独立的可移植容器中,使得应用程序可以在任何环境中运行。容器云是一个概念,并不具体指什么。

kubernetes(K8s)是一个开源的容器编排引擎,用于自动部署、扩展和管理容器化应用程序。它可以帮助用户简化容器集群的管理,提高应用程序的可靠性和可扩展性。

kubeeasy是一个辅助工具,旨在简化 Kubernetes 的使用和管理。帮助用户更轻松地使用 Kubernetes,并且可以减少一些配置的复杂性,提高用户的工作效率。


详解:

kubernetes因为名字太长,又被称作k8s(因为中间有8个字母),它是作为容器编排工具存在的

我们常用的容器有docker、containerd,他们都有属于自己的客户端服务器端

容器编排工具是为了提供统一的编排环境(编排工具不止有k8s,只是它最为出名)

在之前,我们需要在他们的客户端(如:crictl、nerdctl)进行我们的操作

同时有docker、containerd每一个容器都有自己的客户端很麻烦

k8s应用场景:
在传统部署项目中,所有功能都集成到一个服务器上,访问量一大就会大大增加服务器的负担

将功能分开来部署到多个服务器上,又造成了维护和更新的负担,需要到各个服务器上手动执行命令

k8s的出现,解决解决了这个麻烦的问题

k8s介于应用服务和服务器之间,能够运用策略,协调和管理多个应用服务

只需要一个yaml文件定义应用的部署顺序等信息,就能自动部署应用到各个服务器上,实现自动扩缩容、挂了后重新部署

k8s会将我们的服务器划分成两部分:控制平面(control plane)、工作节点(node)

控制平面负责控制工作节点,工作节点负责运行各个应用服务

k8s的服务原理

控制平面:

里面有一个api server 会提供一个api给我们

同时 api server 掌管着scheduler(调度器)、controller mgr(控制器管理器)

以前我们需要到处看哪台服务器资源充足,现在这个工作交给scheduler(调度器)完成

以前我们对服务器的创建、关闭服务,现在交给controller mgr(控制器管理器)完成

这些功能都会产生数据,这些数据都会保存至存储层(ETCD)

总的来说,控制平面内部有api server、scheduler、controller mgr、ETCD
工作节点:(可以是裸机服务器、虚拟机)

多个应用服务共享一台主机上的计算资源

只需将代码打包成容器镜像(将代码及其所需环境打包),就能一行命令将其部署

containerd runtime (容器运行时组件)负责下载和部署镜像

每一个应用服务都可以看成一个container

一般还搭配【日志收集器container】【监控采集器container】,这些container共同构成一个个pod

pod们运行在node上,pod可以从一个node调度到另一个node,还能进行重启、扩缩容的操作

所以pod是k8s中最小的调度单位

控制平面的controller mgr会控制node创建和关闭服务,kubelet就是node接收命令的组件

kube proxy是负责node之间的网络通信,负责将请求从节点级别路由到特定 Pod 中的容器

总的来说,工作节点内部有containerd runtime、kubelet、kubeproxy、pod

k8s的实际应用

控制平面和工作节点共同构成一个cluster(集群)

为了集群内部的服务能让外部用户使用,还需要提供一个ingress(入口控制器)

之前说到api server 提供了一个api给我们使用

我们可以通过kubectl来执行命令,kubectl会调用k8s的api部署服务

# 查看支持快速创建的资源
kubectl create --help# 重定向至yaml文件,并模拟执行
kubectl create deployment gitlab \
--image=gitlab/gitlab-ce:latest \
--port=80 \
--dry-run \
-oyaml > gitlab.yaml
kubectl apply -f xxx.yaml

kubectl会读取并解析yaml文件,发送给api serverapi server会驱使scheduler去通过ETCD提供的数据去寻找node,然后让control mgr 去控制node创建服务,kubelet收到control mgr的命令后,会驱使containerd runtime去拉取镜像、创建容器,最终完成pod的创建。完成部署

与传统服务部署的区别

传统部署方式,用户直接发送HTTP请求,就直接用到我们的服务,

k8s部署的服务,用户发送的请求会先到ingress(入口控制器)d到达k8s内部某个node的kube proxy上,再找到对应的pod,然后再转发到容器内的服务中,处理结果原路返回

个体由大到小为集群->node->pod->容器


本地实验注意:

在本地实验环境中,要添加网关,目前测试4G运存能够运行(开启SWAP,但是很慢)

如果要克隆,必须克隆《搭建本地训练环境知识点》中的【快照一:准备启动】快照

一、部署k8s集群

系统环境准备[两个节点都要做]

①setenforce 0

②sed -i “s/SELINUX=enforcing/SELINUX=disabled/g” /etc/selinux/config

③把网卡的UUID删除掉

本步骤是由官方提供的打包好的软件包,因此只需要做三步,关于k8s详细知识不在这里详述

上传软件包后,挂载到/mnt/,然后复制至/opt下(当然复制到哪里都行,只要能记住)

mount chinaskills_cloud_paas_v2.0.2.iso /mnt/
cp -rfv /mnt/* /opt/
# 取消挂载,养成习惯
umount /mnt/
mv /opt/kubeeasy /usr/bin/kubeeasy

kubeeasy是一个辅助快速部署k8s的工具,接下来使用工具快速部署

1,安装依赖

因为是两个节点都是一样安装依赖

所以参数host直接指明两个主机ip即可

[root@master ~]# kubeeasy install depend \
> --host 192.168.100.20,192.168.100.21 \
> --user root \
> --password 000000 \
> --offline-file /opt/dependencies/base-rpms.tar.gz 

2,配置ssh免密钥

这里就要分清主次了,master就是master,worker就是worker

[root@master ~]# kubeeasy create ssh-keygen \
> --master 192.168.100.20 \
> --worker 192.168.100.21 \
> --user root --password 000000

3,安装kubernetes集群

这里也要分清主次

[root@master ~]# kubeeasy install kubernetes \
> --master 192.168.100.20 \
> --worker 192.168.100.21 \
> --user root \
> --password 000000 \
> --version 1.22.1 \
> --offline-file /opt/kubernetes.tar.gz 

等待完成即可

二、部署Istio服务网格

文档官方中文文档

在刚刚的k8s中说到,k8s用于管理各个微服务,各个微服务都有一个代理接收apiserver的指令

istio其实也是一个代理,istio同样将服务网点分为控制平面工作节点(Envoy Sidecar)

控制平面包括以下组件:

  1. Pilot:负责服务发现、流量路由和负载均衡。
  2. Mixer:处理访问控制、日志记录和指标收集等策略和遥测功能。
  3. Citadel:提供身份验证和授权功能。
  4. Galley:负责配置管理和分发。

工作节点(称为Envoy Sidecar)则是每个微服务容器旁边的代理,它负责处理入站和出站的网络流量,并与控制平面进行通信。

工作节点的代理一般位于pod中,所有容器的流量进出都要经过他

--istio表示部署istio服务,而后面那个istio表示名字,可自定义

kubeeasy add --istio istio

命名空间是 K8s 中用于隔离和组织集群资源的一种方式,可以更好地管理和组织您的应用程序和服务,就像文件夹一样,基于我们istio的功能

kubectl create namespace images
kubectl label namespace images istio-injection=enabled

未来部署到这个namespace中的所有pod都将被注入Envoy代理

Istio的控制平面通过识别特定的标签来决定哪些Pod需要被注入Envoy代理

没有为命名空间添加相关标签,部署在其中的Pod将不会被自动注入Envoy代理,也无法享受到Istio提供的流量控制、安全性等功能。

三、kubevirt虚拟化

KubeVirt 是 Kubernetes 的虚拟化插件

应用场景:
虚拟机技术允许在物理硬件上创建一个或多个虚拟的计算环境,每个虚拟环境都可以运行自己的操作系统和应用程序,相互之间相互隔离,K8s最初是设计用于容器化应用程序的调度和管理,没有直接支持虚拟机的概念,所以在k8s集群中运行的传统虚拟机项目,仍然需要采取传统的运维手法,为了实现k8s统一调度管理,就需要安装KubeVirt插件

--virt表明部署kubevirt,后面那个是名称,可自定义

kubeeasy add --virt kubevirt 运行它将执行:
1,检查必要的命令和连接是否存在。
2,应用kubevirt-operator.yaml文件来安装KubeVirt操作符。
3,等待KubeVirt组件的就绪状态。
4,应用kubevirt-cr.yaml文件来创建KubeVirt自定义资源。
5,等待KubeVirt组件的就绪状态。
6,应用multus-daemonset.yaml文件来安装Multus CNI插件。
7,等待Multus CNI插件的就绪状态。
8,应用multus-cni-macvlan.yaml文件来配置Macvlan网络。
9,检查KubeVirt组件的运行状态。

四、Harbor镜像仓库部署

Harbor 是一个开源的企业级容器镜像仓库,用于存储、分发和管理 Docker 镜像及其他容器相关的资源

Harbor 存储的是 Docker 镜像及其相关的资源,这些镜像可以由开发人员构建、推送到 Harbor,或者从外部镜像仓库拉取到 Harbor 中进行存储和管理。当容器运行时需要使用镜像时,它们可以从 Harbor 中拉取所需的镜像到节点的本地镜像存储中,并在容器内运行。

--registry表示部署仓库服务,而后面那个harbor表示部署什么仓库,不可随便自定义,必须在已配置的镜像仓库中,在文件config.yaml

[root@k8s-master-node1 ~]# kubeeasy config show
Current config:
default_registry: harbor.mydomain.com
registries:
- name: harborurl: https://harbor.mydomain.com
- name: dockerhuburl: https://registry.docker.com# 指定查看某个镜像仓库
[root@k8s-master-node1 ~]# kubeeasy registry show harbor
Registry Information:
Name: harbor
URL: https://harbor.mydomain.com
Credentials: username=xxxx password=xxxx
kubeeasy add --registry harbor运行它将执行:
1,检查 Docker 是否已安装,并显示 Docker 版本为 20.10.14。
2,检查 Docker Compose 是否已安装,并显示 Docker Compose 版本为 2.2.1。
3,加载 Harbor 镜像。
4,准备 Harbor 的配置文件。
5,启动 Harbor。

相关文章:

【经验分享】容器云搭建的知识点

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…...

Java对集合的操作方法

1. 数组转集合 //数组转集合 String[] split quickRechargeAmount.split(","); List<String> stringList Stream.of(split).collect(Collectors.toList()); 2. 对List集合数据内容进行分组 //对List集合数据内容进行分组 Map<String, List<LiveAppGi…...

FreeRTOS--基础知识

FreeRTOS基础知识 裸机与RTOS的特点&#xff1a; 裸机&#xff1a; 裸机又称为前后台系统&#xff0c;前台系统指的是中断服务函数&#xff0c;后台系统指的是大循环&#xff0c;即应用程序。 1、实时性差&#xff1a;应用程序轮流执行 2、delay&#xff1a;空等待&#xff…...

Node的学习以及学习通过Node书写接口并简单操作数据库

Node的学习 Node的基础上述是关于Node的一些基础&#xff0c;总结的还行&#xff1b; 利用Node书写接口并操作数据库 1. 初始化项目 创建新的项目文件夹&#xff0c;并初始化 package.json mkdir my-backend cd my-backend npm init -y2. 安装必要的依赖 安装Express.js&…...

【Linux探索学习】第二十二弹——用户缓冲区:深入解析操作系统中数据交互时的缓冲区机制

Linux学习笔记&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 前面两章我们已经讲了一些文件操作和文件重定向问题&#xff0c;以及一些相关的知识点&#xff0c;比如文件在内存中的存储位置&#xff0…...

Cesium-(Primitive)-(CylinderOutlineGeometry)

CylinderOutlineGeometry 以下是 CylinderOutlineGeometry 类的构造函数属性,以表格形式展示: 属性名类型默认值描述lengthnumber圆柱体的长度。topRadiusnumber圆柱体顶部的半径。bottomRadiusnumber圆柱体底部的半径。slicesnumber128可选,圆柱体周长的边数。numberOfVert…...

【ETCD】【源码阅读】深入分析 storeTxnWrite.Put方法源码

该方法是 storeTxnWrite 类型中的核心方法&#xff0c;负责将键值对存储到数据库&#xff0c;同时处理键的元数据&#xff08;如版本、修订号、租约&#xff09;并管理租约关联。 目录 一、完整代码二、方法详解方法签名1. 计算修订号并初始化变量2. 检查键是否已存在3. 生成索…...

MySQL技术:深入理解索引与优化

MySQL是一个广泛使用的开源关系型数据库管理系统。它以其高性能、可靠性和易用性而闻名。在数据库操作中&#xff0c;查询优化是一个非常重要的环节&#xff0c;而索引是实现查询优化的关键技术之一。本文将深入探讨MySQL中的索引原理、类型以及如何优化索引以提高数据库性能。…...

【广东-东莞】《东莞市政府投资信息化项目造价指南》-省市费用标准解读系列26

2023年6月27日&#xff0c;东莞市发展和改革局发布《东莞市政府投资信息化项目造价指南&#xff08;试行&#xff09;》&#xff0c;此指南由东莞市政府投资项目评审中心编制&#xff0c;指南旨在完善东莞市为规范政府投资信息化项目造价计费方式&#xff0c;高质量、高效率推进…...

8、基于SpringBoot的房屋租赁系统

摘 要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符…...

SLM510A系列——24V,15到150mA单通道可调电流线性恒流LED驱动芯片

SLM510A 系列产品是单通道、高精度、可调电流线性恒流源的 LED 驱动芯片&#xff0c;在各种 LED 照明产品中非常简单易用。其在宽电压输入范围内&#xff0c;能保证极高的输出电流精度&#xff0c;从而在大面积的光源照明中&#xff0c;都能让 LED 照明亮度保持均匀一致。 由于…...

深度学习试题及答案解析(一)

1. 一幅256*256的图像&#xff0c;若灰度级数为16&#xff0c;则存储它所需的比特数是&#xff08;&#xff09; 2. 在深度学习中&#xff0c;涉及大量的矩阵相乘&#xff0c;现在需要计算三个稠密矩阵A&#xff0c;B&#xff0c;C的乘积ABC,假设三个矩阵的尺寸分别为m∗n&…...

【钉钉群聊机器人定时发送消息功能实现】

Java实现 钉钉群聊机器人定时发送消息功能 钉钉群聊准备工作钉钉发起群聊创建项目群打开钉钉群聊设置打开机器人管理选择Webhook机器人添加机器人安全设置保存Webhook地址&#xff08;重点是token&#xff09; 项目代码实现添加依赖启动类添加定时任务启动扫描编写调度任务定义…...

uni-app多环境配置动态修改

前言 这篇文章主要介绍uniapp在Hbuilderx 中&#xff0c;通过工程化&#xff0c;区分不同环境、动态修改小程序appid以及自定义条件编译&#xff0c;解决代码发布和运行时手动切换问题。 背景 当我们使用uniapp开发同一个项目发布不同的环境二级路径不同时&#xff0c;这时候…...

verilog代码连线集成工具的实践

目录 引言 代码解析 解析器的需求 数据结构 基础class 集合class&#xff1a; 界面 模块例化里界面 连线界面 连线界面示例 消息传递 引言 工作中经常需要开发很多自动化的脚本或者小工具来提升开发效率。在没有读《Cad Frameworks: Principles And Architecture》…...

【深入STL:C++容器与算法】深度解析string类的使用

文章目录 1️⃣什么是stringstring的设计以及编码问题 2️⃣string的重要接口&#x1f4ab;&#x1f4ab;一、string的初始化二、string的赋值三、string的长度四、string元素获取1. char& at(size_t pos)2. operaotr []3. front和back 五、迭代器1. 什么是迭代器2. 范围fo…...

【ChatGPT】解锁AI思维链:如何让机器像人类一样思考?

在人工智能领域&#xff0c;我们一直在追求让机器像人类一样思考。然而&#xff0c;即使是最先进的AI&#xff0c;也常常被诟病缺乏“常识”&#xff0c;难以理解复杂问题&#xff0c;更不用说像人类一样进行逻辑推理和解决问题了。最经常的表现就是遇到不会的地方&#xff0c;…...

用 Python 从零开始创建神经网络(十七):回归(Regression)

回归&#xff08;Regression&#xff09; 引言1. 线性激活&#xff08;Linear Activation&#xff09;2. 均方误差损失&#xff08;Mean Squared Error Loss&#xff09;3. 均方误差损失导数&#xff08;Mean Squared Error Loss Derivative&#xff09;4. 平均平方误差 (MSE) …...

gentoo安装Xfce桌面

一、安装Xfce 1.选择一个配置文件 具体步骤可参见笔者的另一篇博客https://blog.csdn.net/my1114/article/details/143919066&#xff0c;配置文件选择24. 2.安装Xfce (1)root #emerge --ask xfce-base/xfce4-meta 第一次启动登录后时可能还需starx来启动X11 (2)安装slim&#…...

阿尔茨海默症数据集,使用yolo,voc,coco格式对2013张原始图片进行标注,可识别轻微,中等和正常的症状

阿尔茨海默症数据集,使用yolo&#xff0c;voc&#xff0c;coco格式对2013张原始图片进行标注&#xff0c;可识别轻微&#xff0c;中等&#xff0c;严重和正常的症状 数据集分割 训练组100&#xff05; 2013图片 有效集&#xff05; 0图片 测试集&#xf…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...