K8S 命令老是忘记,索性整理了常用的 kubectl 命令,方便日常 Kubernetes 集群管理使用。

一:基础命令

1.1 查看集群信息

# 查看集群信息
kubectl cluster-info

# 查看 Kubernetes 版本
kubectl version

# 查看 API 资源列表
kubectl api-resources

# 查看 API 版本
kubectl api-versions

1.2 查看节点信息

# 查看所有节点
kubectl get nodes

# 查看节点详细信息
kubectl get nodes -o wide

# 查看节点详细信息JSON/YAML
kubectl get nodes -o json
kubectl get nodes -o yaml

# 查看特定节点
kubectl get node <node-name>

# 描述节点
kubectl describe node <node-name>

二:资源查看

2.1 Pod 相关:

# 查看所有命名空间的 Podkubectl get pods --all-namespaces
kubectl get pods -A

# 查看指定命名空间的 Podkubectl get pods -n <namespace>

# 查看 Pod 详细信息
kubectl get pods -o wide

# 查看 Pod 详细信息JSON/YAML
kubectl get pods -o json
kubectl get pods -o yaml

# 查看特定 Podkubectl get pod <pod-name> -n <namespace>

# 查看 Pod 标签
kubectl get pods --show-labels

2.2 Deployment 相关:

# 查看所有 Deploymentkubectl get deployments
kubectl get deploy

# 查看 Deployment 详细信息
kubectl get deployments -o wide

# 查看特定 Deploymentkubectl get deployment <deployment-name> -n <namespace>

2.3 Service 相关:

# 查看所有 Servicekubectl get services
kubectl get svc

# 查看 Service 详细信息
kubectl get services -o wide

# 查看特定 Servicekubectl get service <service-name> -n <namespace>

2.4 其他资源:

# 查看所有资源类型
kubectl get all

# 查看 ConfigMapkubectl get configmaps
kubectl get cm

# 查看 Secretkubectl get secrets

# 查看 PersistentVolumekubectl get pv

# 查看 PersistentVolumeClaimkubectl get pvc

# 查看 Ingresskubectl get ingress
kubectl get ing

# 查看 Jobkubectl get jobs

# 查看 CronJobkubectl get cronjobs

# 查看 DaemonSetkubectl get daemonsets
kubectl get ds

# 查看 StatefulSetkubectl get statefulsets
kubectl get sts

三:资源操作

3.1 创建资源

# 从文件创建资源
kubectl create -f <file.yaml>

#  URL 创建资源
kubectl create -f <url>

# 从目录创建所有资源
kubectl create -f <directory>/

# 创建命名空间
kubectl create namespace <namespace-name>

3.2 应用资源

# 应用配置文件推荐
kubectl apply -f <file.yaml>

# 应用目录下所有文件
kubectl apply -f <directory>/

# 应用并记录配置
kubectl apply -f <file.yaml> --record

# 强制替换资源
kubectl apply -f <file.yaml> --force

3.3 删除资源

# 删除资源
kubectl delete -f <file.yaml>

# 删除特定资源
kubectl delete pod <pod-name> -n <namespace>
kubectl delete deployment <deployment-name> -n <namespace>
kubectl delete service <service-name> -n <namespace>

# 删除所有资源
kubectl delete all --all -n <namespace>

# 删除命名空间会删除命名空间下所有资源
kubectl delete namespace <namespace-name>

# 强制删除 Podkubectl delete pod <pod-name> --force --grace-period=0

3.4 编辑资源

# 编辑资源使用默认编辑器
kubectl edit pod <pod-name> -n <namespace>
kubectl edit deployment <deployment-name> -n <namespace>

# 编辑并应用
kubectl edit -f <file.yaml>

3.5 替换资源

# 替换资源
kubectl replace -f <file.yaml>

# 强制替换
kubectl replace -f <file.yaml> --force

四:调试和日志

4.1查看日志

# 查看 Pod 日志
kubectl logs <pod-name> -n <namespace>

# 查看前 N 行日志
kubectl logs <pod-name> -n <namespace> --tail=100

# 实时跟踪日志
kubectl logs <pod-name> -n <namespace> -f

# 查看之前容器的日志
kubectl logs <pod-name> -n <namespace> --previous

# 查看多容器 Pod 中特定容器的日志
kubectl logs <pod-name> -c <container-name> -n <namespace>

# 查看指定时间范围的日志
kubectl logs <pod-name> -n <namespace> --since=1h
kubectl logs <pod-name> -n <namespace> --since-time="2024-01-01T00:00:00Z"

4.2 进入容器

# 进入 Pod 容器交互式
kubectl exec -it <pod-name> -n <namespace> -- /bin/bash
kubectl exec -it <pod-name> -n <namespace> -- /bin/sh

# 在容器中执行命令
kubectl exec <pod-name> -n <namespace> -- <command>

# 在特定容器中执行命令
kubectl exec <pod-name> -c <container-name> -n <namespace> -- <command>

