极速上手k8s,Kubernetes 从入门到摸鱼系列-理论篇

news2024/12/27 2:08:42

1. 引言👋

大家好,我是比特桃!随着微服务架构越来越流行,大规模的微服务容器编排成了一件具有挑战的事情。在这次容器化云原生的发展中,Docker 成了容器化的赢家,而 Kubernetes 则成为了容器编排的赢家。k8s 是 Kubernetes 的简称,只因为 K 和 s 中间有8个字符。或许你还会看到 k3s ,这是轻量级的 Kubernetes,甚至可以跑在树莓派中。
在这里插入图片描述

计算机的核心就是抽象,操作系统的抽象,让普罗大众用起来了电脑。面向对象的抽象,让软件开发人员更容易设计复杂系统。容器化的抽象,使得应用可以轻松的在云平台中提服务。当我们容器过于繁杂,上百上千的时候,不免就需要一个工具可以对这些容器进行编排控制。不可否认的是,如果你的应用并没有存在容器太多,也不存在高并发分布式的情况下。你或许并不需要 k8s,这被称为 YAGNI 理论,不知道则可以不用。当然了,即便是我们实际项目并不需要 k8s,但学习跟进一下这个技术也是很有必要的。

2. 架构☕️

Kubernetes 孵化于 Google 公司,并开源给了 CNCF(云原生基金会)。可在不同的服务器环境中,进行统一的容器编排部署,确保容器的高可用、高性能、可扩展、可恢复。下图为 k8s 一个集群的基础架构,主要包含两大部分:控制节点、工作节点。
在这里插入图片描述
控制节点相当于整个集群的大管家,负责协调调度工作节点、以及与外界交互的部分。我们连接 k8s 的方式有两种,分别是Restful API 接口、KubeCLI命令行,通过yaml格式或json格式来进行沟通。而控制节点中主要包含了:控制管理器、调度器、etcd。ControllerManager负责运行管理集群状态控制器;Scheduler负责将pod调度到集群中的工作节点上;etcd是一个分布式key/value存储,用来存储和检索有关集群的信息。控制节点的 API Server 则是与工作节点交互的接口。
在这里插入图片描述
工作节点主要包含:kubelet、kube-proxy。kubelet是在每个工作节点上运行的守护进程,他负责与控制平面通讯;kube-proxy是每个工作节点上运行的网络代理,他负责将流量路由到正确的pod。
在这里插入图片描述

3. 组件🍗

Kubernetes 始终是个工具类软件而已,在使用角度来看,它和 Docker 类的工具并无两样。都只是协助业务提供了各种功能的调用,但本身并不具备提供服务的能力。所以在面对这类软件的时候,应该先了解它都具备什么样的功能调用,这样我们才知道自己需要他为我们做什么。

3.1 Pod

k8s 是针对容器的更高层次抽象,所以它的最小单位是 pod,一个可以包含多个容器的盒子。这里额外插入一个 k8s 世界中的一个重要理念:声明式无状态。我们和 k8s 通过 API 或 kubectl 沟通的时候,是一种声明式的方式告诉他的。也就是说,你只需要告诉 k8s 你期望最终的效果是什么样的,至于 k8s 怎么做,你不用管。并且 pod 也是一种无状态的,相同的一个 pod,他们的 ip 也不一样。即便崩溃后,k8s 重新新建了一个 pod 仍然不会记录上一个 pod的任何内容,ip也会变。所以这种声明式无状态的思想,要贯彻使用 k8s 的全过程。

3.2 Service & Ingress

Pod 既然这么容易变,那 pod 之间是如何调用的呢?我们可以使用 k8s 的service,一个 service 是一个静态的ip,可以索引它下面所有的 pod。

在当我们想在用户浏览器中使用 k8s 集群所提供的应用时,我们并不希望用户可以直接访问 service,因为它是我们内部沟通的一个组件。所以可以通过 Ingress 组件来对外提供服务,它再去转发到具体的 Service 中。

3.3 ConfigMap & Secret

通常,开发和部署在不同环境下需要不同的配置。在 Spring 开发中,我们会用 profile 来区分。而在 k8s 中,提供了配置文件和一些敏感的用户名密码信息的组件,供应用配置使用。ConfigMap 存储非敏感的配置信息;Secret 存储加密后的配置信息。

3.4 Volume

如 Docker 容器一样,k8s 也提供了持久化的功能。比如数据库 pod 如果不持久化的话,就会存在数据丢失的问题。Volume 允许我们映射本地或远程的持久化路径地址,进行数据持久化。正如之前所说的,k8s 理念是无状态的,所以它本身并不提供任何数据的持久化。所有持久化的工作都需要我们自己完成。

