Kubernetes 核心内容梳理
创作时间:
作者:
@小白创作中心
Kubernetes 核心内容梳理
引用
1
来源
1.
http://mcyou.cc/archives/1709221930868
Kubernetes(简称k8s)作为当前最流行的容器编排工具,其核心概念和架构对于理解现代应用部署和运维至关重要。本文将系统梳理k8s的重要基础内容,从容器技术的发展背景出发,深入解析k8s的架构设计、关键组件及其核心概念。
背景
k8s 的时代背景:物理机 -> 虚拟机 -> 容器
物理机缺点:
虚拟机优点:
虚拟机缺点:每台虚拟机都要安装操作系统,占用资源
容器优点:
- 共享操作系统,不用额外的操作系统开销
- 一致的运行环境,相同镜像行为相同
- 镜像更小,因为不需要打包os
- 启动更快
为什么需要容器编排技术:
- 容器可以自动装箱
- 可以水平扩缩
- 可以自动化上线和回滚
- 可以自我修复
- 可以做服务发现与负载均衡
架构
在 k8s 中,由 Master 节点 和 Node 节点共同构成一个集群。Master 节点组成控制平面,Node 节点则负责承载被调度的容器。当然,Master 节点也可以承载容器。
Master
Master 节点包含的组件有:
- etcd:分布式 kv 存储,使用 raft 协议,保存集群的元信息和各种需要一致性的数据
- API Server:集群统一入口,以 restful 风格操作,交由 etcd 对操作落盘。提供认证、授权、访问控制、API 注册和发现等机制。可以通过 kubectl 命令行工具或者 sdk 访问。
- Scheduler:调度器,选择 node 节点部署容器
- Controller Manager:处理集群中常规后台任务,一种资源对应一个控制器,同时监控集群状态,确保实际状态和最终状态一致
Worker
Worker 节点包含的组件有:
- kubelet:负责管理本机的容器,向上汇报数据给 Api Server
- Container Runtime:容器运行时,如 docker
- kube-proxy:实现服务抽象的组件,屏蔽 pod IP 变化以及负载均衡
系统流程
以使用 kubectl 创建一个 pod 为例:
- 使用 kubectl 工具向 api server 发送一个请求
- api server 将请求放在 etcd 中
- controller manager 会收到一个通知
- controller manager 发现集群现状和预期不一致,因此要创建 pod,通知到 scheduler
- scheduler 选择空闲的 worker 节点,通过 api server 更新 pod 的定义
- api server 通知该节点上的 kubelet
- kubelet 指示容器运行时创建对应的容器
- 容器运行时下载镜像并启动容器
核心概念
Pod
- pod 是最小的调度单元
- pod 会包含一个或多个容器(Container)
- pod 内的容器共享存储和网络,通过 localhost 通信
- 容器健康检查:pod 使用探针 probe 通过 sh 脚本、tcp 或者 http 的方式检测容器的健康,出现异常时 pod 会根据配置的策略做操作,探针的种类包括 startup(启动后不做后续检测)、liveness(一直检查应用是否正常)、readiness(检查是否正常对外提供服务,否则不切量)
- 可以使用 limits 字段限制容器的 cpu 时间片或内存占用等
- 配合 HorizontalPodAutoScaler,HPA,可以完成自动扩缩容。
Deployment 和 ReplicaSet
- 定义一组 pod 的副本数量和版本
- 通过控制器维护 pod 的数目
- 自动恢复失败的 pod
- 面向一般应用的管理
- Deployment 是对 replicaSet 的封装,增加了 replicaSet 状态监控、灰度和回滚功能
Service
- 本质是一个四层负载均衡组件,反向代理 pod
- 提供固定对外 IP 和负载均衡
- pod 发生变化时,service 会通过 controller manager 实时监控到
- 使用 ClusterIP 模式进行内部访问,或者 NodePort 模式开放对外端口访问
Ingress
- 本质是一个七层网关组件,利用网关细分请求,再转发给各个 service
- Ingress 将配置定义和转发程序分别拆分为 Ingress对象的 rule 和 Ingress Controller,一般由社区实现
DaemonSet
- 每个 node 仅部署一个的特殊 pod,守护进程
- 确保被调度到每个可用节点上
- 用于配合集群监控、收集宿主机负载、日志等
PV 与 PVC
是管理 docker volume 的存储体系,包括:
- PV:预制的资源实体,可以是指定大小的磁盘空间、临时资源或 NFS 等
- PVC:代表一份使用空间的申请,描述了 pod 需要的空间大小和类型。申请之后,PersistentVolumeController 会不断尝试进行 PV 与 PVC 的自动绑定。如果找不到合适的 PV,pod 会启动失败。
- StorageClass:自动创建 PV 并执行 PV 与 PVC 的绑定,不用再手动创建 PV。可以自定义设置与不同的存储插件绑定,比如 NFS 或 ceph。
有状态服务
如果有数据持久化,也就是 PV、pod 之间的强依赖关系,或者有服务间依赖、主从关系,就属于有状态服务。
- StatefulSet:解决拓扑(服务间依赖关系)的问题,重启时会按顺序启动,保证拓扑结构稳定;数据持久化时固定声明的 pvc,且 pvc 不会因为 pod 删除而消失,新 pod 建立时会寻找旧 pod 的 PVC,重新绑定。
- Operator:用编程的方式解决 StatefulSet 功能比较死板的问题,利用自定义API,直接去用代码完成自动化工作,本质是对 k8s 的扩展。
分布式配置
- ConfigMap:存储在 k8s 控制面,支持实时更新,一样以资源的形式定义
- Secret:加密的 ConfigMap
总结
k8s 以容器技术为依托,围绕 pod 这一核心概念,扩展出了大规模服务部署、运维和调度的功能,同时融合了很多现代运维和服务治理能力,包括滚动更新、灰度发布、健康检查、复杂均衡、自动扩缩容、资源隔离、服务隔离、路由网关、服务发现、分布式配置等。
热门推荐
C 后端如何跟前端交互
吃的是草,挤的是奶,本赛季性价比最高的五位球星
在预算有限的情况下,如何平衡显卡的性能和功耗?
丽江旅行团住宿指南:经济型酒店与青旅推荐及价格对比
庾信:既能以绮艳之笔,抒欢愉之情;又能以苍凉之笔,诉悲痛之苦
夜间开车如何使用远光灯,什么情况禁止使用,什么情况必须开远光
天干地支与十二长生运:揭秘命理中的五行变化与人生阶段
副高级职称评审条件中对专利的要求有哪些?
即便是牛市也不应满仓,更不应满融,底线则是不要误导他人
向新向美,让人民城市成色更足
三角洲部队终极 SR-3M 装备指南:顶级元构建和导入代码
孩子又拉又吐,到底是感染「甲流、诺如还是轮状病毒」?一文教你冬季高发疾病鉴别指南
极简学习法:如何通过多元输出提升知识应用能力
专家告诉你:想利用「超慢跑」减肥,你该跑多久?
如何通过绩效系统提升员工绩效和企业整体效能?
历时6000万年,从五六斤进化到五六吨,大象为何能够经久不衰?
生长激素生理功能多吗?除长高外还有什么
淘宝拒收怎么操作,淘宝拒收注意事项
租房交钱前必看:订金和定金差别大揭秘
新手学炒菜基本功:从食材到调味的全面指南
全球第一大小麦出口国,为何是俄罗斯?
芋头种植方法和步骤
独在异乡为异客,每逢佳节倍思亲。
结构方程模型(SEM)的分类与应用
华威大学申请条件
房产解押流程与时间详解
案例解析-户外灯具的隐形守护者——防水透气阀
基于边缘计算的大数据实时处理机制探索
央视新闻:家庭保洁市场迎来“年末模式” 京东家政订单约至7日后
倒车撞别人车怎么报