Kubernetes v1.8+ 支持容器间共享 PID namespace,需要 docker >= 1.13.1,并配置 kubelet--docker-disable-shared-pid=false
。在 Kubernetes v1.10+--docker-disable-shared-pid
已被弃用,如果要共享 PID namespace,需要设置 v1.PodSpec 中的 ShareProcessNamespace 为 true,如下所示1spec:2shareProcessNamespace: trueCopied!
在生产环境中,推荐使用 Deployment、StatefulSet、Job 或者 CronJob 等控制器来创建 Pod,而不推荐直接创建 Pod。
PodStatus.Phase
抽象 Pod 的状态(但并不直接反映所有容器的状态)。可能的 Phase 包括restartPolicy
可以用来设置是否对退出的 Pod 重启,可选项包括 Always
、OnFailure
、以及 Never
。比如restartPolicy
时的动作为phase
保持 Running.phase
变成 Succeeded.phase
变成 Succeeded.restartPolicy
时的动作为phase
保持 Running.phase
保持 Running.phase
变成 Failed.restartPolicy
时的动作为phase
保持 Running.phase
保持 Running.phase
保持 Running.restartPolicy
时的动作为phase
保持 Running.phase
保持 Running.phase
变成 Failed.restartPolicy
时的动作为phase
保持 Running.phase
保持 Running.phase
变成 Failed.phase
变成 Failedphase
设置为 Failed.HOSTNAME
环境变量保存了该 Pod 的 hostname。IfNotPresent
,但 :latest
标签的镜像默认为 Always
。:latest
标签,而开发环境中可以借助 :latest
标签自动拉取最新的镜像。default.svc.cluster.local
) 后缀,通过 kube-dns 查询 (默认策略)spec.hostIPC
参数为 true,使用主机的 IPC 命名空间,默认为 false。spec.hostNetwork
参数为 true,使用主机的网络命名空间,默认为 false。spec.hostPID
参数为 true,使用主机的 PID 命名空间,默认为 false。spec.hostname
参数实现,如果未设置默认使用 metadata.name
参数的值作为 Pod 的 hostname。spec.subdomain
参数设置 Pod 的子域名,默认为空。busybox-2.default-subdomain.default.svc.cluster.local
,也可以简写为 busybox-2.default-subdomain.default
:pod-ip-address.my-namespace.pod.cluster.local
,如 1-2-3-4.default.pod.cluster.local
default-subdomain
(即 subdomain)的 headless service,否则其他 Pod 无法通过完整域名访问到该 Pod(只能自己访问到自己)spec.ports
,即便它看起来并不需要),否则 Pod 与 Pod 之间依然无法通过完整域名来访问。--feature-gates=CustomPodDNS=true
开启设置每个 Pod DNS 地址的功能。注意该功能在 v1.10 中为 Beta 版,v1.9 中为 Alpha 版。
/etc/resolv.conf
,如spec.containers[].resources.limits.cpu
:CPU 上限,可以短暂超过,容器也不会被停止spec.containers[].resources.limits.memory
:内存上限,不可以超过;如果超过,容器可能会被终止或调度到其他资源充足的机器上spec.containers[].resources.limits.ephemeral-storage
:临时存储(容器可写层、日志以及 EmptyDir 等)的上限,超过后 Pod 会被驱逐spec.containers[].resources.requests.cpu
:CPU 请求,也是调度 CPU 资源的依据,可以超过spec.containers[].resources.requests.memory
:内存请求,也是调度内存资源的依据,可以超过;但如果超过,容器可能会在 Node 内存不足时清理spec.containers[].resources.requests.ephemeral-storage
:临时存储(容器可写层、日志以及 EmptyDir 等)的请求,调度容器存储的依据millicpu (m)
表示少于 1 个 CPU 的情况,如 500m = 500millicpu = 0.5cpu
,而一个 CPU 相当于E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki
等。kubelet ----cpu-manager-policy=static
为 Guaranteed(即 requests.cpu 与 limits.cpu 相等)Pod 绑定 CPU(通过 cpuset cgroups)。0
表示执行成功,否则表示失败[200, 400)
之间表示请求成功,否则表示失败kubernetes.io/ingress-bandwidth
和 kubernetes.io/egress-bandwidth
这两个 annotation 来限制 Pod 的网络带宽仅 kubenet 支持限制带宽目前只有 kubenet 网络插件支持限制网络带宽,其他 CNI 网络插件暂不支持这个功能。
disktype=ssd
标签的 Node 上:/etc/hosts
是 kubelet 自动生成的,并且仅包含 localhost 和 podName 等。不建议在容器内直接修改 /etc/hosts
文件,因为在 Pod 启动或重启时会被覆盖。/etc/hosts
文件格式如下,其中 nginx-4217019353-fb2c5
是 podName:pod.Spec.HostAliases
来增加 hosts 内容,如hugepages-<size>
(如 hugepages-2Mi
)。使用前要配置--feature-gates="HugePages=true"
shmget()
的 SHM_HUGETLB
选项时,应用必须运行在匹配 proc/sys/vm/hugetlb_shm_group
的用户组(supplemental group)中--feature-gates=PodPriority=true
--runtime-config=scheduling.k8s.io/v1alpha1=true --admission-control=Controller-Foo,Controller-Bar,...,Priority
Kubernetes 自动创建了system-cluster-critical
和system-node-critical
等两个 PriorityClass,用于 Kubernetes 核心组件。
kernel.shm_rmid_forced
net.ipv4.ip_local_port_range
net.ipv4.tcp_syncookies
kubelet --experimental-allowed-unsafe-sysctls 'kernel.msg*,net.ipv4.route.min_pmtu'