Pod
pod是一组并置的容器(由一个或多个组成),代表了 Kubernetes 中的基本构建模块,在实际应用中我们不会单独部署容器,都是针对一组pod的容器进行部署和操作
重要概念:
- 标签:使用标签进行pod的分组(通过标签选择器列出
kubectl get po -l key=value
) - 注解:与标签不同的是,注解可以容纳更多内容,主要用于工具使用,没有标签那样的选择器
- 命名空间:对资源进行分组
- 存活探针和就绪探针
YAML描述文件创建pod:
1 | # 必选,版本号,例如v1 |
控制器(Controllers)
ReplicationController
确保它的pod始终保持运行状态,如果pod因任何原因小时,ReplicationController会注意到缺少的pod并创建替代pod,原有pod将完全丢失
YAML描述文件:
1 | apiVersion: v1 |
注意:
- 修改RC中的pod模版只会影响后面创建的pod,原有pod不会更改
- 删除RC时,不会删除对应的pod,原因是RC创建的pod不是RC的组成部分,只是由其进行管理
ReplicaSet
可以完全替代 ReplicationController,ReplicaSet拥有更强的选择器表达能力
YAML描述文件:
1 | apiVersion: apps/v1 |
使用 matchExpressions 属性重写选择器:
1 | selector: |
操作符:
- In:Label的值必须与其中一个指定的values匹配
- NotIn:Label的值与任何指定的values不匹配
- Exists:pod必须包含一个指定名称的标签(值不重要),不需要指定values字段
- DoesNotExist:与Exists相反
DaemonSet
确保在集群的每个节点上运行一个pod(比如日志收集器、资源监控器),如果节点下线,DaemonSet不会在其它地方重建pod,但是当一个新节点加入时,DaemonSet会立刻部署一个新的pod实例在新节点上
YAML描述文件:
1 | apiVersion: apps/v1 |
Deployment
Deployment 是一种更高阶资源,用于部署应用并以声明的方式升级应用,而不是通过 ReplicationController 或 ReplicaSet 进行部署(更底层)
Deployment 由 ReplicaSet 组成,并由它接管 Deployment 的 pod
YAML描述文件:
1 | apiVersion: apps/v1 |
升级策略:
- RollingUpdate(默认):滚动更新
- maxSurge
决定了 Deployment 配置中期望的副本数之外,最多允许超出的pod实例的数量,默认值为25%(也可以是绝对值,比如最多多处一个或两个pod)
- maxUnavailable
决定了在滚动升级期间,相对于期望副本数能够允许有多少pod实例处于不可用状态,默认值为25%
- maxSurge
- Recreate:一次性删除所有旧pod,创建新的pod
Job
Job(run to completion)
运行完成工作后即终止任务
由Job管理的pod会一直被重新安排,直到它们成功完成任务
YAML描述文件:
1 | apiVersion: batch/v1 |
Corn Job
特定的时间运行或者在指定的时间间隔内重复运行
1 | apiVersion: batch/v1 |