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

【云原生】初识 Kubernetes — pod 的前世今生

在这里插入图片描述

目录标题

  • 前言
  • 🐳 Kubernetes到底是什么?
    • 🐬 K8s 的由来
    • 🐬K8s 的工作方式
    • 🐬 K8s 主要组件
        • 🐋Master 组件
        • 🐋Node 组件
  • 🐳 pod 是什么?
    • 🐬pod 的概念
    • 🐬控制管理器
        • 🐟 控制管理--ReplicationController
        • 🐟 控制管理--HPA(Horizontal Pod Autoscaling)
        • 🐟 StatefulSet
        • 🐟 DaemonSet
        • 🐟 Job
    • 🐬客户端(Client)— pod
  • 总结

前言

跟着博主从0到1学习K8s! 我行,你也行!

该文章是我的系列专栏的第一篇文,首先一下 Kubernetes ,然后进行pob 的详细讲解。

🐳 Kubernetes到底是什么?

下列介绍部分来自网络,如有侵权,告知删除!谢谢

🐬 K8s 的由来

大家或许听过 K8s,其实他就是 Kubernetes 的简称。那么这个简称是如何得来的呢?他的前世到底是什么?

其实这个简称的由来非常简单,我这种专职摸鱼户非常喜欢这种偷懒的方式,K 就是 Kubernetes 的首字母,s 是 Kubernetes 的末尾字母,数字8则是表明在 K 和 s 之间的字符 ‘ubernete’ 个数为8。所以我们简称其为K8s

🐬K8s 的工作方式

那么K8s为什么会被创造出来呢?

在他诞生之前,传统的应用部署方式是通过插件或脚本来安装应用。但是这种做法不利于应用的升级更新/回滚等操作,虽然我们可以通过虚拟机进行实现某些功能,但是移植性不强。

至此,我们的K8s应运而生!

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

(1) K8s 通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

(2) 容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。

🐬 K8s 主要组件

在K8s的整体框架中,包含Master 组件、Node 组件,Master组件是提供集群的管理控制中心。节点组件运行在Node,提供Kubernetes运行时环境,以及维护Pod。

🐋Master 组件

Master 组件里面都有什么呢?
  1. kube-apiserver (统一的服务访问入口)
  2. ETCD (写入集群信息)
  3. kube-controller-manager
  4. cloud-controller-manager
  5. kube-scheduler
  6. 插件 addons
    6.1 DNS (创建域名对应解析)
    6.2用户界面
    6.3容器资源监测
    6.4Cluster-level Logging

🐋Node 组件

Node 组件里面都有什么呢?
  1. kubelet (直接与容器引擎交互 实现生命周期管理)
  2. kube-proxy (写入规则 、实现服务映射访问)
  3. docker
  4. RKT
  5. supervisord
  6. fluentd

至此对于 Kubernetes 的初步认识就告一段落了,接下来我们详细讲解一下 “ pod ”

🐳 pod 是什么?

🐬pod 的概念

博主比较倾向的pod的分类是自主式 pod 和控制器管理的 pod

自主式 pod 字面意思就是自由的pod,可以将不受控制器管理的pod称为自由式 pod,这里的自由就是存在与否不会被在意,消失后也不会被控制器增加,多了也不会被消除。

pod是有生命周期的,如过时间过长是会死亡的!具体后续会讲到

那么控制器管理的pod的意思就呼之欲出了!即为受控制器管理的pod。被控制器拿捏的妥妥的 (ง •_•)ง

🐬控制管理器

接下来我们介绍一下pod内各个容器与pause的关系。

在这里插入图片描述

从上图中我们可以看出,pod中的 container可以有很多个( n>=1 ),但是有一点,他们共用 pause 的地址段,即为地址资源共享。

在一个pod里面,既共享地址段又共享存储卷。

那么接下来我们介绍一下受控制器管理的 pod。首先我们需要了解这个控制管理。

🐟 控制管理–ReplicationController

ReplicationController是一种Kubernetes资源,可确保它的pod始终保持运行状态。他是用来确保容器应用副本的数量始终保持在用户定义的副本数。如果pod异常退出或者因任何原因消失(例如节点从集群中消失或由于该pod被从节点中逐出),则ReplicationController会注意到缺少了pod并创建替代pod。

我用接下来的两幅图来解释一下这个过程。

在这里插入图片描述

假设上述为正常运行的节点1和节点2,我们节点1中的pod 2是受控制器控制的,而pod 1没有。


在这里插入图片描述

此时,节点 1出现问题了,那么属于自由式pod 的pod 1只能仍其消失,但是pod 2就不同了,他是被控制器控制的,当节点 1连带着pod 2消失后,ReplicationController 会自动在节点2生成pod 2’ 的替代,使得用户设定的副本数保持不变。


在新版本Kubernetes 中,建议使用ReplicaSet来代替ReplicationController

