10·基础入门入门

kubectl 基础命令

kuberneteskubectlcli

kubectl 基础命令

学习目标

  1. 掌握 kubectl 的基本命令结构
  2. 学会查看和管理 Kubernetes 资源
  3. 理解常用命令的使用场景

核心概念

命令结构

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...

继续学习

完成本课后,建议继续学习下一课「Pod 是什么」 以巩固所学知识。