管理Pod资源对象04.md

pod资源类型

静态pod:

​ 由kubelet加载配置信息后,自动在节点级创建的pod。没有控制器管它的。

kubelet会自动扫描 /etc/kubernetes/manifests/下的yaml,都认为是pod资源的定义,会自动起来。

root@k8s-master02:~# ls /etc/kubernetes/manifests/
etcd.yaml  kube-apiserver.yaml  kube-controller-manager.yaml  kube-scheduler.yaml

​ 这些目录只存在于master上;这些yaml定义在哪个节点上,哪个节点上就进行加载。

自主式pod:

​ 由用户直接定义并创建的pod,用户提交给apiserver后,就由调度器来绑定到某个节点上,接下来就由节点上的kubelet把它创建运行起来。

​ 有一个调度的过程,但只会调度一次;第一种静态pod没有调度的过程。

​ 由于没有工作负载型控制器管控,一旦用户删了就没了。或者如果那个节点down了,那个pod也没了。调度器只会在创建的时候执行一次调度,以后就不管了。

由工作负载型控制器(workload controller)管控的pod

​ 所以在生成环境中,哪怕就一个pod在运行,也要用workload controller来管控它。因为存在这么一个机制:

​ 如果pod被删了,控制器会自己发现(控制器要求得有完全等同于用户期望数量的pod存在),如果pod删了,控制器会自动请求apiserver创建用模板;如果节点down,一样会导致pod少了,控制器也会自动请求apiserver创建。重新创建的请求就会有schdule重新调度和绑定。

pod

容器集 ,kubernets编排运行应用的最小单元。

​ 仅应该包含具有超亲密关系的容器,评估指标 必须通过IPC通信,或共享一个Volume的时候。

​ 在K8S里IPC一般是:通过 localhost 通信、通过 Unix Domain Socket 通信

一个pod可以有多个容器,而pod是调度的最小单元,意味着一个pod里的所有容器必须运行在同一个node(物理机/VM)上。

这些容器集也就是pod,共享Network名称空间(内核级),这个network namespace不是k8s里的namespace(类似文件夹)。

network内核级别的namespace,一般连带共享了,网卡tcp/ip socket hostname,也就是还共享了 IPC、UTS。 # 一个pod里的容器共享了network、ipc、uts 这些namepaces

底层基础设置容器pause

​ pause人如其名,暂停,创建出来不会运行,只是创建出来提供资源,共享给其他容器。

​ 对于pod里的容器而言,和docker不太一样(让后来的容器共享第一个容器的网络名称空间的),pod里的共享的网络名称空间有一个底层基础的容器支撑--pause。很小几乎不占用资源,但是可以支撑一个pod底层基础设置。pod里我们创建的任何容器都是共享的该pause容器的资源。

​ 在任何运行pod的节点上,都可以看到很多pause容器的存在。

​ 一个pod对应一个pause,

root@k8s-master02:~# crictl pods --namespace kube-system --name coredns-86b4d456f8-pzmh9
POD ID              CREATED             STATE               NAME                       NAMESPACE           ATTEMPT             RUNTIME
73cd48b1a82bc       2 weeks ago         Ready               coredns-86b4d456f8-pzmh9   kube-system         0                   (default)
root@k8s-master02:~#
root@k8s-master02:~# crictl inspectp 73cd48b1a82bc | jq '.info.pid'
18650
root@k8s-master02:~#
root@k8s-master02:~# ps -fp $(crictl inspectp 73cd48b1a82bc | jq -r '.info.pid')
UID          PID    PPID  C STIME TTY          TIME CMD
65535      18650   18623  0 May20 ?        00:00:00 /pause
root@k8s-master02:~#

###理解####
crictl pods 里的 73cd48b1a82bc
        ↓
这是这个 Pod 的 Sandbox
        ↓
Sandbox 对应宿主机 PID 18650
        ↓
PID 18650 的进程是 /pause

Network Namespace:网络命名空间,隔离网卡、IP、路由、端口、socket。

IPC Namespace:进程间通信命名空间,比如 System V IPC、POSIX 消息队列、共享内存。

UTS Namespace:主机名/域名命名空间,主要控制 hostname。

PID Namespace:进程号命名空间。

Mount Namespace:挂载命名空间,控制文件系统挂载视图。

User Namespace:用户命名空间,控制 UID/GID 映射。

Cgroup Namespace:控制组命名空间,和资源限制视图有关。

Time Namespace:时间命名空间,可以隔离系统时间视图,较新内核才有。

Pod 默认强绑定:Network、IPC、UTS Pod 可选共享:PID Pod 常用共享目录:Volume,不是 Mount Namespace Pod 权限控制:securityContext,不是直接操作 User Namespace Pod 资源控制:resources,不是直接操作 Cgroup Namespace

在 Kubernetes 里,Pod 不是简单地“所有 namespace 都共享”,而是默认共享网络相关的运行环境;进程、文件系统、用户、资源这些隔离仍然主要以容器为边界。

适合放在同一个 Pod:

  • 主容器 + 日志采集 sidecar
  • 主容器 + 代理 sidecar
  • 主容器 + 配置热更新 sidecar
  • 主容器 + 数据同步 sidecar
  • 必须共享 Volume 的辅助容器
  • 必须通过 localhost 通信的辅助容器

不适合放在同一个 Pod:

  • Web 服务 + MySQL

  • Nginx + Redis

  • 后端 API + 独立消息队列

  • 只是“业务上有关联”的两个服务

能通过 Service 访问的,通常不要塞进一个 Pod; 必须共享 localhost、Volume、生命周期的,才考虑放进一个 Pod。

写个简单的Pod

apiVersion: v1
kind: Pod
metadata:
  name: demoapp
  namespace: default
spec:
  containers:
  - name: demoapp  # 这里-可以和containers齐平,也可以缩进2格
    image: REGISTRY/REPOSITORY:TAG  # REGISTRY默认是从dockerhub下载,如果是从私有仓库,还需要补用户名密码。这里的REGISTRY也叫名称空间--仓库地址。

image-20260609135703577

这就是一个自主性Pod,不受制于任何工作负载控制器。正如前文所讲如果node挂了或者删了,pod也就没了。

到那时👇demoapp-xxx这三个Pod是受控于工作负载型控制器的,删了或者node挂了会重建。

image-20260609135845956

这个pod启动什么名称,就是什么名称,没有-xxx后缀,且调度到了node02

image-20260609135941522

kubectl delete pod 时,Kubernetes 默认会先给容器主进程发送 SIGTERM,并等待 terminationGracePeriodSeconds,默认 30 秒;如果进程在宽限期内没有退出,最后才会 SIGKILL 强杀👇

image-20260609141123492

#默认30s的宽限期👇
kubectl delete pod demoapp
# 没有宽限期👇直接删除,但是不推荐,会有问题
kubectl delete pod demoapp --force --grace-period=0

自主型Pod:demoapp删掉后不会重建

image-20260609142110689

工作负载型Pod:demoapp-xxx删掉后自动重建👇

image-20260609142404744

不等删完,就自动重建了

image-20260609142449652

Copyright 🌹 © oneyearice@126.com 2022 all right reserved,powered by Gitbook文档更新时间: 2026-06-09 14:25:28

results matching ""

    No results matching ""