k8s pod深度理解

发布于:2025-07-05 ⋅ 阅读:(22) ⋅ 点赞:(0)

一、理论
pod等同于逻辑主机,在它上面运行各种程序(容器)

pod的pause容器作用,pod网络、存储
所有容器的父容器,负责回收僵尸容器,同时它为pod中的容器提供了统一的网络及统一的共享存储。

pod的endpoint是指pod中容器的ip和端口,也就是内部服务器。


pod探针的类型及各类型的检测方式
存活探针是容器启动后检测其是否存活

就绪探针是容器存活检测它是否就绪,能对外提供服务。

启动探针是容器在初始化阶段,测试容器是否启动成功。

存活探针(LivenessProbe)    - ExecAction:容器内执行命令,返回值为 0 则健康
TCPSocketAction:TCP 连接指定端口开放则健康
HTTPGetAction:HTTP Get 请求状态码 200-400 则健康    检测容器是否正常运行,失败则重启容器

就绪探针(ReadinessProbe)    同上    检测容器是否准备好接收流量,失败则不路由流量至该容器
启动探针(StartupProbe)    同上    检测容器内应用是否启动成功,成功前其他探针无效

pod镜像拉取策略和重启策略
拉取策略    说明
Always    总是拉取镜像,无论是否存在
Never    无论是否存在都不拉取镜像
IfNotPresent    镜像不存在时拉取,是 K8s 默认策略,若 tag 为 latest 则总是拉取

重启策略    说明
Always    容器退出即重启,适用于长期运行服务
OnFailure    容器以非零退出码退出时重启,适用于任务型 Pod
Never    容器退出后不重启,适用于一次性任务

静态pod是什么
脱离api server独立部署的pod

pod启动过程与运行状态
用户提交:通过 kubectl 提交 Pod YAML 到 API Server。
API 存储:API Server 验证请求并将 Pod 定义存入 etcd。
调度器选择:Scheduler 根据资源、亲和性等策略选择目标节点。
kubelet 创建:目标节点的 kubelet 调用容器运行时(如 Docker)创建容器。
网络与存储初始化:通过 CNI 插件配置网络,挂载存储卷。
容器启动:拉取镜像(若需要)并启动容器。
状态更新:kubelet 将 Pod 状态同步到 API Server。
探针检测:按配置执行启动探针、存活探针、就绪探针。
就绪标记:所有容器通过检测后,Pod 进入 Running 状态并接收流量。
持续监控:kubelet 定期检查容器健康,按重启策略处理故障。

运行状态
状态    说明
Pending    Pod 已被接收,但容器未创建完成
Running    Pod 已绑定节点,所有容器已创建,至少一个在运行
Succeeded    所有容器执行成功并终止,不再重启
Failed    所有容器终止,至少一个以失败方式终止
Unknown    无法获取 Pod 状态,通常因通信问题
ImagePullBackOff    镜像拉取失败,如镜像不存在、网络不通
CrashLoopBackoff    容器启动失败,如启动命令错误、健康检查不通过
 

二、实践

创建单容器pod
1、编写yaml文件
# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
2、创建pod
kubectl create -f nginx-pod.yaml
3、查看pod状态
kubectl get pods


创建nginx+php多容器pod
1、编写 YAML 文件
# nginx-php.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-php
  labels:
    name: nginx-php
spec:
  containers:
  - name: nginx-app
    image: nginx:1.7.9
    ports:
    - containerPort: 80
  - name: php-app
    image: bitnami/php-fpm
    imagePullPolicy: Never
    ports:
    - containerPort: 9000

2、创建pod
kubectl apply -f nginx-php.yaml

3、查看pod状态
kubectl get pods

暴露pod端口
ku port-forward --address 0.0.0.0 pod/nginx 8080:80

访问
curl 192.168.10.101:8080



创建静态pod
1、编写yaml文件
vim /etc/kubernetes/manifests/nginx-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    name: static-web
spec:
  containers:
  - name: static-web
    image: nginx:1.7.9
    ports:
    - containerPort: 80

2、查看静态pod状态
kubectl get pods

3、删除静态pod
rm -rf /etc/kubernetes/manifests/nginx-pod.yaml


网站公告

今日签到

点亮在社区的每一天
去签到