kubectl 基础命令
学习目标
- 掌握 kubectl 的基本命令结构
- 学会查看和管理 Kubernetes 资源
- 理解常用命令的使用场景
核心概念
命令结构
kubectl [command] [TYPE] [NAME] [flags]
command (操作):
• get - 获取资源
• describe - 查看详情
• create - 创建资源
• apply - 应用配置
• delete - 删除资源
• logs - 查看日志
• exec - 执行命令
• edit - 编辑资源
• patch - 更新资源
• scale - 扩缩容
• rollout - 滚动更新
TYPE (资源类型):
• pod, pods, po
• deployment, deployments, deploy
• service, services, svc
• namespace, namespaces, ns
• node, nodes, no
• configmap, cm
• secret
• ingress, ing
• persistentvolume, pv
• persistentvolumeclaim, pvc
NAME (资源名称):
• 指定具体资源名称
• 可选,不指定则获取所有
flags (标志):
• -n, --namespace - 指定命名空间
• -o, --output - 输出格式
• -l, --label - 标签选择器
• -f, --file - 文件路径
• -A, --all-namespaces - 所有命名空间
• -w, --watch - 持续监听
• --dry-run - 试运行
输出格式
常用输出格式:
-o wide - 详细信息(默认格式扩展)
-o yaml - YAML 格式
-o json - JSON 格式
-o name - 只显示名称
-o jsonpath - JSONPath 表达式
示例:
kubectl get pods -o wide
kubectl get pods -o yaml
kubectl get pods -o json
kubectl get pods -o name
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
实践练习
练习 1:查看资源 (get)
# 查看所有 Pods
kubectl get pods
# 查看所有命名空间的 Pods
kubectl get pods -A
# 查看指定命名空间的 Pods
kubectl get pods -n kube-system
# 查看详细信息
kubectl get pods -o wide
# 查看 YAML 格式
kubectl get pod my-pod -o yaml
# 持续监听变化
kubectl get pods -w
# 按标签过滤
kubectl get pods -l app=nginx
# 按字段过滤
kubectl get pods --field-selector=status.phase=Running
# 排序
kubectl get pods --sort-by='.status.startTime'
# 只显示名称
kubectl get pods -o name
# 使用 JSONPath
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
kubectl get pods -o jsonpath='{.items[*].status.containerStatuses[0].restartCount}'
# 查看多个资源类型
kubectl get pods,services,deployments
练习 2:查看详情 (describe)
# 查看 Pod 详情
kubectl describe pod my-pod
# 查看 Deployment 详情
kubectl describe deployment my-app
# 查看 Service 详情
kubectl describe service my-service
# 查看 Node 详情
kubectl describe node minikube
# 查看指定命名空间的资源
kubectl describe pod my-pod -n development
# 查看事件
kubectl describe events
kubectl describe events -n kube-system
练习 3:创建资源 (create)
# 创建 Deployment
kubectl create deployment nginx --image=nginx:latest
# 创建命名空间
kubectl create namespace development
# 创建 Service
kubectl create service clusterip my-svc --tcp=80:80
# 创建 ConfigMap
kubectl create configmap my-config --from-literal=key1=value1
# 创建 Secret
kubectl create secret generic my-secret --from-literal=password=my-password
# 生成 YAML 文件 (dry-run)
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml
练习 4:应用配置 (apply)
# 应用 YAML 文件
kubectl apply -f deployment.yaml
# 应用多个文件
kubectl apply -f deployment.yaml -f service.yaml
# 应用目录下所有文件
kubectl apply -f ./manifests/
# 应用 URL
kubectl apply -f https://example.com/manifest.yaml
# 应用并显示变更
kubectl apply -f deployment.yaml --dry-run=server
# 递归应用目录
kubectl apply -f ./manifests/ -R
练习 5:删除资源 (delete)
# 删除 Pod
kubectl delete pod my-pod
# 删除 Deployment
kubectl delete deployment my-app
# 删除 Service
kubectl delete service my-service
# 删除 YAML 文件定义的资源
kubectl delete -f deployment.yaml
# 删除所有 Pods
kubectl delete pods --all
# 删除指定命名空间的资源
kubectl delete pod my-pod -n development
# 强制删除
kubectl delete pod my-pod --grace-period=0 --force
# 按标签删除
kubectl delete pods -l app=nginx
练习 6:查看日志 (logs)
# 查看 Pod 日志
kubectl logs my-pod
# 查看指定容器日志 (多容器 Pod)
kubectl logs my-pod -c my-container
# 持续输出日志
kubectl logs -f my-pod
# 查看最近 N 行
kubectl logs my-pod --tail=100
# 查看指定时间之后的日志
kubectl logs my-pod --since=1h
# 查看上一个容器的日志 (崩溃重启)
kubectl logs my-pod --previous
# 查看所有 Pods 的日志
kubectl logs -l app=nginx
# 输出到文件
kubectl logs my-pod > pod.log
练习 7:执行命令 (exec)
# 进入 Pod
kubectl exec -it my-pod -- /bin/bash
# 执行单个命令
kubectl exec my-pod -- ls /app
# 执行多个命令
kubectl exec my-pod -- /bin/sh -c "echo hello && ls /app"
# 指定容器 (多容器 Pod)
kubectl exec -it my-pod -c my-container -- /bin/bash
# 复制文件到 Pod
kubectl cp ./local-file.txt my-pod:/remote-path/
# 从 Pod 复制文件
kubectl cp my-pod:/remote-path/ ./local-path/
# 设置环境变量
kubectl exec -it my-pod -- env MY_VAR=value
练习 8:扩缩容 (scale)
# 扩容 Deployment
kubectl scale deployment my-app --replicas=3
# 缩容 Deployment
kubectl scale deployment my-app --replicas=1
# 条件扩缩容 (当前副本数为 3 时)
kubectl scale deployment my-app --replicas=5 --current-replicas=3
# 查看扩缩容状态
kubectl get deployment my-app
# 查看 Pod 变化
kubectl get pods -w
练习 9:滚动更新 (rollout)
# 查看更新状态
kubectl rollout status deployment/my-app
# 查看更新历史
kubectl rollout history deployment/my-app
# 查看指定版本详情
kubectl rollout history deployment/my-app --revision=2
# 回滚到上一版本
kubectl rollout undo deployment/my-app
# 回滚到指定版本
kubectl rollout undo deployment/my-app --to-revision=1
# 暂停更新
kubectl rollout pause deployment/my-app
# 恢复更新
kubectl rollout resume deployment/my-app
# 重启 Deployment (触发滚动更新)
kubectl rollout restart deployment/my-app
练习 10:编辑资源 (edit)
# 编辑 Pod
kubectl edit pod my-pod
# 编辑 Deployment
kubectl edit deployment my-app
# 编辑 Service
kubectl edit service my-service
# 使用指定编辑器
KUBE_EDITOR="nano" kubectl edit deployment my-app
# 编辑并保存为文件
kubectl edit deployment my-app --dry-run=client -o yaml > edited.yaml
练习 11:标签和注解
# 添加标签
kubectl label pod my-pod app=nginx
kubectl label pod my-pod env=production
# 修改标签
kubectl label pod my-pod app=nginx-v2 --overwrite
# 删除标签
kubectl label pod my-pod app-
# 查看标签
kubectl get pods --show-labels
# 按标签过滤
kubectl get pods -l app=nginx
kubectl get pods -l 'app in (nginx, apache)'
# 添加注解
kubectl annotate pod my-pod description='My Pod'
# 删除注解
kubectl annotate pod my-pod description-
练习 12:常用组合命令
# 查看所有运行中的 Pods
kubectl get pods --field-selector=status.phase=Running
# 查看所有非 Running 状态的 Pods
kubectl get pods --field-selector=status.phase!=Running
# 查看所有 Pods 的 IP
kubectl get pods -o jsonpath='{.items[*].status.podIP}'
# 查看所有 Nodes 的 IP
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'
# 查看所有 Services 的端口
kubectl get svc -o jsonpath='{.items[*].spec.ports[*].port}'
# 删除所有 evicted Pods
kubectl get pods --field-selector=status.phase=Failed -o name | xargs kubectl delete
# 查看资源使用情况 (需要 metrics-server)
kubectl top pods
kubectl top nodes
常用命令速查表
┌─────────────────────────────────────────────────────────────┐
│ kubectl 命令速查表 │
├─────────────────────────────────────────────────────────────┤
│ 查看资源 │
│ kubectl get <resource> 获取资源列表 │
│ kubectl get <resource> <name> 获取指定资源 │
│ kubectl get <resource> -o wide 详细信息 │
│ kubectl get <resource> -o yaml YAML 格式 │
│ kubectl get <resource> -w 持续监听 │
│ kubectl get <resource> -l <label> 按标签过滤 │
│ kubectl get <resource> -A 所有命名空间 │
├─────────────────────────────────────────────────────────────┤
│ 查看详情 │
│ kubectl describe <resource> <name> 详细信息 │
│ kubectl logs <pod> 查看日志 │
│ kubectl logs -f <pod> 持续输出日志 │
│ kubectl logs <pod> -c <container> 指定容器日志 │
├─────────────────────────────────────────────────────────────┤
│ 创建资源 │
│ kubectl create <resource> <name> 创建资源 │
│ kubectl apply -f <file> 应用配置 │
│ kubectl create -f <file> --dry-run=client 生成 YAML │
├─────────────────────────────────────────────────────────────┤
│ 删除资源 │
│ kubectl delete <resource> <name> 删除资源 │
│ kubectl delete -f <file> 删除文件定义的 │
│ kubectl delete <resource> --all 删除所有 │
├─────────────────────────────────────────────────────────────┤
│ 执行命令 │
│ kubectl exec -it <pod> -- /bin/bash 进入 Pod │
│ kubectl exec <pod> -- <command> 执行命令 │
│ kubectl cp <local> <pod>:<remote> 复制文件 │
├─────────────────────────────────────────────────────────────┤
│ 扩缩容 │
│ kubectl scale <resource> --replicas=N 扩缩容 │
├─────────────────────────────────────────────────────────────┤
│ 更新 │
│ kubectl set image <resource> <container>=<image> │
│ kubectl rollout status <resource> 更新状态 │
│ kubectl rollout history <resource> 更新历史 │
│ kubectl rollout undo <resource> 回滚 │
├─────────────────────────────────────────────────────────────┤
│ 配置 │
│ kubectl config view 查看配置 │
│ kubectl config use-context <context> 切换上下文 │
│ kubectl config set-context --current --namespace=<ns> │
└─────────────────────────────────────────────────────────────┘
实践练习
练习:综合应用
# 场景:部署一个 Web 应用
# 1. 创建命名空间
kubectl create namespace web-app
# 2. 创建 Deployment
kubectl create deployment web-app --image=nginx:1.24 -n web-app
# 3. 查看 Deployment
kubectl get deployment -n web-app
# 4. 查看 Pod
kubectl get pods -n web-app
# 5. 创建 Service
kubectl expose deployment web-app --port=80 --type=NodePort -n web-app
# 6. 查看 Service
kubectl get svc -n web-app
# 7. 查看日志
kubectl logs -l app=web-app -n web-app
# 8. 扩容
kubectl scale deployment web-app --replicas=3 -n web-app
# 9. 查看更新状态
kubectl rollout status deployment/web-app -n web-app
# 10. 更新镜像
kubectl set image deployment/web-app nginx=nginx:1.25 -n web-app
# 11. 回滚
kubectl rollout undo deployment/web-app -n web-app
# 12. 清理
kubectl delete namespace web-app
小结
| 要点 | 说明 |
|---|---|
| 命令结构 | kubectl [command] [TYPE] [NAME] [flags] |
| 查看资源 | get, describe, logs |
| 创建资源 | create, apply |
| 删除资源 | delete |
| 执行命令 | exec, cp |
| 扩缩容 | scale |
| 更新 | set image, rollout |
| 编辑 | edit, patch |
| 输出格式 | -o wide/yaml/json/jsonpath |
| 命名空间 | -n, -A |
| 标签 | -l, label |
练习编辑器
bash
Loading...