Overview
Skills such as Pod lifecycle management, log viewing, and exec debugging.
Pod Viewing
# 列出 Pod
kubectl get pods
kubectl get pods -o wide # 详细信息
kubectl get pods -A # 所有命名空间
kubectl get pods -n namespace
kubectl get pods -l app=nginx # 按标签过滤
kubectl get pods --field-selector status.phase=Running
Pod Details
kubectl describe pod pod-name kubectl get pod pod-name -o yaml kubectl get pod pod-name -o jsonpath='{.status.phase}'
## 日志查看
```bash
# 查看日志
kubectl logs pod-name
kubectl logs pod-name -c container-name # 指定容器
kubectl logs pod-name --all-containers # 所有容器
# 实时跟踪
kubectl logs -f pod-name
kubectl logs -f pod-name --since=1h # 最近1小时
kubectl logs -f pod-name --tail=100 # 最后100行
# 上一个容器的日志(崩溃后)
kubectl logs pod-name --previous
# 多 Pod 日志
kubectl logs -l app=nginx # 按标签
kubectl logs -l app=nginx --max-log-requests=10
Container Debugging
exec into Container
# 进入容器
kubectl exec -it pod-name -- /bin/bash
kubectl exec -it pod-name -- sh
kubectl exec -it pod-name -c container-name -- /bin/bash
# 执行命令
kubectl exec pod-name -- ls -la
kubectl exec pod-name -- cat /etc/hosts
kubectl exec pod-name -- env
Debugging Container
# 使用 debug 容器(K8s 1.18+)
kubectl debug pod-name -it --image=busybox --target=container-name
# 复制 Pod 进行调试
kubectl debug pod-name -it --copy-to=debug-pod --container=debug --image=busybox
# 节点调试
kubectl debug node/node-name -it --image=busybox
Port Forwarding
# 转发到本地
kubectl port-forward pod-name 8080:80
kubectl port-forward pod-name 8080:80 --address 0.0.0.0
# 后台运行
kubectl port-forward pod-name 8080:80 &
Pod Lifecycle
Create Pod
# pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 5
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 3
kubectl apply -f pod.yaml
kubectl create -f pod.yaml
Delete Pod
kubectl delete pod pod-name
kubectl delete pod pod-name --force --grace-period=0 # 强制删除
kubectl delete pods -l app=nginx # 按标签删除
kubectl delete pods --all -n namespace # 删除所有
Pod Status
# 查看 Pod 状态
kubectl get pod pod-name -o jsonpath='{.status.phase}'
# 等待 Pod 就绪
kubectl wait --for=condition=Ready pod/pod-name --timeout=60s
# 查看事件
kubectl get events --field-selector involvedObject.name=pod-name
Resource Management
View Resource Usage
# Pod 资源使用
kubectl top pods
kubectl top pods -n namespace
kubectl top pod pod-name --containers
# 按资源排序
kubectl top pods --sort-by=cpu
kubectl top pods --sort-by=memory
Resource Configuration
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Common Scenarios
Scenario 1: Troubleshooting Pod Startup Failure
# 1. 查看 Pod 状态
kubectl get pod pod-name -o wide
# 2. 查看事件
kubectl describe pod pod-name | grep -A 20 Events
# 3. 查看日志
kubectl logs pod-name
kubectl logs pod-name --previous # 如果容器重启
# 4. 检查镜像
kubectl get pod pod-name -o jsonpath='{.spec.containers[*].image}'
Scenario 2: Troubleshooting CrashLoopBackOff
# 1. 查看退出原因
kubectl describe pod pod-name | grep -A 5 "Last State"
# 2. 查看上一次日志
kubectl logs pod-name --previous
# 3. 检查资源限制
kubectl describe pod pod-name | grep -A 10 "Limits"
# 4. 检查探针配置
kubectl get pod pod-name -o yaml | grep -A 10 "livenessProbe"
Scenario 3: Temporarily Running a Debugging Pod
# 运行临时 Pod
kubectl run debug --rm -it --image=busybox -- sh
kubectl run debug --rm -it --image=nicolaka/netshoot -- bash
# 在特定节点运行
kubectl run debug --rm -it --image=busybox --overrides='{"spec":{"nodeName":"node-name"}}' -- sh
Scenario 4: Copying Files
# 从 Pod 复制到本地
kubectl cp pod-name:/path/to/file ./local-file
kubectl cp namespace/pod-name:/path/to/file ./local-file
# 从本地复制到 Pod
kubectl cp ./local-file pod-name:/path/to/file
Troubleshooting
| Status | Possible Cause | Troubleshooting Method |
|---|---|---|
| Pending | Insufficient Resources/Scheduling Issues | kubectl describe pod View events |
| ImagePullBackOff | Image Pull Failure | Check image name and registry authentication |
| CrashLoopBackOff | Application Crash | kubectl logs --previous |
| OOMKilled | Memory Limit Exceeded | Increase memory limits |
| Evicted | Insufficient Node Resources | Check node resources, clean up Pods |
| Unknown | Node Not Ready | Check node status |