4.3 调试工具

# 查看 Pod 详细信息
kubectl describe pod <pod-name> -n <namespace>

# 查看事件
kubectl get events -n <namespace> --sort-by='.lastTimestamp'

# 查看资源使用情况
kubectl top nodes
kubectl top pods -n <namespace>

# 查看资源使用情况所有命名空间
kubectl top pods --all-namespaces

五: 配置管理

5.1 ConfigMap 操作

# 查看 ConfigMapkubectl get configmap <configmap-name> -n <namespace>

# 查看 ConfigMap 内容
kubectl get configmap <configmap-name> -n <namespace> -o yaml

# 从文件创建 ConfigMapkubectl create configmap <configmap-name> --from-file=<file-path>

# 从目录创建 ConfigMapkubectl create configmap <configmap-name> --from-file=<directory>/

# 从字面量创建 ConfigMapkubectl create configmap <configmap-name> --from-literal=key1=value1 --from-literal=key2=value2

# 编辑 ConfigMapkubectl edit configmap <configmap-name> -n <namespace>

# 删除 ConfigMapkubectl delete configmap <configmap-name> -n <namespace>

5.2 Secret 操作

# 查看 Secretkubectl get secret <secret-name> -n <namespace>

# 查看 Secret 内容Base64 编码
kubectl get secret <secret-name> -n <namespace> -o yaml

# 解码 Secretkubectl get secret <secret-name> -n <namespace> -o jsonpath='{.data.<key>}' | base64 -d

# 从文件创建 Secretkubectl create secret generic <secret-name> --from-file=<file-path>

# 从字面量创建 Secretkubectl create secret generic <secret-name> --from-literal=username=admin --from-literal=password=secret

# 从 Docker 注册表创建 Secretkubectl create secret docker-registry <secret-name> --docker-server=<server> --docker-username=<username> --docker-password=<password>

# 编辑 Secretkubectl edit secret <secret-name> -n <namespace>

# 删除 Secretkubectl delete secret <secret-name> -n <namespace>

5.3 端口转发

# 转发 Pod 端口到本地
kubectl port-forward <pod-name> <local-port>:<pod-port> -n <namespace>

# 转发 Service 端口到本地
kubectl port-forward service/<service-name> <local-port>:<service-port> -n <namespace>

# 转发 Deployment 端口到本地
kubectl port-forward deployment/<deployment-name> <local-port>:<container-port> -n <namespace>

# 示例:转发 MySQL 服务
kubectl port-forward service/mysql 3306:3306 -n default

5.4 执行命令

#  Pod 中执行命令
kubectl exec <pod-name> -n <namespace> -- <command>

#  Pod 中执行交互式命令
kubectl exec -it <pod-name> -n <namespace> -- <command>

# 在特定容器中执行命令
kubectl exec <pod-name> -c <container-name> -n <namespace> -- <command>

# 示例
kubectl exec my-pod -- ls /tmp
kubectl exec -it my-pod -- /bin/bash

5.5 标签和选择器

# 查看资源标签
kubectl get pods --show-labels

# 给资源添加标签
kubectl label pod <pod-name> app=myapp -n <namespace>

# 更新标签
kubectl label pod <pod-name> app=newapp --overwrite -n <namespace>

# 删除标签
kubectl label pod <pod-name> app- -n <namespace>

# 使用标签选择器查询
kubectl get pods -l app=myapp -n <namespace>
kubectl get pods -l 'app in (myapp,yourapp)' -n <namespace>
kubectl get pods -l 'app=myapp,version=v1' -n <namespace>

5.6 滚动更新

# 查看滚动更新状态
kubectl rollout status deployment/<deployment-name> -n <namespace>

# 查看滚动更新历史
kubectl rollout history deployment/<deployment-name> -n <namespace>

# 回滚到上一个版本
kubectl rollout undo deployment/<deployment-name> -n <namespace>

# 回滚到指定版本
kubectl rollout undo deployment/<deployment-name> --to-revision=<revision-number> -n <namespace>

# 暂停滚动更新
kubectl rollout pause deployment/<deployment-name> -n <namespace>

# 恢复滚动更新
kubectl rollout resume deployment/<deployment-name> -n <namespace>

# 扩展 Deploymentkubectl scale deployment/<deployment-name> --replicas=<number> -n <namespace>

5.7 资源描述

# 描述 Podkubectl describe pod <pod-name> -n <namespace>

# 描述 Deploymentkubectl describe deployment <deployment-name> -n <namespace>

# 描述 Servicekubectl describe service <service-name> -n <namespace>

# 描述 Nodekubectl describe node <node-name>

# 描述命名空间
kubectl describe namespace <namespace-name>

5.8 事件查看

# 查看所有事件
kubectl get events -n <namespace>

# 查看所有命名空间的事件
kubectl get events --all-namespaces

# 按时间排序查看事件
kubectl get events -n <namespace> --sort-by='.lastTimestamp'