虽然ReplicaSet可以独立使用,但是一般还是使用Deployment来自动管理ReplicaSet,因为这样不需要关系兼容问题。(比如ReplicaSet不支持滚动更新,但是Deployment支持)

在此介绍一个概念:滚动更新(rolling-update)

当我们想要更新一个 pod 时,我们可以先建立一个新的 pod,因为需要保持副本数一定,所以我们需要删除一个 pod ,这时我们将旧的 pod 删除,即可实现更新。

接下来博主用下列图像讲解Deployment是如何实现自动管理

在这里插入图片描述

此时我们有版本1的两个pod(此时ReplicaSet为旧版本) ,我们想要将其滚动更新为版本2,更新过程如下


在这里插入图片描述

首先根据滚动更新概念,我们先创建一个新的ReplicaSet 2,然后新建一个V2版本的 pod,然后删除旧版本。


在这里插入图片描述

和上述步骤一致,将另一个 pod 新建后,删除旧的 pod

其实因为存在回滚机制,pod 并不是删除消失,更贴切的说法是停用


🐟 控制管理–HPA(Horizontal Pod Autoscaling)

Horizontal Pod Autoscaling仅适用于Deployment 和 ReplicaSet 。在V1中支持 pod 的 cpu 利用率进行扩缩容,在vlalpha中支持根据内存以及用户定义的 metric 进行扩缩容。

接下来,依旧是通过图解来介绍这个控制过程 🐼

在这里插入图片描述

上述我们看到HPA控制了RS( ReplicaSet ),他的控制过程是什么呢?

我们在HPA中设定CPU利用率的一个阈值XX,以及最大pod数MAX(X)和最小pod数MIN(X)

这里的XX表示任意数,是人为设定的

那么这个CPU利用率的阈值是如何影响HPA的控制呢,当我们的CPU利用率太高时,超过设定的XX阈值,那么说明计算机忙不过来了,我们需要新建pod来分担压力。所以此时HPA会控制RS新建pod,当然如果CPU利用率第于阈值,RS会回收pod

这个MAX和MIN是如何控制呢?

当CPU利用率高于阈值,我们需要新建pod,但是不能无限制新建,所以这个MAX就是最大pod数,同理我们回收也不可以小于MIN最小值。

综上所述,我们可以利用HPA实现自动水平扩缩!


🐟 StatefulSet

StatefulSet是为了解决有状态服务的问题,因为在此之前Deployments和ReplicaSets是为无状态服务而设计,他的应用场景如下:

  • 稳定的持久化存储,就是 Pod在重新调度后还是能访问到相同的持久化数据
  • 稳定的网络标志,就是 Pod 重新调度后其 PodName和 HostName 不变,基于Headless Service来实现
  • 稳定的持久化存储,就是Pod重新调度后还是能访问到相同的持久化数据
  • 稳定的网络标志,就是Pod 重新调度后其PodName和主机名不变

🐟 DaemonSet

DaemonSet是为了确保节点上运行一个 Pod 的副本。当有节点加入集群时,会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除DaemonSet 将会删除它创建的所有Pod。就相当于DS(DaemonSet)是一个管理员,负责节点上不能没有pod,当然如果DS这个管理员被删除的话,他的小弟pod也会被回收。
使用DaemonSet 的一些典型用法:


🐟 Job

Job有点像是批量化管理pod,我们可以设定pod正常执行次数,只有当pod正常执行次数达标后才允许Job结束。

Cron Job 是其中基于时间管理的,基于时间去管理pod。


🐬客户端(Client)— pod

Client是通过访问service的IP加端口,然后由service连接pod。(利用好service我们可以进行pod-pod的交流)

一般来讲都是 负载+缓存+程序+数据库

总结

此篇只是进行入门介绍,等后续文章进行后续讲解,期待关注阿酱,收藏专刊喔!超级干货等你来看!

在这里插入图片描述

相关文章:

【云原生】初识 Kubernetes — pod 的前世今生

目录标题前言🐳 Kubernetes到底是什么?🐬 K8s 的由来🐬K8s 的工作方式🐬 K8s 主要组件🐋Master 组件🐋Node 组件🐳 pod 是什么?🐬pod 的概念🐬控制…...

【基础篇】Java类加载器详解

类加载过程详解 类的生命周期 类从被加载到虚拟机内存到开始卸载出内存为止,生命周期可以简单概括为7个阶段:加载(Loading)、验证(Verification)、准备(Preparation)、解析&#xff…...

Pytorch动手实现Transformer机器翻译

Pytorch动手实现Transformer机器翻译前言一、环境配置1. torchtextMethod1:Method2:2. Spacy以en包下载为例:手动安装语言包到spacy3. NLTKMethod1:Method2:二、运行结果1. 模型训练(train)2. 翻…...

宝塔面板部署node+vue项目注意事项

宝塔面板部署nodevue项目注意事项 宝塔连接云服务器 如果服务器上没有安装宝塔面板,需要先安装,安装流程如下: 从宝塔官网主页进去,点击下载安装,然后点击在线安装 输入服务器IP和密码在服务器上安装宝塔面板 等待一…...

