目录:
1. Pod/Pod控制器
容器之所以会被称作容器,要实现六种资源隔离:
- PID:进程、线程
- Mount:相当于文件系统
- User:用户管理相关
- UTS:容器自身的hostname
- NET: 网络相关
- IPC:容器自身的共享内存,信号量,进程间通信
Pod
- Pod是K8S中能够被运行的最小逻辑单元(原子单元)。
- 1个Pod中可以运行多个容器,它们共享UTS+IPC+NET名称空间。
-
可以将Pod理解理解为豌豆荚,将Pod内的容器理解为豌豆荚里的豌豆
-
- 一个Pod中运行多个容器,可以被称作边车(SideCar)模式,可以形象的理解为跨斗摩托车。
Pod控制器
- Pod控制器是Pod启动的一种模版,用来保证K8S中启动的Pod应始终按照我们的预期运行(副本数,生命周期,健康状态检查。。。)
- K8S中提供了许多Pod控制器,常见的有如下几种:
- Deployment
- DaemonSet
- ReplicaSet
- StatefulSet
- Job
- Cronjob
2. Name 和 Namespace
Name
- 由于K8S内部,使用资源来定义每一种逻辑概念(功能),所以每种资源都有自己的名称。
- 每种资源都有五种维度来定义:
- api版本(apiVersion)
- 类别(kind)
- 元数据(metadata)
- 定义清单(spec)
- 状态(status)
- 其中名称定义在资源的元数据里。
Namespace
- 随着项目的增多,人员的增加,集群规模的扩大,需要一种能隔离K8S内各种资源的方法,这就是名称空间。
- 名称空间可以理解为K8S内部的虚拟集群组。
- 不同名称空间内的资源,名称可以相同(类似于不同班级的同一个同学) 。相同名称空间内的同种资源,名称不能像相同。(在一个班级中不能有相同名称的两个同学)
- 合理的使用名称空间,可以更好的管理交付到K8S中的服务,进行分类管理和浏览。
- K8S中默认存在的名称空间有:
- default
- kube-system
- kube-public
- 查询K8S里特定的资源,需要带上相应的名称空间名。
3. Label 和 Label选择器
Label
- 标签是K8S里的特色管理方式,便于分类管理资源对象。
- 一个标签对应多个资源,一个资源也可以对应多个标签,它们之间是多对多的关系。
- 一个资源有多个标签,可以实现不同维度的管理。
- 标签的格式: key=value
- 与标签类似,还有一种注解(annotations)。 与标签的区别是:标签value要求更严格,63字母以下。。。
Label 选择器
- 给资源打上标签,可以用标签选择器来过滤资源。
- 标签选择器有两个:
- 基于等值关系(等于、不等于)
- 基于集合关系(属于、不属于和存在)
- 许多资源支持内嵌标签选择器字段:
- matchLabels
- matchExpressions
4. Service 和 Ingress
Service
- 在K8S中,每个Pod会被分配一个单独的IP地址,但随着Pod的销毁,IP地址会随之消失。
- Service就是用来解决这个问题的核心概念。
- K8S中存在三种网络:
- node 节点网络
- pod 容器网络
- service 集群网络:通过kube-proxy 来寻找pod网络
- K8S中存在三种网络:
- 一个Service可以看作是一组提供相同服务的Pod对外访问借口。
- Service作用于哪些Pod是通过标签选择器来定义的。
Ingress
- Ingress是K8S中工作再OSI网络模型下的第七层应用,对外暴露的接口。
- Service只能进行L4的流量调度,表现形式是 ip+port。
- Ingress可以调度不同的业务域、不同URL访问路径的业务流量。
- 例如http://abc.com/sh --> Service 根据标签选择器 --> pod