# 查看特定资源的事件
kubectl get events --field-selector involvedObject.name=<pod-name> -n <namespace>

# 实时监控事件
kubectl get events -n <namespace> --watch

5.9 命名空间管理

# 查看所有命名空间
kubectl get namespaces
kubectl get ns

# 查看命名空间详细信息
kubectl get namespace <namespace-name> -o yaml

# 创建命名空间
kubectl create namespace <namespace-name>

# 删除命名空间
kubectl delete namespace <namespace-name>

# 切换到命名空间使用 kubectx/kubens 工具
# 或者使用上下文
kubectl config set-context --current --namespace=<namespace-name>

5.10 上下文和配置

# 查看当前上下文
kubectl config current-context

# 查看所有上下文
kubectl config get-contexts

# 切换上下文
kubectl config use-context <context-name>

# 查看配置
kubectl config view

# 查看特定上下文的配置
kubectl config view --context=<context-name>

# 设置默认命名空间
kubectl config set-context --current --namespace=<namespace-name>

# 查看集群信息
kubectl config view --minify

# 重命名上下文
kubectl config rename-context <old-name> <new-name>

六: 实用技巧

6.1 输出格式

# JSON 格式
kubectl get pods -o json

# YAML 格式
kubectl get pods -o yaml

# 自定义列
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase

# JSONPath
kubectl get pods -o jsonpath='{.items[*].metadata.name}'

# 表格格式默认
kubectl get pods

6.2 过滤和搜索

# 按标签过滤
kubectl get pods -l app=myapp

# 按字段选择器过滤
kubectl get pods --field-selector status.phase=Running

# 搜索资源
kubectl get all | grep <keyword>

6.3 批量操作

# 删除所有命名空间下的所有 Podkubectl delete pods --all --all-namespaces

# 删除所有命名空间下的所有 Deploymentkubectl delete deployments --all --all-namespaces

# 删除命名空间下的所有资源
kubectl delete all --all -n <namespace>

6.4 导出资源

<em># 导出资源为 YAMLkubectl get pod <pod-name> -n <namespace> -o yaml > pod.yaml</em>

<em># 导出资源为 JSONkubectl get pod <pod-name> -n <namespace> -o json > pod.json</em>

<em># 导出并移除集群特定信息</em>
kubectl get pod <pod-name> -n <namespace> -o yaml --export > pod.yaml

6.5 补丁操作

<em># 使用 JSON 补丁</em>
kubectl patch pod <pod-name> -p '{"spec":{"containers":[{"name":"mycontainer","image":"newimage"}]}}'

<em># 使用策略性合并补丁</em>
kubectl patch deployment <deployment-name> -p '{"spec":{"replicas":3}}'

<em># 使用 JSON 补丁文件</em>
kubectl patch pod <pod-name> --patch-file=patch.json

七: 常用组合命令

<em># 查看 Pod 并显示标签</em>
kubectl get pods --show-labels -n <namespace>

<em># 查看所有命名空间的资源</em>
kubectl get all --all-namespaces

<em># 查看资源并持续监控</em>
kubectl get pods -w -n <namespace>

<em># 查看资源并排序</em>
kubectl get pods --sort-by=.metadata.creationTimestamp -n <namespace>

<em># 查看资源使用情况</em>
kubectl top pods --sort-by=memory -n <namespace>

<em># 查看资源并过滤</em>
kubectl get pods -n <namespace> | grep <keyword>

<em># 查看资源并导出</em>
kubectl get deployment <deployment-name> -n <namespace> -o yaml > deployment.yaml

八: 故障排查命令

<em># 查看 Pod 状态和事件</em>
kubectl describe pod <pod-name> -n <namespace>

<em># 查看 Pod 日志</em>
kubectl logs <pod-name> -n <namespace> --previous

<em># 查看所有命名空间的错误 Podkubectl get pods --all-namespaces --field-selector status.phase!=Running</em>

<em># 查看节点资源使用</em>
kubectl top nodes

<em># 查看集群事件</em>
kubectl get events --all-namespaces --sort-by='.lastTimestamp'

<em># 检查 API 服务器连接</em>
kubectl cluster-info dump

<em># 查看资源配额</em>
kubectl describe quota -n <namespace>

注意事项

1. 命名空间:大多数命令需要指定 -n <namespace> 或 --namespace=<namespace>,如果不指定则使用默认命名空间(通常是 default

2. 资源名称:可以使用完整名称或简写形式,例如:

  • pods 或 po
  • services 或 svc
  • deployments 或 deploy
  • namespaces 或 ns

3. 输出格式:使用 -o 参数指定输出格式,常用格式包括:

  • yaml
  • json
  • wide
  • custom-columns

4. 强制删除:删除资源时,如果 Pod 处于 Terminating 状态,可以使用:

kubectl delete pod <pod-name> --force --grace-period=0 -n <namespace>

5. 权限:某些命令可能需要相应的 RBAC 权限,确保当前用户有足够的权限执行操作


参考资源