3.5 Deployment & StatefulSet

真正在使用 k8s 的时候,我们其实很少会主动管理一个 pod。试想一下,如果做个分布式的部署,还需要每个工作节点都单独部署管理,那和 Docker 还有什么区别。所以我们会用 k8s 提供的 Deployment 组件,它可以直接声明我们想要的 pod,并且也指明了分布式部署的数量。并且它也提供了固定的 IP 以及负载均衡的功能。在无状态的微服务应用中,我们可以任意声明想要多少个 replica 当做该容器的替补。但如果我们部署数据库,用了 Volume 使其成为了有状态的 pod,则需要使用 StatefulSet 组件。它会保障数据库的读取和写入同步,以便不会出现数据库不同步的情况。虽然 k8s 为了兼容数据库这种场景提供了 StatefulSet 组件来支持有状态的服务。但其实有状态的服务使用外部托管,而不使用 k8s 去做也是一种常见的做法,因为 k8s 的主要能力就是无状态。

4. 总结🍡

现在,我们已经了解了 k8s 的作用及基础架构。也明白了这个工具类的软件,都提供了什么样的功能组件。我们只需要使用这些组件的组合,通过编写 yaml 文件,就可以完成分布式应用的部署。

  1. Pod :容器抽象
  2. Service :通讯组件
  3. Ingress :服务入口
  4. ConfigMap & Secret :配置文件
  5. Volume :数据持久化
  6. Deployment & StatefulSet :部署分布式应用

本文简明扼要的阐述了 k8s 中,所涉及的各种概念及理论。而后续的实操篇将介绍 minikube 及服务器中的使用,如果感觉理论篇不错的话欢迎阅读后面的文章。

5. 参考🍩

  1. Kubernetes Explained in 6 Minutes | k8s Architecture
  2. Kubernetes 官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/734042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「已解决」 模块““umi“” ““@umijs/max“” 没有导出的成员“useRequest” “request” 问题的所有方法汇总

