Kubernetes 是谷歌开源的基于容器技术的分布式架构方案,用于管理容器化的工作负载和服务,促进声明式配置和自动化。
Kubernetes 的功能有
- 服务发现和负载均衡:使用 ip 地址或 dns 名称来暴露容器,并实现负载均衡分配网络流量
- 部署和回滚:通过配置文件描述容器的期望状态,支持回滚到指定部署版本
- 弹性伸缩:可根据指标配置自动伸缩策略,以应对突发流量
- 容器配额管理:允许为每个容器指定所需的CPU和内存
- 故障发现和自我修复:监控容器的运行状态,并尝试重启替换状态异常的容器
- 密钥和配置管理:secret 和 configMap,两种资源来分别管理密钥信息和配置信息
- 支持多种数据卷类型:例如:本地存储、公有云提供商、分布式存储系统等。
Pod
pod:最小可部署单元,调度的最小基本单位,代表集群上正在运行的一个进程。
k8s 为每个 pod 分配唯一的 pod ip,每个 pod 有一个 pause 容器( 根容器)。pod 内的多个容器,共享 pause 容器的 ip 和 volume;同时 pause 容器的状态代表整个 pod 的状态。
Label
label:kv 键值对,通过给指定资源对象绑定 label 来实现对资源对象的分组管理。
通过 label 为资源对象贴上相对应的标签,然后通过 Label Selector(标签选择器)查询和筛选拥有某些 label 的资源对象。
例如:
# 标签选择器 selector: # 1、标签匹配 matchLabels: app: myweb # 选择标签 key-app,value-myweb 资源 # 2、表达式匹配 matchExpressions: # 选择标签 key-tier, value-in (frontend, backend) - {key: tier, operator: In, values: [frontend,backend]} # 或使用以下写法,操作:In, NotIn, Exists and DoesNotExist - key: tier operator: In values: ["frontend","backend"]RC
Repliacation Controller,RC 副本控制器。保持 pod 的副本数量与预期数量一致。deployment 内部包含该功能,所以不推荐使用。
RS
Replica Set,RS 副本控制器。RC 的升级版本,区别在于:
- RC 的 Label Selector 仅支持基于等式的表达式,RS 的 Label Selector 可以支持基于集合的表达式。
- 在线编辑后,RS 自动更新 pod,RC 不会自动更新现有 pod。
Deployment
deployment:部署,副本控制器,用于更好的解决 pod 的部署、升级、回滚等问题。内部会自动创建 RS 用于pod 的副本控制。
deployment 相较于 RC/RS 具有以下优势:
- deployment 资源对象会自动创建 RS 资源对象来完成部署,对 deployment 的修改并发布会产生新的 RS 资源对象,为新的发布版本服务。
- 支持查看部署进度,以确定部署操作是否完成
- 更新 deployment,会触发部署从而更新 pod
- 支持 pause | resume 操作,暂停后修改不会触发发布,恢复后发布新的 deployment
- 支持回滚操作
- 支持重新启动操作,触发 pod 更新。
- 自动清理不需要的 RS
StatefulSet
StatefulSet:管理有状态应用的 pod,例如 Kafka 集群、Mysql 集群、MongoDB集群等。与无状态的服务不同的是:无论怎么调度,每个 pod 都有一个永久不变的ID。
面向无状态的应用:RC、Deployment、DaemonSet、Job等。
DaemonSet
副本控制器,每个节点只运行一个 pod 副本。区分 deployment 多副本。
应用:每个节点上运行集群守护进程、日志收集守护进程和监控守护进程。