00000224
目的:快速确认集群与控制平面可用性,节点健康情况。
| 场景 | 命令 | 实操案例 | 说明 |
|---|---|---|---|
查看集群核心组件状态 |
kubectl cluster-info |
kubectl cluster-info |
输出 API Server、etcd、CoreDNS 地址,确认 |
查看节点列表与状态 |
kubectl get nodes -o wide |
kubectl get nodes -o wide |
|
查看当前上下文 |
kubectl config current-context |
kubectl config current-context |
多集群环境下确认当前操作的集群(如 |
目的:全局视野掌握资源分布,快速定位具体资源状态与事件。
| 场景 | 命令 | 实操案例 | 说明 |
|---|---|---|---|
查看所有命名空间资源概览 |
kubectl get all -A |
kubectl get all -A |
快速了解 Pod、Service、Deployment 等分布情况 |
按标签过滤 Pod |
kubectl get pods -l <key=value> -n <ns> |
kubectl get pods -l app=nginx -n prod |
标签用于资源分组,方便批量操作 |
查看 Service 详情 |
kubectl get svc -o wide |
kubectl get svc -o wide |
显示 ClusterIP、NodePort、关联的 Endpoints |
| 场景 | 命令 | 实操案例 | 说明 |
|---|---|---|---|
查看 Pod 详细信息(含事件) |
kubectl describe pod <name> -n <ns> |
kubectl describe pod nginx-pod-abc -n default |
|
查看 Pod 日志 |
kubectl logs <pod> [-c <container>] |
kubectl logs nginx-pod-abc -n default |
多容器 Pod 需加 |
实时跟踪日志 |
kubectl logs <pod> -f |
kubectl logs nginx-pod-abc -f |
类似 |
查看上一次崩溃日志 |
kubectl logs <pod> —previous |
kubectl logs nginx-pod-abc —previous |
容器崩溃时获取最后一次启动日志 |
需安装并运行 metrics-server
# 安装方式,需科学上网 wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml kubectl apply -f components.yaml
| 场景 | 命令 | 实操案例 | 说明 |
|---|---|---|---|
查看节点资源使用 |
kubectl top nodes |
kubectl top nodes —sort-by=memory |
找出高负载节点,CPU/内存 > 80% 需关注 |
查看 Pod 资源使用 |
kubectl top pods |
kubectl top pods -l app=nginx -n prod |
判断是否接近 limits,预防 OOM 或 CPU 限流 |
SRE 原则:优先 apply(声明式、幂等、可追踪),避免 create/replace。
| 场景 | 命令 | 实操案例 | 说明 |
|---|---|---|---|
从 YAML 创建/更新资源 |
kubectl apply -f <file.yaml> |
kubectl apply -f deployment.yaml |
推荐方式,配置文件纳入 Git |
快速创建临时测试 Pod |
kubectl run <name> —image=<img> —rm -it — <cmd> |
kubectl run test —image=busybox —rm -it — /bin/sh |
|
扩缩容 Deployment |
kubectl scale deployment <name> —replicas=<n> |
kubectl scale deployment nginx-deploy —replicas=5 -n prod |
应对流量高峰 |
滚动更新镜像版本 |
kubectl patch deployment <name> -p ‘<json>‘ |
kubectl patch deployment nginx-deploy -p ‘{“spec”:{“template”:{“spec”:{“containers”:[{“name”:”nginx”,”image”:”nginx:1.22”}]}}}}’ |
避免 downtime |
回滚 Deployment |
kubectl rollout undo deployment <name> |
kubectl rollout undo deployment nginx-deploy -n prod |
发布失败时快速恢复 |
查看滚动更新状态 |
kubectl rollout status deployment <name> |
kubectl rollout status deployment nginx-deploy |
确认更新完成再继续操作 |
思路:事件 → 资源状态 → 日志 → 调试容器。
| 场景 | 命令 | 实操案例 | 说明 |
|---|---|---|---|
查看集群事件(按时间排序) |
kubectl get events —sort-by=.lastTimestamp |
kubectl get events -n prod —sort-by=.lastTimestamp |
|
查看 Pod 详细状态 |
kubectl describe pod <name> |
kubectl describe pod nginx-pod-abc |
找 Events 中的错误信息 |
实时跟踪日志 |
kubectl logs <pod> -f |
kubectl logs nginx-pod-abc -f |
观察运行期错误 |
调试 Pod(创建临时容器) |
kubectl debug <pod> -it —image=<debug-img> —target=<container> |
kubectl debug nginx-pod-abc -it —image=busybox —target=nginx |
排查网络/存储问题(K8s ≥1.20) |
进入容器调试 |
kubectl exec -it <pod> — <cmd> |
`kubectl exec -it nginx-pod-abc — /bin/bash |
手动检查配置、进程 |
| 场景 | 命令 | 实操案例 | 说明 |
|---|---|---|---|
创建命名空间 |
kubectl create namespace <ns> |
kubectl create namespace prod |
环境隔离 |
给资源打标签 |
kubectl label <type> <name> <key=value> |
kubectl label pod nginx-pod-abc env=prod |
用于分组、选择器匹配 |
验证用户权限 |
kubectl auth can-i <verb> <resource> —as=<user> |
kubectl auth can-i create pods —as=dev-user -n prod |
RBAC 权限校验 |
注意:国内需要先docker pull nginx:1.21 镜像。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
# 注释版本
# API版本声明:表示该资源使用的Kubernetes API版本(apps/v1是Deployment的稳定版本,适用于K8s 1.9+)
apiVersion: apps/v1
# 资源类型:声明这是一个Deployment资源(用于管理无状态应用的副本生命周期)
kind: Deployment
# 元数据:定义资源的标识信息
metadata:
# 资源名称:Deployment的唯一标识(同一命名空间内需唯一,小写字母、数字、短横线组合)
name: nginx-deploy
# 命名空间:资源所属的命名空间(此处为default,生产环境建议使用prod/dev等隔离环境)
namespace: default
# (可选)标签:用于资源分组或选择器匹配(示例中未显式定义,可通过kubectl label添加)
# 规格:定义Deployment的具体行为(核心配置)
spec:
# 副本数:期望维持的Pod副本数量(生产环境需根据流量评估,避免资源浪费或不足)
replicas: 3
# 标签选择器:定义Deployment管理的Pod范围(必须与template.metadata.labels一致,否则无法关联Pod)
selector:
matchLabels:
app: nginx # 匹配标签为app=nginx的Pod(Deployment通过此选择器监控Pod状态并自愈)
# Pod模板:定义Pod的"蓝图",Deployment根据该模板创建具体Pod
template:
metadata:
# Pod标签:Pod自身的标识(需与selector.matchLabels一致,否则Deployment无法管理)
labels:
app: nginx # 标签用于Service选择、资源过滤(如kubectl get pods -l app=nginx)
# Pod规格:定义Pod内容器的详细配置
spec:
# 容器列表:Pod内的容器定义(至少一个容器,可多个紧密耦合的容器如Sidecar)
containers:
- name: nginx # 容器名称(同一Pod内唯一,用于日志、调试时标识容器)
# 镜像地址:容器启动时拉取的镜像(必须指定版本,避免使用latest导致不可控)
image: nginx:1.21
# 端口声明:容器暴露的端口(仅声明,不实际映射,供Service关联)
ports:
- containerPort: 80 # 容器内应用监听的端口(Nginx默认HTTP端口)
# 资源限制:定义容器的资源请求与上限(SRE容量规划的核心,避免资源争抢或OOM)
resources:
# 资源请求(requests):容器启动时K8s调度器保证的最小资源(必须满足,否则Pod无法调度)
requests:
cpu: 100m # CPU请求:0.1核(1核=1000m,根据应用实际CPU使用量设置,避免高估)
memory: 128Mi # 内存请求:128兆字节(根据应用常驻内存设置,避免节点资源碎片化)
# 资源限制(limits):容器运行时可使用的最大资源(超限会被K8s限制或杀死)
limits:
cpu: 500m # CPU限制:0.5核(预留20%缓冲,避免突发流量导致CPU节流)
memory: 512Mi # 内存限制:512兆字节(根据应用峰值内存设置,超限触发OOMKilled)
kubectl apply -f nginx-deploy.yaml kubectl get deployments nginx-deploy kubectl get pods -o wide kubectl top pods -l app=nginx
kubectl patch deployment nginx-deploy -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.25"}]}}}}'
kubectl rollout status deployment nginx-deploy
# 缩小内存限制触发 OOM
kubectl patch deployment nginx-deploy -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","resources":{"limits":{"memory":"90Mi"}}}]}}}}'
# 观察 Pod 状态
kubectl get pods -w
# 查看事件
kubectl get events --sort-by=.lastTimestamp
# 查看 Pod 详情找 OOM 原因
kubectl describe pod <oom-pod-name>
# 修复:恢复内存限制
kubectl patch deployment nginx-deploy -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","resources":{"limits":{"memory":"512Mi"}}}]}}}}'
kubectl apply+ Git 管理 YAML,确保可重复、可追溯。app、env、version),配合 -l高效过滤。kubectl get events找 Warning→ describe看细节 → logs定位根因。kubectl top+ Prometheus 长期指标存储,提前预警资源瓶颈。