K8S基本概念
Pod / Pod 控制器
-
Pod
- Pod 是K8S中能够被运行的最小逻辑单元
- 1个Pod里可以运行多个容器, 它们共享UTS+NET+IPC名称空间
- 一个Pod里运行多个容器, 可称为SideCar模式
-
Pod控制器
-
Pod控制器是Pod启动的一种模板, 用来保证在K8S里启动的Pod始终按照人们的预期运行(副本数, 生命周期, 健康状态检查...)
-
K8S 内提供了众多的Pod控制器, 常用的有:
-
Deployment
-
DaemonSet (每一个运算节点都起一份)
-
ReplicaSet (本身不提供对外服务, 真正暴露在外的是Deployment。Deployment -> ReplicaSet -> Pod)
-
StatefulSet (管理有状态应用的Pod控制器)
-
Job
-
Cronjob (管理周期任务)
-
-
Name / Namespace
-
Name
-
由于K8S内部, 使用 “资源” 来定义每一种逻辑概念(功能), 所以每种 "资源", 都应该有自己的 "名称 "
-
"资源" 有API版本(apiVersion) 类别 (kind)、元数据(metadata) 、定义清单(spec list)、状态(status) 等配置信息
-
"名称" 通常定义在 ”资源“ 的 ”元数据“ 信息中
-
-
Namespace
-
随着项目增多、人员增加、集群规模的扩大, 需要一种能够隔离K8S内各种 "资源" 的方法, 此即为名称空间
-
可以理解为K8S内部的虚拟集群组
-
不同的名称空间内的 “资源”, 名称可以相同; 相同名称空间内的同种 "资源", “名称” 不能相同
-
合理的使用K8S的名称空间, 使得集群管理员能够更好地对交付到K8S里的服务进行分类管理和浏览
-
K8S里默认存在的名称空间有:
- default
- kube-system
- kuben-public
- 可以自建
-
查询K8S 里特定 "资源" 要带上相应的名称空间
-
Label / Label 选择器
-
Label
-
标签是K8S特色的管理方式, 便于分类管理资源对象
-
一个标签可以对应多个资源, 一个资源也可以有多个标签, 它们是多对躲的关系
-
一个资源拥有多个标签, 可以实现不同维度的管理
-
标签的组成: key = value
-
与标签类似的, 还有注解(annotations)
-
-
Label Selector
- 给资源打上标签后, 可以使用标签选择器过滤指定的标签
- 标签选择器目前有两个: 基于等值关系(等于、不等于) 和 基于集合关系(属于、不属于、存在)
- 许多资源支持内嵌标签选择器字段
- matchLabels
- matchExpressions
Service / Ingress
-
Service
-
每个Pod都会被分配一个单独的IP地址, 但这个IP地址会随着Pod的销毁而消失
-
Service (服务) 就是用来解决这个问题的核心概念
-
一个Service可以看作一组提供相同服务的Pod的对外访问接口
-
Service作用于哪些Pod是通过标签选择器来定义的
-
-
Ingress
- Ingress 是K8S集群里工作在OSI网络参考模型下, 第7层的应用, 对外暴露的接口
- Service只能进行L4流量调度, 表现形式是ip+port
- Ingress则可以调度不同业务域、不同URL访问路径的业务流量