Kubernetes各个组件的概念
前言
Kubernetes中的概念太多了, 什么Pod
Service
Deployment
等等等等, 给刚接触的我都整蒙了. 通过几天观察下来, 说一下我对各个组件的理解.
此文章仅仅对这些概念做一个简单的介绍, 不至于后面看其他文章的时候一头雾水.
Node
Node
很好理解. 就是服务实际运行的实例, 可以是一台物理机, 也可以是一台 VM 虚拟机
Pod
docker
都用过了吧, 就是容器. 而Pod
其实就类似于docker-composer, 多个的相关联的容器组成了一个 Pod. 比如有一个
nginx容器和一个
php-fpm的容器, 他们两个就可以组合为一个
Pod`.
在同一个Pod
中, 不同容器共享网络栈与存储卷. 也就是说, nginx
访问php-fpm
可以直接使用localhost:9000
即可, 也就是说, 一个Pod
中启动两个容器, 都占用80端口, 是无法成功启动的. 共享是通过Pause容器
实现的, 这里只简单介绍概念, 不展开了.
Pod 控制器
在Kubernetes
中, Pod
是资源的最小单位了. 而这一堆控制器, 就是用来对Pod
进行自动管理的.当然, 如果不使用控制器而是手动管理也不是不行, 就是累呗. 比如:
- 管理
Pod
的数量 - 实现
Pod
的弹性伸缩 - 监控
Pod
的状态 - 定时启动并释放
Pod
- 等等
为了实现不同的需求, 出现了不同的Pod
控制器. 以下控制器只是实现了不同的需求, 简单过一下即可.
ReplicationController
对Pod
数量进行管理. 确保Pod
数量保持在用户定义的数量. (若容器异常退出, 自动创建新的 Pod
. 若数量多了, 也会自动回收. ) 不过现在建议使用 ReplicaSet
替代了.
ReplicaSet
和ReplicationController
的功能差不多, 额外增加了集合式selector
的支持(标签选择器).
虽然ReplicaSet
可以单独使用, 但建议用Deployment
进行管理.
Deployment
Deployment
不会直接管理Pod
, 而是通过管理ReplicaSet
, 再经有ReplicaSet
管理Pod
.
Deployment
处理了很多ReplicaSet
不支持的额外操作. 如:
- rolling-update (滚动更新) 和回滚
- 自动伸缩(扩容和缩容)
- 暂停和继续
- 等等
顺带说一下, Deployment
的热更新, 就是通过新建一个ReplicaSet
, 逐渐减少原来ReplicaSet
中Pod
数量并增加新ReplicaSet
中Pod
数量来实现的. 回滚就是反过来嘛.
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
Job
的crontab
版本. 基于时间管理的Job
. 是通过在特定时间创建Job
实现的. 可以在指定时间运行一次任务, 或者周期性的在指定时间运行.
服务发现及负载均衡
Service
Pod
控制器只是对Pod
的管理, 比如在一个Deployment
中运行了5个Pod
, 如果外部访问Pod
服务时写的是每一个Pod
的地址, 当Pod
动态伸缩的时候, 维护这些地址就是一个让人头大的问题了.
而Service
就是为了解决这个问题而出现的. 它为一组Pod
提供了一个统一对外的接口, 外部访问Service
再经有Service
将请求发给Pod
, 而不需要关心Pod
的数量、启动、释放等等。
同时Service
还能够对流量进行负载均衡
Ingress
因为Service
是四层负载均衡, 也就是说只能代理到 IP 层, 无法实现像nginx
一样根据不同域名不同路径进行负载均衡. 为了解决这个问题而提出了Ingress
, Ingress
是独立与其他服务对请求进行转发的. 可以将其理解为Service
的Service
.
一般来说, 通过Service
对Pod
进行内部代理, 然后通过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/
存储卷
这个需求就很普遍了, 用来对数据进行存储及挂载服务. 在不同的容器、以及不同的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
Kubernetes各个组件的概念相关推荐
- Kubernetes学习总结(13)—— Kubernetes 各个组件的概念
Node Node 很好理解,就是服务实际运行的实例, 可以是一台物理机, 也可以是一台 VM 虚拟机. Pod docker 我们都知道是容器,而 Pod 其实就类似于 docker-compose ...
- Kubernetes基础组件概述
本文讲的是Kubernetes基础组件概述[编者的话]最近总有同学问Kubernetes中的各个组件的相关问题,其实这些概念内容在官方文档中都有,奈何我们有些同学可能英文不好,又或者懒得去看,又或者没 ...
- 在微服务中,Kubernetes软件组件有哪些?
在微服务.云计算和无服务架构时代,理解Kubernetes并且知道如何使用它是十分有用的.然而,官方的Kubernetes文档对于刚开始接触云计算的用户来说有些难以理解,以下内容是关于Kubernet ...
- kubernetes各组件介绍
文章目录 一. kubernetes 是什么 1. 基础架构图 2. kubernetes 各组件介绍 2.1 master 组件 :one: Kubernetes API Server(kube-a ...
- Kubernetes各组件的功能
Kubernetes各组件的功能 1.kubectl kubectl是Kubernetes官方提供的命令行工具CLI,用户可以通过命令行的方式与Kubernetes API Server进行操作,通信 ...
- DNS术语,组件和概念介绍
DNS术语,组件和概念介绍 2014年2月18日发布 255.4k个意见 DNS 概念LINUX基础常见问题 介绍 DNS或域名系统往往是学习如何配置网站和服务器的一个非常困难的部分.了解DNS如何工 ...
- SAP 产品 UI 里的容器组件的概念和开发概述
这是 Jerry 2021 年的第 68 篇文章,也是汪子熙公众号总共第 345 篇原创文章. Jerry 之前的文章,谈谈 SAP 产品 UI 开发中的组件概念,曾经提到,无论基于何等开发技术的 S ...
- 界面设计方法 (2) — 1. 界面与组件的概念
■ 一个完整的界面设计需要有两个层面:业务功能.应用功能.系列"面设计方法(一)"已经从业务功能(活动.字典.看板和表单)层面介绍了4种功能的设计方法,它们的重点是如何完成不同类型 ...
- 【微服务架构】SpringCloud组件和概念介绍
[微服务架构]SpringCloud组件和概念介绍(一) 一:什么是微服务(Microservice)微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为 ...
最新文章
- 深度学习图像搜索与识别
- 新站如何使用标签才对SEO优化更有利
- pb 窗口数据修改sql_大数据hadoop,数据中台选型你应该看到这些分布式数据库
- P4897 【模板】最小割树(Gomory-Hu Tree)(网络流/最小割/树形结构)
- 计算机显微视觉相关概念,机器视觉的概念及常见应用
- Asp.Net高级知识回顾_HttpModule及应用程序生命周期_1
- C++编程技术之 异常处理(上)
- 新版Cadence打开PSpice8.0工程文件
- 外挂辅助技术-计算怪物与玩家的距离
- 苹果手机屏幕上有白点怎么办
- 产房深夜:8个月胎儿手臂畸形要流产,为保胎医生做了大胆决定
- file upload 攻防世界_菜鸡 CTF 之旅 Writeup (攻防世界)
- [JavaScript] 下拉列表选择出示不同的图片
- 量子物理 薛定谔的猫
- 智慧警保综合管理平台
- [转帖]中国民间秘术
- hdfs或hive的snappy.parquet文件查看
- 新手!亚马逊店铺刚下来就被封,什么原因
- 陕西神木市一煤矿发生事故 已致19人死亡
- day04 RabbitMQ基本使用
热门文章
- C#灰度图转伪彩色图
- java 线程池 资源回收_JAVA线程池资源回收的问题
- cocos html5 一直在加载失败,项目进行中的小问题-0426-【Cocos2d-html5】初识Cocos2d-html5-一些移动端浏览器的兼容性Bug_169IT.COM...
- 邻接矩阵和邻接表_[力扣743] 带权邻接表的单源最短路
- python中和为k的个数_程序查找在python中总计为k的不同组合的数量
- fortify hp 价格_惠普推出“惠普Fortify软件安全中心套件”
- pythoncsv文件处理_Python处理ExcelCSV文件
- android 删除文件 代码_代码审计之某系统后台存在任意删除文件
- c语言源程序文件.c如何保存,急求如何将下列C语言程序数据存储到文件中?
- 【LeetCode笔记】560. 和为K的子数组(Java、前缀和、哈希表)