学习目标:
- 资源分类
- Pod的生命周期
- Init C及特殊说明
学习内容:
资源分类
名称空间级别
- 工作负载型资源:Pod、ReplicaSet、Deployment、StatefulSet、Job、CronJob(ReplicationController在v1.11版本被废弃)
- 服务发现及负载均衡资源:Service、Ingress
- 配置与存储资源:Volume(存储卷)、CSI(容器存储接口,可扩展各种各样的第三方存储卷)
- 特殊类型的存储卷:ConfigMap(当配置中心来使用的资源类型)、Secret(保存敏感数据)、DownloadAPI(把外部环境中的信息输出给容器)
集群级资源
- Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding
元数据型资源
- HPA、PodTemplate、LimitRange
资源清单常用字段说明
- 必须存在的属性
- 主要对象
- 额外参数项
POD的生命周期
- 流程图
步骤: - 请求指令下达到API-Server接口,被调度到kubelet上
- kubelet会进行容器的初始化,接着进入到Pod的生命周期内部,创建Pod,同时创建pause容器,进行网络初始化和数据卷初始化。Pod里面的主容器应用会共享pause的网络和数据卷
- 然后进行init C(容器初始化,初始化完成后就会死亡,并不会一直存在,init C是有序的,不可并行,线性过程)
- 接着到真正的容器内部(即主容器),在容器运行之前可以执行一个start指令,在容器退出时可以运行一个stop执行,然后再退出(所谓的优雅退出)
- readiness是就绪检测,liveness是生存检测
init C
Pod能够具有多个容器。应用运行在容器里面,但是它也可能有一个或多个先于应用容器启动的init容器
init容器与普通容器非常像,除了如下两点:
- init容器总是运行到成功完成为止
- 每个init容器都必须在下一个init容器启动之前成功完成
每个Pod的init容器失败,kubernetes会不断的重启该pod,直到init容器成功为止,然而,如果pod对应的restartpolicy为never,它不会重新启动。
特殊说明
- 在Pod启动过程中,init容器会按顺序在网络和数据卷初始化之后启动,每个容器必须在下一个容器启动之前成功退出
- 如果由于运行时或失败退出,将导致容器启动失败,它会根据Pod的restartpolicy指定的策略进行重试。然而,如果Pod的restartpolicy设置为always,init容器失败时会使用restartpolicy策略
- 在所有的init容器没有成功之前,Pod将不会变成ready状态,init容器的端口将不会在Service中进行聚集,正在初始化中的Pod处于pending状态,但应该会将initializing状态设置为true
- 如果pod重启,所有的init容器必须重新执行
- #对init容器spec的修改被限制在容器的image字段,修改其他字段都不会生效,更改init容器的image字段,等价于重启该Pod
- init容器具有应用容器的所有字段,除了readinessProbe,因为init容器无法定义不同于完成(completion)的就绪(readiness)之外的其他状态,这会在验证过程中强制执行
- 在Pod中的每个app和init容器的名称必须唯一,与其他任何容器共享同一个名称,会在验证时抛出错误
学习产出:
初步了解K8S中yaml的资源分类,理解Pod的生命周期,init C容器的重要性