让从节点也可以使用kubectl
bash
# 1. 将 master 节点中 /etc/kubernetes/admin.conf 拷贝到需要运行的服务器的 /etc/kubernetes 目录中
[root@master01 ~]# scp /etc/kubernetes/admin.conf node1:/etc/kubernetes/admin.conf
admin.conf 100% 5565 6.9MB/s 00:00
# 2. 在对应的服务器上配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
深入Pod
使用 YAML 文件创建 Nginx
1. 编写 Pod YAML 文件
bash
[root@master01 pods]# cat nginx-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
labels:
type: nginx-demo
version: v1
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
command:
- nginx
- -g
- 'daemon off;'
ports:
- name: http
containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
2. 执行创建命令
bash
# 创建Pod
kubectl apply -f nginx-demo.yaml
# 查看Pod状态(等待状态变为Running)
kubectl get pods nginx-demo
# 查看Pod详细信息(排查问题用)
kubectl describe pod nginx-demo
kubectl exec -it nginx-demo /bin/bash
这条命令的本质是进入 Kubernetes 集群中名为 nginx-demo 的 Pod 内部,打开一个交互式的 Bash 终端,让你可以像操作本地服务器一样,在 Pod 里执行命令、查看文件、调试程序。

bash
1使用describe
[root@node01 kubernetes]# kubectl describe pod nginx-demo|grep 'IP'
IP: 10.244.1.4
IPs:
IP: 10.244.1.4
2使用 kubectl get pod nginx-demo -o wide
[root@node01 kubernetes]# kubectl get pod nginx-demo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-demo 1/1 Running 1 4h57m 10.244.1.4 node01 <none> <none>
探针
一、探针类型
| 类型 | 用途 |
|---|---|
| StartupProbe | 检测容器内应用是否完成启动,启动完成后才会执行存活 / 就绪探针 |
| LivenessProbe | 检测容器是否 "存活",若失败则触发容器重启 |
| ReadinessProbe | 检测容器是否 "就绪"(可接收流量),若失败则从服务负载均衡中移除该容器 |
当配置了 startupProbe 后,会先禁用其他探针,直到 startupProbe 成功后,其他探针才会继续,防止容器在启动阶段因存活探针失败而被无限重启
二、探测方式
| 方式 | 实现逻辑 |
|---|---|
| ExecAction | 在容器内执行指定命令,通过命令退出码(0 为成功)判断状态 |
| TCPSocketAction | 尝试与容器的指定端口建立 TCP 连接,连接成功则状态正常 |
| HTTPGetAction | 向容器的指定 HTTP 接口发送 GET 请求,通过响应状态码(200-399 为成功)判断状态 |
避坑要点
- 避免执行耗时过长的命令(如大文件遍历),否则会因探测超时导致误判。
- 确保命令的退出码严格符合规则(0 成功,非 0 失败),自定义脚本需显式返回退出码。
三· 探针的核心配置参数
| 参数名 | 配置值 | 具体含义 |
|---|---|---|
initialDelaySeconds |
60 | 容器启动后,延迟 60 秒才执行第一次探针检测(避免应用未初始化就被探测)。 |
timeoutSeconds |
2 | 单次探针检测的超时时间为 2 秒,若 2 秒内未得到探测结果,直接判定为失败。 |
periodSeconds |
5 | 探针的检测间隔为 5 秒,即每次检测完成后,等待 5 秒再执行下一次检测。 |
successThreshold |
1 | 连续1 次探测成功,就将容器状态判定为 "健康 / 就绪"(就绪探针专用,存活探针默认 1 且不可改)。 |
failureThreshold |
2 | 连续2 次探测失败,就将容器状态判定为 "不健康 / 未就绪",触发后续动作(如重启容器、移除流量)。 |
启动指针的使用
Kubernetes Pod 配置示例(结合 startup/http、liveness/exec、readiness/tcp)
bash
startupProbe:
# 探测方式:发送HTTP GET请求
httpGet:
# 探测的HTTP路径:Nginx默认首页
path: /index.html
# 探测的容器端口
port: 80
# 失败阈值:连续探测失败3次,判定启动失败并触发容器重启
failureThreshold: 3
# 探测间隔:每10秒执行一次探测
periodSeconds: 10
# 成功阈值:连续1次探测成功,即判定启动完成
successThreshold: 1
# 超时时间:单次探测请求超时时间为5秒,超时则判定为失败
timeoutSeconds: 5
# 存活探针配置块,检测Nginx进程是否存活
livenessProbe:
# 采用Exec命令方式探测
exec:
# 定义执行的命令数组
command:
# 执行进程查找命令pgrep
- pgrep
# 指定查找的进程名为nginx
- nginx
# 每次探测的间隔时间为5秒
periodSeconds: 5
# 连续探测失败2次则判定为进程异常
failureThreshold: 2
# 单次命令执行的超时时间为3秒
timeoutSeconds: 3
# 就绪探针配置块,检测80端口是否可接收流量
readinessProbe:
# 采用TCP端口连接方式探测
tcpSocket:
# 指定探测的容器端口为80
port: 80
# 每次探测的间隔时间为3秒
periodSeconds: 3
# 连续探测失败2次则标记为未就绪
failureThreshold: 2
# 单次TCP连接的超时时间为2秒
timeoutSeconds: 2
Pod的生命周期