【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字 p205 -- Java Version

题目链接:https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/ 1. 题目介绍(39. 数组中出现次数超过一半的数字) 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可…...

fisco bcos用caliper0.2.0进行压力测试的安装配置

一、前期环境 1. 硬件 需要外网权限 2. 操作系统 版本要求:Ubuntu > 16.04, CentOS > 7, MacOS > 10.14 3. 基础软件 python 2.7,make,g,gcc,git sudo apt install python2.7 make g gcc git curl git confi…...

正在进行 | 用友企业数智化财务峰会落地广州 高能不断

3月28日,以「智能会计 价值财务」为主题的“2023企业数智化财务创新峰会”登陆广州。 此次用友企业数智化财务创新峰会,邀请了知名院校的专家学者、央国企等大型企业财务数智化领路人以及羊城权威媒体,近千人相约广州越秀国际会议中心,深度聚焦大型企业财务数智化创新应用…...

uniapp - APP云打包、蒲公英平台发布APP的步骤

一、uniapp 云打包 1、注册 dcloud 开发者 首先需要注册一个 dcloud 开发者的账号 dcloud开发者中心:登录 (dcloud.net.cn) 根据流程注册即可。 2、云打包(已安卓为例) 项目创建完成后,查看 dcloud 开发者中心,看是否…...

reposync命令详解--reposync同步aliyunyum库到本地

参考: reposync - 命令 - -桃枝夭夭- - 博客园 0. 简介 reposync 命令简单来说就是可以把指定外网源(repo id)的包同步到本地文件中 1. 安装 reposync 命令 [rootV10SP1-1 ~]# yum install -y dnf-plugins-core2. 常用选项以及参数 选项含义-c [fil…...

OCR之论文笔记TrOCR

文章目录TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models一. 简介二. TrOCR2.1. Encoder2.2 Decoder2.3 Model Initialiaztion2.4 Task Pipeline2.5 Pre-training2.6 Fine-tuning2.7 Data Augmentation三. 实验3.1 Data3.2 Settings3.2 Resul…...

雷电4模拟器安装xposed框架(2022年)

别问我都2202年了为什么还在用雷电4安卓7。我特么哪知道Xposed的相关资料这么难找啊,只能搜到一些老旧的资料,尝试在老旧的平台上实现了。 最初的Xposed框架现在已经停止更新了,只支持到安卓8。如果要在更高版本的安卓系统上使用Xposed得看看…...

微信小程序支付完整流程(前端)

微信小程序中,常见付款给商家的场景,下面列出企业小程序中,从0起步完整微信支付流程。 一,注册微信支付商户号(由上级或法人注册) 接入微信支付 - 微信商户平台 此商户号,需要由主管及更上级领导…...

设置鼠标右键打开方式,添加IDEA的打开方式

一、问题描述 已下载IDEA,但是右键打开之前保存的项目文件,无法显示以IDEA方式打开。 二、解决步骤 1. 打开注册表 winR键输入regedit 2、查找路径为计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell (我找了半天没看到Class…...

LAMP架构之zabbix监控(2):zabbix基础操作

目录 一、zabbix监控节点添加和删除 (1)手动添加 (2)自动添加 (3)按照条件批量添加 (4)使用api工具进行管理 二、针对应用的zabbix监控 一、zabbix监控节点添加和删除 实验说明&a…...

ShareSDK常见问题

QQ-分享报错901111,9001010等 由于QQ现在需要审核后才可以分享(之前分享不需要审核),所以此错误解决方法只需通过腾讯开放平台的审核即可,另外要检查注册好的应用的基本信息,包名、md5签名和Bundle id是不…...

[Spring]一文明白IOC容器和思想

✅作者简介:大家好,我是Philosophy7?让我们一起共同进步吧!🏆 📃个人主页:Philosophy7的csdn博客 🔥系列专栏: 数据结构与算法 👑哲学语录: 承认自己的无知,乃…...

程序人生 | 与足球共舞的火柴人(致敬格拉利什,赋予足球更深的意义)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀未…...

MATLAB | R2023a更新了哪些好玩的东西

R2023a来啦!!废话不多说看看新版本有啥有趣的玩意和好玩的特性叭!!把绘图放最前面叭,有图的内容看的人多。。 1 区域填充 可以使用xregion及yregion进行区域填充啦!! x -10:0.25:10; y x.^…...

Python Module — OpenAI ChatGPT API

目录 文章目录目录OpenAI Python SDKopenai.ChatCompletion 模块openai.ChatCompletion.create 函数OpenAI Python SDK 官方文档:https://platform.openai.com/docs/api-reference/introduction OpenAI Python SDK 用于开发与 OpenAI RESTful API 进行交互的客户端…...

Docker学习记录

阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!! 文章目录阅读前请看一下:我是一…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...