原文地址:https://mubu.com/doc/2n0iYCbQNal
【Common】
selector: 选择器,Service,PersistentVolumeClaim,ReplicationController,ReplicaSet,DaemonSet、StatefulSet、Deployment,选择管理的 pod
- podSelector: NetworkPolicy 中用的比较多
- labelSelector: Deployment.affinity 中 设置 pod 模板的亲缘性和非亲缘性
- nodeSelector: Pod 选择特定节点部署
- nodeSelectorTerms: pod.affinity 中设置
【Pod】
apiVersion
- apiVersion: v1 版本,核心 API 组件, 如 Pod
- apiVersion: apps/v1beta2 版本,非核心 API 组件, 位于 apps 组中,如 ReplicaSet 、Deployment(最新版,旧版v1beat1)
- apiVersion: batch/v1 版本,非核心 API 组件, 位于 batch 组中,如 Job
pod.restartPolicy:
- Always: 节点完成后,立马重启;
- OnFailure: Job
- Never: Job
pod.dnsPolicy: pod 是否使用内部的 DNS 服务器ExternalIP
pod.metadata.ownerReferences : pod 的 metadata.ownerReferences 可以知道 该pod 属于哪个 RC
pod.readinessProbe: 就绪探针
pod.serviceAccountName: pod 挂载指定的 serviceAccount 账户
pod.volumes: 挂载的 卷,和 container 同层级
pod.hostNetwork: true, 使用宿主节点的网络接口和端口
pod.hostPID: true, 使用宿主节点的 进程空间
pod.hostIPC: true, 使用宿主节点的 IPC 命名空间
pod.imagePullPolicy : pod 拉取镜像的策略, Always 表示总是从云端拉取 【latest 总会比较云端是否是最新的】
进程的 权限控制
pod.securityContext: 指定pod 中运行的 用户
pod.securityContext.runAsNonRoot: 容器只能以 非 root 用户运行
pod.securityContext.privileged: 在特权模式下运行 【通常为了使用 内核功能】, 如 Kube-proxy 可以访问 iptables 规则
pod.securityContext.capabilites.add: 更精细的权限控制,例如 添加可修改时间 CAP_SYS_TIME
pod.securityContext.capabilites.drop: 更精细的权限控制,例如 禁用 chown CHOWN
pod.securityContext.readOnRootFilesystem: 禁止在 根文件系统写入
pod.securityContext.fsGroup: 存储卷关联的用户组
pod.securityContext.supplementalGroups: 额外关联的用户组
高级调度
pod.affinity.nodeSelector: pod 部署的节点选择器
pod.affinity.nodeAffinity: pod 与 节点亲缘性
pod.affinity.podAffinity: pod 与 pod的 亲缘性
pod.affinity.podAntiAffinity: pod 与 pod 必须分散到 不同的 节点上
pod.affinity.podAntiAffinity.required/prefer.topologyKey: pod 与 pod 必须分散到 不同的 节点上 【调度的节点范围】
申请资源
pod.resources.requests: 申请的资源(最少需要)
pod.resources.limits: 限制使用的资源(最多使用)
允许内存超出限额, OOM,某些 容器会被直接干掉
Pod 启动与终止
pod.initContainers: Pod 中可以有任意多个 initContainers,初始化容器用来控制 Pod 之间 启动 的先后顺序
pod.terminationGracePeriodPeriods: Pod 终止前宽限期,可允许Pod 里的容器 优雅的终止
pod.terminationMessagePath: 设置文件终止时,附加的日志路径,可自行填充,kubectl describe pod <pod-name>
时会自行读取
容器奔溃不行
pod.terminationMessagePolicy:FallBackToLogsOnError: 以容器最后几行日志作为 终止消息
【Job】
job.activeDeadlineSeconds: 限制 Job 运行的时间
job.spec.backoffLimit: 默认6,Job 失败前 可重试的次数
【Container】
containers.livenessProbe: 容器里的 探针
containers.livenessProbe.initialDelaySeconds: 探针 延迟探测时间
containers.image: 使用的镜像
containers.env: 容器级别设置环境变量
containers.readinessProbe: 容器就绪探针
containers.readinessProbe.periodSeconds: 就绪探针 每隔1s 更新一次
containers.ports.hostPort: 容器端口可以绑定在节点上
containers.securityContext: 指定 容器 中运行的 用户
containers.lifecycle.postStart: 容器启动后执行的钩子,和主进程并行执行(可能主进程正在执行初始化) 【适用于 无法改源码的应用】
钩子执行失败 或 返回非零状态码,会杀死 主容器 FailedPostStarHook
containers.lifecycle.preStop: 容器停止前执行的钩子(可能主进程正在执行初始化) 【适用于 无法改源码的应用】
无论钩子是否执行成功,容器都将终止,若失败,可能看到 FailedPreStopHook
【Service】
Service.pod.ports: 服务对集群(内)提供的端口: pod 访问pod
Service.sessionAffinity: ClientIP, 服务 总是对同一个 clientIP 路由到同一个 pod 上去
Service.externalTrafficPolicy: Local, 接收连接的节点 和 随机选择pod 所在的节点 在一个位置 【随机pod 变成 随机选择节点(需保证 该节点至少有一个pod)】
【Storage】
PersistentVolumeClaim.storageClassName: 自定义存储类
【Deployment】
Deployment.minReadySeconds: pod 就绪之后 等待10s,方便就绪探针检测成功后,再继续滚动升级;
最好设置,若不设置,一旦有一次 就绪探针调用成功,就会认为 pod 处于可用
Deployment.strategy: 控制升级的策略, 每次更新多少个 新的 pod
Deployment.processDeadlineSeconds: 多久没更新成功,就视为失败, 自动取消 升级过程
【StatefulSet】
StatefulSet.volumeClaimTemplates : 根据模板 为 每个 pod 各创建一个 PVC
【PodSecurityPolicy】
PodSecurityPolicy.allowedCapabilities: 集群管理员 限制 Pod pod.securityContext.capabilites 中能够添加的 内核功能
PodSecurityPolicy.defaultAddCapabilities: 集群管理员 给 Pod 的每个容器 默认添加的功能(除非 在Pod 中显示禁用)
PodSecurityPolicy.requiredDropCapabilities: 集群管理员 给 Pod 的每个容器 禁用的功能(若 在Pod 中显示添加,则拒绝)
PodSecurityPolicy.volumes: 集群管理员 允许 Pod 使用的存储卷
【NetworkPolicy】
NetworkPolicy.ingress : 集群管理员 限制 Pod 与 Pod 之间的访问
NetworkPolicy.egress : 集群管理员 限制 Pod 只能被 节点选择器选择的节点/命名空间 访问
【HorizontalpodAutoscaler】
autoscale.targetAverageUtilization: HPA 伸缩容 目标 CPU 使用率