一、Pod 的基础:Pause 容器
- 作用 :是每个 Pod 默认包含的 "根容器",负责:
- 维护 Pod 的网络命名空间(使 Pod 内所有容器共享同一 IP、端口等网络资源);
- 保持 Pod 的 "存活状态"(即使主容器异常退出,Pause 容器仍会维持 Pod 的存在)。
二、初始化阶段(Init Containers)
- 执行逻辑 :Pod 启动后,会先按顺序运行
0个或多个Init C(初始化容器),所有 Init 容器执行完成后,才会启动主容器。 - 典型用途 :
- 初始化环境(如创建目录、配置文件);
- 等待依赖服务就绪(如等待数据库启动);
- 拉取主容器所需的资源(如配置文件、依赖包)。
三、主容器(Main Container)的生命周期流程
1. 启动阶段
command:容器启动时执行的命令(替代容器镜像默认的启动命令)。postStart钩子函数 :- 触发时机:主容器启动后立即执行(无需等待容器内进程完全就绪)。
- 用途:执行容器启动后的初始化操作(如注册服务到注册中心、初始化缓存)。
2. 运行阶段:探针(Probe)机制
Kubernetes 通过三类探针监控容器状态:
| 探针类型 | 作用 | 典型场景 |
|---|---|---|
Startup(启动探针) |
检测容器内应用是否成功启动完成(仅在启动阶段生效)。 | 适用于启动慢的应用(如 Java 服务),避免其他探针过早检测导致误判。 |
Readiness(就绪探针) |
检测容器是否可接收请求(若失败,Pod 会从服务的负载均衡列表中移除)。 | 应用启动后需加载配置 / 数据,加载完成前不接收流量。 |
Liveness(存活探针) |
检测容器是否正常存活(若失败,按 Pod 的重启策略重启容器)。 | 应用进程死锁、无响应时,自动重启恢复。 |
3. 终止阶段
preStop钩子函数 :- 触发时机:容器被销毁前执行(Kubernetes 会等待该钩子完成后,再发送停止信号)。
- 用途:执行优雅终止操作(如关闭连接、持久化数据、从注册中心注销服务)。
四、生命周期管理的核心目的
通过 Init 容器、钩子函数、探针等机制,Kubernetes 实现了 Pod 的 **"可控启动、可靠运行、优雅终止"**,保证应用在分布式环境中的稳定性与可用性。
为容器配置生命周期钩子函数
bash
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
labels:
type: nginx-demo
version: v1
spec:
# 1. 调宽限期到60秒(大于preStop的总执行时间,留冗余)
terminationGracePeriodSeconds: 60
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
# 2. 修正生命周期钩子:注释+逻辑+时间匹配
lifecycle:
postStart: # 容器启动后执行(修正注释和内容)
exec:
command:
- sh
- -c
- "echo '<h1>PostStart: Nginx started!</h1>' > /usr/share/nginx/html/poststart.html"
preStop: # 容器终止前执行(优雅关闭+合理sleep)
exec:
command:
- sh
- -c
- "nginx -s quit; sleep 40; echo 'sleep finished...' >> /usr/share/nginx/html/prestop.html"
# 3. 规范command缩进(不影响运行,仅提升可读性)
command:
- nginx
- -g
- 'daemon off;'
ports:
- name: http
containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!