背景 使用 Umi 搭建项目时候有的时候会出现这种错误,模块““umi”” ““umijs/max”” 没有导出的成员“useRequest” “request”。 解决 tsconfig.json "paths": {"/*": ["src/*"],"/*": ["./src/.umi/*"…

用JShaman本地部署版,加密2.7MB的Webpack生成的JS文件

JShaman是知名的JS代码保护平台。在线使用,一键混淆加密,无需注册、无需登录。可免费用,也有商业服务;有在线使用的SAAS平台网站,也有本地部署版。很方便、很强大,很专业。 今天,测试使用JSham…

unordered_map模拟实现|STL源码剖析系列|开散列

博主很久没有更新过STL源码剖析这个系列的文章了,主要是因为大部分STL常用的容器,博主都已经发过文章了,今天博主带着大家把哈希表也模拟实现一下。 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://blo…

点云最小外包矩形计算

1、原理介绍 一簇点云的最小外包矩形(Minimum Bounding Rectangle,MBR),是指用一个矩形将该簇点云框起来,所有点云数据在矩形框内。如下图所示为一个矩形框刚好将点云数据全部包围。 下面给出一种基于最大重叠度的最小…

[工业互联-19]:如何在QT中增加SOEM主站

目录 第1章 基本步骤 第2章 详细步骤 2.1.QT安装 2.2.VS安装 2.3.Win10 Debuggers 2.4.QT配置 2.5. SOEM移植 (1)lib库生成 (2)文件移植: 文件整理 第1章 基本步骤 要在QT中添加SOEM主站功能,您需…

用OpenCV创建一张灰度黑色图像并设置某一列为白色

这段代码首先创建了一个400行600列的单通道灰度图像。然后,它遍历图像中的每个像素。如果像素位于列索引为30的列中,则将该像素的值设置为255。在灰度图像中,0表示黑色,255表示白色。因此,这段代码将图像的第30列设置为白色。 在 OpenCV 中,cv::Mat 构造函数的调用 cv::…

【算法 -- LeetCode】(13)罗马数字转整数

1、题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …

哈希表和字符串专题1—205. 同构字符串 1002. 查找共用字符 925. 长按键入 844.比较含退格的字符串 C++实现

文章目录 205. 同构字符串1002. 查找共用字符925. 长按键入844.比较含退格的字符串栈模拟双指针 205. 同构字符串 class Solution { public:bool isIsomorphic(string s, string t) {unordered_map<char, char> map1;unordered_map<char, char> map2;for(int i0, j…

AI绘画:StableDiffusion炼丹Lora攻略-实战萌宠图片生成

Lora攻略-实战萌宠图片生成 写在前面的话一&#xff1a;准备二、Lora作用1.AI模特2.炼衣服Lora3.改变画风/画面背景Lora模型究竟是什么&#xff1f; 三、如何炼制自己的Lora模型&#xff1f;四、炼丹前的准备&#xff08;**下载整合包**&#xff09;五、选择合适的大模型六、高…

管理类联考——逻辑——记忆篇——数字编码——公式

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &#x1f495;兴趣爱好&#xff1a;b站天天刷&…

MySQL练习题(2)

创建如下员工标表 插入数据 1-- 按员工编号升序排列不在10号部门工作的员工信息 2-- 查询姓名第二个字母不是A且薪水大于1000元的员工信息&#xff0c;按薪水降序排列 4-- 求每个部门的平均薪水 5-- 求每个部门的最高薪水 6-- 求每个部门…

Coverity 2021.9 for win Coverity 2022.6 for linux

Coverity是一款快速、准确且高度可扩展的静态分析 (SAST) 解决方案&#xff0c;可帮助开发和安全团队在软件开发生命周期 (SDLC) 的早期解决安全和质量缺陷&#xff0c;跟踪和管理整个应用组合的风险&#xff0c;并确保符合安全和编码标准。Coverity 是一款精确的综合静态分析与…

JVM04-优化JVM内存分配以及内存持续上升问题和CPU过高问题排查

1-JVM内存分配 1.1-JVM内存分配性能问题 JVM内存分配不合理最直接的表现就是频繁的GC&#xff0c;这会导致上下文切换等性能问题&#xff0c;从而降低系统的吞吐量、增加系统的响应时间。因此&#xff0c;如果你在线上环境或性能测试时&#xff0c;发现频繁的GC&#xff0c;且…

密码学入门——分组密码模式

文章目录 参考书一、简介二、ECB模式三、CBC模式四、CFB模式五、OFB模式六、CTR模式 参考书 图解密码技术&#xff0c;第三版 一、简介 分组密码工作模式指的是将明文分成固定长度的块&#xff0c;并对每个块应用相同的加密算法进行加密的过程。这些块的长度通常是64位或128…

leetcode 654. 最大二叉树

2023.7.9 又是一道递归构造二叉树的题&#xff0c;和昨天做的那道题从中序与后序遍历序列构造二叉树类似&#xff0c;5分钟AC了。 大致思路就是通过找到数组中的最大值&#xff0c;并将其作为根节点&#xff0c;然后递归地构建左子树和右子树&#xff0c;最终返回整个最大二叉树…

PMP项目管理-敏捷

敏捷知识体系&#xff1a; 传统项目特点 1> 一开始就对详细的需求进行很高的投入 2> 价值只有到项目结束的时候才能体现, 风险较高 3> 一开始就要编写很多的文档 4> 客户参与度不高, 澄清完需求之后基本不参与 5> 需要花大量的时间来汇报当前的项目状态 6> 无…

Freertos-mini智能音箱项目---IO扩展芯片PCA9557

项目上用到的ESP32S3芯片引脚太少&#xff0c;选择了PCA9557扩展IO&#xff0c;通过一路i2c可以扩展出8个IO。这款芯片没有中断输入&#xff0c;所以更适合做扩展输出引脚用&#xff0c;内部寄存器也比较少&#xff0c;只有4个&#xff0c;使用起来很容易。 输入寄存器 输出寄存…

线程本地变量交换框架-TransmitterableThreadLocal(阿里开源)

上文 &#xff1a;秒级达百万高并发框架-Disruptor TransmitterableThreadLocal介绍 TransmitterableThreadLocal简称TTL 是阿里巴巴开源的一个框架。TransmittableThreadLocal是对Java中的ThreadLocal进行了增强和扩展。它旨在解决在线程池或异步任务调用链中&#xff0c;Thre…

MAC电脑查看SHA256方式

背景 现在很多网站下载大文件时&#xff0c;以往通过查看文件大小来确定是否下载正确&#xff0c;但是很多情况下&#xff0c;文件下载后大小差不多&#xff0c;但是很多时候却时候出现无法安装的问题&#xff0c;有可能还是下载的文件出现错误&#xff0c;导致文件无法正常使…

机器学习 day25(softmax在神经网络模型上的应用)

输出层采用softmax 在识别手写数字的模型中&#xff0c;预测y只有两个结果&#xff0c;所以输出层采用sigmoid激活函数且只有一个神经元。若预测y有10个结果&#xff08;0-9&#xff09;&#xff0c;该模型的前向传播计算方式与识别数字的模型完全相同&#xff0c;即隐藏层的…