k8s-字段

原文地址: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 使用率

k8s-字段

上一篇:修改.gitignore不生效问题


下一篇:git:ssh-keygen不是内部或外部命令