Kubernetes各个组件的概念

前言

Kubernetes中的概念太多了, 什么Pod Service Deployment 等等等等, 给刚接触的我都整蒙了. 通过几天观察下来, 说一下我对各个组件的理解.

此文章仅仅对这些概念做一个简单的介绍, 不至于后面看其他文章的时候一头雾水.

Node

Node很好理解. 就是服务实际运行的实例, 可以是一台物理机, 也可以是一台 VM 虚拟机

Pod

docker都用过了吧, 就是容器. 而Pod其实就类似于docker-composer, 多个的相关联的容器组成了一个 Pod. 比如有一个nginx容器和一个php-fpm的容器, 他们两个就可以组合为一个Pod`.

image-20211210234443417

在同一个Pod中, 不同容器共享网络栈与存储卷. 也就是说, nginx访问php-fpm可以直接使用localhost:9000即可, 也就是说, 一个Pod中启动两个容器, 都占用80端口, 是无法成功启动的. 共享是通过Pause容器实现的, 这里只简单介绍概念, 不展开了.

Pod 控制器

Kubernetes中, Pod是资源的最小单位了. 而这一堆控制器, 就是用来对Pod进行自动管理的.当然, 如果不使用控制器而是手动管理也不是不行, 就是累呗. 比如:

  • 管理Pod的数量
  • 实现Pod的弹性伸缩
  • 监控Pod的状态
  • 定时启动并释放Pod
  • 等等

为了实现不同的需求, 出现了不同的Pod控制器. 以下控制器只是实现了不同的需求, 简单过一下即可.

ReplicationController

Pod数量进行管理. 确保Pod数量保持在用户定义的数量. (若容器异常退出, 自动创建新的 Pod. 若数量多了, 也会自动回收. ) 不过现在建议使用 ReplicaSet替代了.

image-20211212195207523

ReplicaSet

ReplicationController的功能差不多, 额外增加了集合式selector的支持(标签选择器).

虽然ReplicaSet可以单独使用, 但建议用Deployment进行管理.

Deployment

Deployment不会直接管理Pod, 而是通过管理ReplicaSet, 再经有ReplicaSet管理Pod.

Deployment处理了很多ReplicaSet不支持的额外操作. 如:

  • rolling-update (滚动更新) 和回滚
  • 自动伸缩(扩容和缩容)
  • 暂停和继续
  • 等等

顺带说一下, Deployment的热更新, 就是通过新建一个ReplicaSet, 逐渐减少原来ReplicaSetPod数量并增加新ReplicaSetPod数量来实现的. 回滚就是反过来嘛.

image-20211212195502455

HorizontalPodAutoscaler

HPA也不会直接管理Pod, 而是管理Deployment或者ReplicaSet.

HPA可以检测Pod资源使用率, 可以实现这样的场景: 当Pod CPU 使用率大于80则自动新建, 否则自动释放. 同时启动的Pod数量最多30个, 最少5个. 既实现服务的水平扩展.

StatefulSet

StatefulSet是为了解决有状态服务的. 上面的控制器都是无状态的. StatefulSet可以实现如下功能:

  • 稳定的持久化存储. 当Pod动态调整后能够访问到相同的持久化数据. 基于PVC实现
  • 稳定的网络标识. Pod动态调整后 PodName HostName不变. 基于Headless Service实现.
  • 有序部署. 既前一个Pod启动成功, 才会创建下一个Pod. 解决服务依赖的问题. 基于init containers实现.
  • 有序删除. 有序部署的反向操作.

DeamonSet

可以确保所有(或指定的一部分)Node都运行一个Pod副本. 当新Node加入集群时自动新增对应的Pod, 当Node从集群移除时, 对应的Pod也会被回收.

这种运行在Node中的Pod有什么用呢? 比如资源监控, 再比如日志收集等等.

Job

批处理任务. kubernetes可以保证此任务的一个或多个Pod成功结束, 若任务失败, kubernetes会自动重启, 直到成功.

CronJob

Jobcrontab版本. 基于时间管理的Job. 是通过在特定时间创建Job实现的. 可以在指定时间运行一次任务, 或者周期性的在指定时间运行.

服务发现及负载均衡

Service

Pod控制器只是对Pod的管理, 比如在一个Deployment中运行了5个Pod, 如果外部访问Pod服务时写的是每一个Pod的地址, 当Pod动态伸缩的时候, 维护这些地址就是一个让人头大的问题了.

Service就是为了解决这个问题而出现的. 它为一组Pod提供了一个统一对外的接口, 外部访问Service再经有Service将请求发给Pod, 而不需要关心Pod的数量、启动、释放等等。

同时Service还能够对流量进行负载均衡

image-20211212195844741

Ingress

因为Service是四层负载均衡, 也就是说只能代理到 IP 层, 无法实现像nginx一样根据不同域名不同路径进行负载均衡. 为了解决这个问题而提出了Ingress, Ingress是独立与其他服务对请求进行转发的. 可以将其理解为ServiceService.

一般来说, 通过ServicePod进行内部代理, 然后通过Ingress将请求转发给Service. Ingress也有不同的实现, 而其中比较常用的就是ingress-nginx了,其配置文件类似与nginx. 由官方维护的. 启动命令为:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml

官方文档: https://kubernetes.github.io/ingress-nginx/

image-20211212195930903

存储卷

这个需求就很普遍了, 用来对数据进行存储及挂载服务. 在不同的容器、以及不同的pod中进行共享.

具体的使用方式可见: https://hujingnb.com/archives/709

ConfigMap

专门用于存储配置文件, 同时还支持二进制内容. 将文件内容直接写入到yaml配置中. 同时, ConfigMap是支持热更新的.

Secret

存储一些需要加密的信息, 比如密钥、密码等. 其基本上和ConfigMap差不多, 区别就是在ConfigMap的基础上对内容做了一次加密. 不过不过, 现阶段Secret的加密方式就是base64? 这也叫加密? 只能算作编码吧.

可以通过命令: kubectl get secrets secret-name -o yaml查看内容.

不过, 社区后续应该会推出更安全的加密策略.

另外, 对于私有的镜像仓库, Secret可以添加拉取镜像时的鉴权信息.

volume

在同一个pod下的多个容器之间共享存储卷, 就跟磁盘的挂载差不多啦. volume没有单独的kind, 是直接进行定义的.


如上, 对Kubernetes中的各个名称进行了简单介绍, 再回去看其他文章, 是不是清楚多了. 全部都是对容器的各个方面各个层次的管理.

原文链接: https://hujingnb.com/archives/706

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

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

相关文章

Kubernetes中Pod生命周期

在 Kubernetes中Pod是容器管理的最小单位, 有着各种各样的Pod管理器. 那么一个Pod从启动到释放, 在这期间经历了哪些过程呢? Pod自开始创建, 到正常运行, 再到释放, 其时间跨度及经历的阶段大致如下: 说一下各个阶段的作用以及是为了解决什么问题. 容器调度和下载镜像的过程就…

wait函数的作用

前言 在编写C程序的时候, 通过fork函数来创建新的进程, wait函数来等待子进程结束. 那么就有一个问题了, 什么情况下父进程需要等待子进程结束后继续执行呢? 如果需要等待子进程结束, 那直接将操作放到父进程执行不就醒了么? 反正等着也是等着. 当然, 还有有一种情况, 任务…

OAuth1.0介绍

背景 为什么需要OAuth授权呢? 最典型的应用场景就是第三方登录了, 我们开发了一个网站希望用户可以QQ登录, 但是怎么能拿到用户的 QQ 信息呢? 用户将 账号密码告诉我们当然可以, 但是这样有如下隐患: 我们拿到了用户的密码, 这样很不安全. 而且任意一个应用被黑, 所有相关…

PHP 数组的内部实现

前言 这几天在翻github的时候, 碰巧看到了php的源码, 就 down 下来随便翻了翻. 地址: https://github.com/php/php-src 那么PHP中什么玩意最引人注目嘞? 一定是数组了, PHP中的数组太强大了, 于是就想着不如进去看看数组的实现部分. 这篇文章打算全程针对代码进行解读了. 以…

base64编码原理

引出 众所周知, ASICC编码共127个, 使用了7个bit进行编码. 而文件在存储的时候是以 字节为单位, 也就是8bit. 这就难免导致有一部分编码是没有定义在ASICC编码中的. 而在网络中传输二进制数据的时候(字符串本质上也是二进制数据嘛), 如果直接传输比特流, 倒也不是不可以, 只是…

页面加载速度-合并资源文件

前言 一直觉得自己的博客站点页面加载很慢, 就想着去优化一下. 呐, 下图是一次文章页面的加载, 需要2.5s. 其中 js 文件就有18个. 众所周知, 浏览器对资源文件的并行下载数量是有限制的(不同浏览器限制不同). 也就是说, 这18个 js 文件是无法同时下载的, 再说了, 页面中还有其…

hbase/thrift/go连接失败

问题 在通过Go连接hbase的过程中, 发现 get操作可以查到数据, 但是scanner命令访问数据失败, 也没有报错, 就是单纯的查不到数据. 而且Python PHP都一切正常. 这里简单复述一下我出现问题的情况, 安装过程和网上大部分内容一致, 这里简单列一下, 只是为了查询问题时参考安装过…

printf缓冲区踩坑

问题 碰到了这样一段代码(经过简化的): #include "stdio.h" #include "unistd.h" #include "sys/wait.h"int main(){fork();printf("1\n");fork();printf("1\n");wait(NULL);return 0; }这里我们简单算一下, 结果会打印几…

进程切换时是如何保存上下文的

前言 当前操作系统大部分采用分时的进程调度, 既每个进程运行一小段时间, 然后切换到下一个进程运行, 依次往复. 当进程运行的时候是独占CPU的, 此时操作系统是无法强行介入的, 为了将执行权让出来, 就需要硬件的配合了. 硬件每个一个时钟周期(比如10ms), 就会产生一个时钟中…

GO/testing包

前言 之前在写GO单元测试的时候, 使用了这个结构testing.T. 进来无事翻了翻, 发现testing包中还有一些其他的结构体, 想来是不同用处. 没想到GO的testing包竟然默默做了这么多支持, 之前竟然不知道. 在testing包中包含一下结构体: testing.T: 这就是我们平常使用的单元测试t…

CPU的分支预测

前言 最近在进行性能调优的时候, 碰到了这样的一段代码(为了展示问题而简化的代码): <?php // 第一次运行 $start microtime(true); for ($i 0; $i < 100; $i) {for ($j 0; $j <1000; $j) {for ($k 0;$k < 10000; $k) {}} } $end microtime(true); echo fi…

PHP获取Opcode及C源码

是什么 在开始之前, 必须要先介绍一下Opcode是什么. 众所周知, Java在执行的时候, 会将.java后缀的文件预先编译为.class字节码文件, JVM加载字节码文件进行解释执行. 而字节码文件存在的意义, 就是为了加速执行. 那么PHP的Opcode与之类似, 也是从.php文件到执行的过程中, 所…

PHP require/include 区别

前言 在PHP中, 载入文件可以选择使用require, 也可以使用include, 那么那他们有什么区别呢? 看了网上的一些文章, 说他们使用场景不同, require一般在文件开头引入文件, include一般在函数中动态引入文件. 但是我觉得并不是这么简单, require是作为语言结构(关键字)出现的, …

Golang 接口原理

问题 小提示, 若想直接查看原理, 可从接口原理开始查看. 有这样一段GO代码: func main() {var obj interface{}fmt.Printf("obj nil. %b\n", obj nil)type st struct{}var s *stobj sfmt.Printf("s nil. %b\n", s nil)fmt.Printf("obj nil. …

三星识别文字_比亚迪电子助力三星Galaxy Note 10系列霸气首发!

三星有子初长成气宇轩昂 秀美俊逸减之一分则嫌柔增之一分则嫌赘2019年8月7日于纽约巴克莱发布Galaxy Note 10系列用简约 重构美三星Galaxy Note 10与Galaxy Note 10分别搭载了6.3英寸和6.8英寸的超感官全视曲面屏&#xff0c;均采用单摄挖孔屏&#xff0c;开孔位于屏幕正上方。…

lisp 设计盘形齿轮铣刀_机械设计基础——周转轮系传动比的计算

点击上方蓝色字体&#xff0c;关注我们15(视频来源于网络&#xff0c;仅供学习交流&#xff0c;侵权请联系删除)机械计重点学习指导机械原理全书重点提要轴的结构改错机械设计作业集01机械设计作业集02机械设计作业集答案机械原理作业集机械原理作业集答案轴的强度计算院校推荐…

b+树阶怎么确定_B站公布年度弹幕,这个排名我不太服气

也忘记了是从什么时候开始&#xff0c;B站开始公布自己的年度弹幕了&#xff0c;今年的年度弹幕排名前五的分别是&#xff1a;爷青回、武汉加油、有内味了、双厨狂喜、禁止套娃。话说今年真的是不容易啊&#xff0c;过年那段时间以及上半年不会忘记那一幕幕感人深邃的瞬间&…

css打印适应纸张_从生态平衡到打印机故障分析

生态平衡(ecological equilibrium)是指在一定时间内生态系统中的生物和环境之间、生物各个种群之间&#xff0c;通过能量流动、物质循环和信息传递&#xff0c;使它们相互之间达到高度适应、协调和统一的状态。也就是说当生态系统处于平衡状态时&#xff0c;系统内各组成成分之…

html5调用系统声音1s响一次_20款奔驰GLC260提车改柏林之声音响,音乐诉请,为爱发声!...

奔驰GLC车型在2020上半年可谓是风生水起&#xff0c;尤其是2020年1-5月份的豪华品牌SUV排名中&#xff0c;奔驰GLC车型以58982的销售量遥遥领先&#xff0c;同比增长了2%&#xff0c;奔驰GLC5月销量高达15275辆&#xff0c;再次打败老对手奥迪Q5L&#xff0c;夺得豪华SUV销量冠…

kotlin将对象转换为map_将网站转换为Photoshop文档

WebToLayers是一款能够帮助大家将网页转换成图像格式的软件&#xff0c;能够Web页面转换成PNG&#xff0c;JPG以及PSD格式的图片。当网页转换为PSD的时候&#xff0c;网页的各个要素都会自动转换为相应的图层&#xff0c;使得大家能够对PSD格式的网页进行设计与管理。WebToLaye…