Kubernetes 实操命令大全

Kubernetes 实操命令大全

基础命令

查看集群信息

bash 复制代码
# 查看集群信息
kubectl cluster-info

# 查看集群详细信息
kubectl cluster-info dump

# 查看 Kubernetes 版本
kubectl version

# 查看客户端和服务器版本
kubectl version --short

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

# 查看 API 版本
kubectl api-versions

查看配置

bash 复制代码
# 查看当前上下文
kubectl config current-context

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

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

# 查看配置
kubectl config view

# 查看特定配置
kubectl config view --minify

Pod 管理

创建和删除 Pod

bash 复制代码
# 从 YAML 文件创建 Pod
kubectl create -f pod.yaml

# 从 YAML 文件创建或更新 Pod
kubectl apply -f pod.yaml

# 删除 Pod
kubectl delete pod <pod-name>

# 删除指定命名空间的 Pod
kubectl delete pod <pod-name> -n <namespace>

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

查看 Pod

bash 复制代码
# 查看所有 Pod
kubectl get pods

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

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

# 查看 Pod 详细信息
kubectl get pods <pod-name> -o wide

# 查看 Pod 完整信息(YAML)
kubectl get pod <pod-name> -o yaml

# 查看 Pod 描述信息
kubectl describe pod <pod-name>

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

Pod 状态管理

bash 复制代码
# 查看 Pod 状态
kubectl get pods -w

# 查看 Pod 事件
kubectl get events --sort-by=.metadata.creationTimestamp

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

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

# 实时查看日志
kubectl logs -f <pod-name>

# 查看最近 100 行日志
kubectl logs --tail=100 <pod-name>

# 查看指定时间范围的日志
kubectl logs --since=1h <pod-name>

Deployment 管理

创建和更新 Deployment

bash 复制代码
# 创建 Deployment
kubectl create deployment <deployment-name> --image=<image-name>

# 从 YAML 文件创建 Deployment
kubectl create -f deployment.yaml

# 应用 Deployment(创建或更新)
kubectl apply -f deployment.yaml

# 更新 Deployment 镜像
kubectl set image deployment/<deployment-name> <container-name>=<new-image>

# 更新 Deployment 环境变量
kubectl set env deployment/<deployment-name> KEY=VALUE

查看 Deployment

bash 复制代码
# 查看所有 Deployment
kubectl get deployments
kubectl get deploy

# 查看 Deployment 详细信息
kubectl describe deployment <deployment-name>

# 查看 Deployment 的 ReplicaSet
kubectl get rs

# 查看 Deployment 历史版本
kubectl rollout history deployment/<deployment-name>

Deployment 扩缩容

bash 复制代码
# 扩展 Deployment
kubectl scale deployment <deployment-name> --replicas=3

# 自动扩缩容
kubectl autoscale deployment <deployment-name> --min=2 --max=10 --cpu-percent=80

滚动更新和回滚

bash 复制代码
# 查看滚动更新状态
kubectl rollout status deployment/<deployment-name>

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

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

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

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

# 查看回滚历史
kubectl rollout history deployment/<deployment-name>

删除 Deployment

bash 复制代码
# 删除 Deployment
kubectl delete deployment <deployment-name>

# 删除 Deployment 但保留 Pod
kubectl delete deployment <deployment-name> --cascade=orphan

Service 管理

创建 Service

bash 复制代码
# 创建 Service
kubectl create service clusterip <service-name> --tcp=80:8080

# 从 YAML 文件创建 Service
kubectl create -f service.yaml

# 应用 Service
kubectl apply -f service.yaml

# 创建 NodePort Service
kubectl expose deployment <deployment-name> --type=NodePort --port=80

# 创建 LoadBalancer Service
kubectl expose deployment <deployment-name> --type=LoadBalancer --port=80

查看 Service

bash 复制代码
# 查看所有 Service
kubectl get services
kubectl get svc

# 查看 Service 详细信息
kubectl describe service <service-name>

# 查看 Service 端点
kubectl get endpoints <service-name>

删除 Service

bash 复制代码
# 删除 Service
kubectl delete service <service-name>

ConfigMap 和 Secret

ConfigMap 操作

bash 复制代码
# 从字面量创建 ConfigMap
kubectl create configmap <configmap-name> --from-literal=key1=value1 --from-literal=key2=value2

# 从文件创建 ConfigMap
kubectl create configmap <configmap-name> --from-file=path/to/file

# 从目录创建 ConfigMap
kubectl create configmap <configmap-name> --from-file=path/to/dir

# 查看 ConfigMap
kubectl get configmap
kubectl get cm

# 查看 ConfigMap 内容
kubectl describe configmap <configmap-name>

# 查看 ConfigMap 的 YAML
kubectl get configmap <configmap-name> -o yaml

# 删除 ConfigMap
kubectl delete configmap <configmap-name>

Secret 操作

bash 复制代码
# 从字面量创建 Secret
kubectl create secret generic <secret-name> --from-literal=username=admin --from-literal=password=secret

# 从文件创建 Secret
kubectl create secret generic <secret-name> --from-file=username.txt --from-file=password.txt

# 创建 TLS Secret
kubectl create secret tls <secret-name> --cert=path/to/cert --key=path/to/key

# 查看 Secret
kubectl get secrets

# 查看 Secret 详细信息
kubectl describe secret <secret-name>

# 查看 Secret 内容(base64 编码)
kubectl get secret <secret-name> -o yaml

# 解码 Secret
kubectl get secret <secret-name> -o jsonpath='{.data.password}' | base64 -d

# 删除 Secret
kubectl delete secret <secret-name>

Namespace 管理

创建和删除 Namespace

bash 复制代码
# 创建 Namespace
kubectl create namespace <namespace-name>

# 从 YAML 文件创建 Namespace
kubectl create -f namespace.yaml

# 删除 Namespace
kubectl delete namespace <namespace-name>

# 强制删除 Namespace(清理所有资源)
kubectl delete namespace <namespace-name> --force --grace-period=0

查看 Namespace

bash 复制代码
# 查看所有 Namespace
kubectl get namespaces
kubectl get ns

# 查看 Namespace 详细信息
kubectl describe namespace <namespace-name>

# 查看指定 Namespace 的所有资源
kubectl get all -n <namespace-name>

切换 Namespace

bash 复制代码
# 设置默认 Namespace
kubectl config set-context --current --namespace=<namespace-name>

# 查看当前 Namespace
kubectl config view --minify | grep namespace

节点管理

查看节点

bash 复制代码
# 查看所有节点
kubectl get nodes

# 查看节点详细信息
kubectl describe node <node-name>

# 查看节点资源使用情况
kubectl top nodes

# 查看节点标签
kubectl get nodes --show-labels

节点操作

bash 复制代码
# 标记节点为不可调度
kubectl cordon <node-name>

# 取消节点不可调度标记
kubectl uncordon <node-name>

# 排空节点(驱逐 Pod)
kubectl drain <node-name>

# 排空节点但忽略 DaemonSet
kubectl drain <node-name> --ignore-daemonsets

# 删除节点
kubectl delete node <node-name>

日志和调试

查看日志

bash 复制代码
# 查看 Pod 日志
kubectl logs <pod-name>

# 查看多个 Pod 的日志
kubectl logs -l app=<app-label>

# 查看前一个容器的日志(容器重启后)
kubectl logs <pod-name> --previous

# 查看指定容器的日志
kubectl logs <pod-name> -c <container-name>

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

# 查看最近 N 行日志
kubectl logs --tail=100 <pod-name>

# 查看指定时间范围的日志
kubectl logs --since=10m <pod-name>
kubectl logs --since=2023-01-01T00:00:00Z <pod-name>

进入容器调试

bash 复制代码
# 进入 Pod 的容器执行命令
kubectl exec <pod-name> -- <command>

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

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

# 在容器中执行命令并获取输出
kubectl exec <pod-name> -- env
kubectl exec <pod-name> -- ps aux

调试工具

bash 复制代码
# 查看 Pod 事件
kubectl get events --sort-by=.metadata.creationTimestamp

# 查看特定资源的事件
kubectl describe pod <pod-name>

# 查看集群事件
kubectl get events -A --sort-by=.metadata.creationTimestamp

# 查看资源使用情况
kubectl top pod
kubectl top node

# 查看特定 Pod 的资源使用
kubectl top pod <pod-name>

资源查看

通用查看命令

bash 复制代码
# 查看所有资源
kubectl get all

# 查看所有命名空间的所有资源
kubectl get all -A

# 查看特定类型的资源
kubectl get <resource-type>

# 查看资源的详细信息
kubectl get <resource-type> <resource-name> -o yaml
kubectl get <resource-type> <resource-name> -o json

# 查看资源的描述信息
kubectl describe <resource-type> <resource-name>

# 查看资源的宽格式输出
kubectl get <resource-type> -o wide

常用资源类型

bash 复制代码
# Pods
kubectl get pods

# Deployments
kubectl get deployments
kubectl get deploy

# Services
kubectl get services
kubectl get svc

# ReplicaSets
kubectl get replicasets
kubectl get rs

# StatefulSets
kubectl get statefulsets
kubectl get sts

# DaemonSets
kubectl get daemonsets
kubectl get ds

# Jobs
kubectl get jobs

# CronJobs
kubectl get cronjobs

# ConfigMaps
kubectl get configmaps
kubectl get cm

# Secrets
kubectl get secrets

# PersistentVolumes
kubectl get pv

# PersistentVolumeClaims
kubectl get pvc

# Ingress
kubectl get ingress
kubectl get ing

扩缩容

手动扩缩容

bash 复制代码
# 扩展 Deployment
kubectl scale deployment <deployment-name> --replicas=5

# 扩展 ReplicaSet
kubectl scale rs <replicaset-name> --replicas=3

# 扩展 StatefulSet
kubectl scale statefulset <statefulset-name> --replicas=5

# 扩展当前 YAML 文件中定义的资源
kubectl scale --replicas=3 -f deployment.yaml

自动扩缩容(HPA)

bash 复制代码
# 创建 HorizontalPodAutoscaler
kubectl autoscale deployment <deployment-name> --min=2 --max=10 --cpu-percent=80

# 查看 HPA
kubectl get hpa

# 查看 HPA 详细信息
kubectl describe hpa <hpa-name>

# 删除 HPA
kubectl delete hpa <hpa-name>

端口转发

端口转发到 Pod

bash 复制代码
# 转发 Pod 端口到本地
kubectl port-forward <pod-name> 8080:80

# 转发到指定命名空间的 Pod
kubectl port-forward <pod-name> 8080:80 -n <namespace>

# 转发到指定容器的端口
kubectl port-forward <pod-name> 8080:80 -c <container-name>

# 在后台运行端口转发
kubectl port-forward <pod-name> 8080:80 &

端口转发到 Service

bash 复制代码
# 转发 Service 端口到本地
kubectl port-forward service/<service-name> 8080:80

# 转发到指定命名空间的 Service
kubectl port-forward service/<service-name> 8080:80 -n <namespace>

端口转发到 Deployment

bash 复制代码
# 转发 Deployment 端口到本地
kubectl port-forward deployment/<deployment-name> 8080:80

执行命令

在容器中执行命令

bash 复制代码
# 执行单条命令
kubectl exec <pod-name> -- <command>

# 交互式执行命令
kubectl exec -it <pod-name> -- /bin/bash

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

# 执行命令并传递环境变量
kubectl exec <pod-name> -- env

# 执行多个命令
kubectl exec <pod-name> -- sh -c "command1 && command2"

临时容器调试

bash 复制代码
# 使用 kubectl debug 创建临时调试容器
kubectl debug <pod-name> -it --image=busybox --target=<container-name>

# 创建 Pod 的副本用于调试
kubectl debug <pod-name> -it --copy-to=my-debug-pod --share-processes

标签和选择器

标签操作

bash 复制代码
# 给资源添加标签
kubectl label pod <pod-name> app=myapp

# 给资源添加多个标签
kubectl label pod <pod-name> app=myapp env=production

# 覆盖现有标签
kubectl label pod <pod-name> app=newapp --overwrite

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

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

# 使用标签选择器查看资源
kubectl get pods -l app=myapp
kubectl get pods -l 'app in (myapp,webapp)'
kubectl get pods -l 'app=myapp,env=production'

选择器查询

bash 复制代码
# 使用等号选择器
kubectl get pods -l app=myapp

# 使用不等号选择器
kubectl get pods -l app!=myapp

# 使用 in 选择器
kubectl get pods -l 'app in (myapp,webapp)'

# 使用 notin 选择器
kubectl get pods -l 'app notin (myapp,webapp)'

# 使用 exists 选择器
kubectl get pods -l 'app'

# 使用 does not exist 选择器
kubectl get pods -l '!app'

滚动更新和回滚

滚动更新

bash 复制代码
# 查看滚动更新状态
kubectl rollout status deployment/<deployment-name>

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

# 查看特定版本的详细信息
kubectl rollout history deployment/<deployment-name> --revision=2

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

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

# 重启 Deployment(触发滚动更新)
kubectl rollout restart deployment/<deployment-name>

回滚

bash 复制代码
# 回滚到上一个版本
kubectl rollout undo deployment/<deployment-name>

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

# 回滚 StatefulSet
kubectl rollout undo statefulset/<statefulset-name>

# 回滚 DaemonSet
kubectl rollout undo daemonset/<daemonset-name>

资源清理

删除资源

bash 复制代码
# 删除 Pod
kubectl delete pod <pod-name>

# 删除 Deployment
kubectl delete deployment <deployment-name>

# 删除 Service
kubectl delete service <service-name>

# 删除多个资源
kubectl delete pod <pod1> <pod2> <pod3>

# 使用标签选择器删除资源
kubectl delete pods -l app=myapp

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

# 从文件删除资源
kubectl delete -f deployment.yaml

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

清理命名空间

bash 复制代码
# 删除命名空间(会删除其中的所有资源)
kubectl delete namespace <namespace-name>

# 强制删除命名空间
kubectl delete namespace <namespace-name> --force --grace-period=0

YAML 文件操作

从资源生成 YAML

bash 复制代码
# 获取资源的 YAML
kubectl get pod <pod-name> -o yaml

# 获取资源的 YAML(不包含运行时信息)
kubectl get pod <pod-name> -o yaml --export

# 获取资源的 JSON
kubectl get pod <pod-name> -o json

# 获取资源的自定义格式
kubectl get pod <pod-name> -o jsonpath='{.metadata.name}'

应用 YAML 文件

bash 复制代码
# 创建资源
kubectl create -f deployment.yaml

# 应用资源(创建或更新)
kubectl apply -f deployment.yaml

# 应用目录中的所有 YAML 文件
kubectl apply -f ./manifests/

# 应用多个文件
kubectl apply -f file1.yaml -f file2.yaml

# 应用 URL 中的 YAML
kubectl apply -f https://example.com/manifest.yaml

# 应用时验证但不实际创建
kubectl apply -f deployment.yaml --dry-run=client

# 应用时显示差异
kubectl diff -f deployment.yaml

编辑资源

bash 复制代码
# 编辑资源(使用默认编辑器)
kubectl edit pod <pod-name>

# 编辑 Deployment
kubectl edit deployment <deployment-name>

# 使用特定编辑器
KUBE_EDITOR="nano" kubectl edit pod <pod-name>

事件和监控

查看事件

bash 复制代码
# 查看所有事件
kubectl get events

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

# 按时间排序查看事件
kubectl get events --sort-by=.metadata.creationTimestamp

# 查看特定资源的事件
kubectl describe pod <pod-name>

# 查看最近的事件
kubectl get events --field-selector involvedObject.kind=Pod

资源监控

bash 复制代码
# 查看 Pod 资源使用情况
kubectl top pod

# 查看节点资源使用情况
kubectl top node

# 查看特定 Pod 的资源使用
kubectl top pod <pod-name>

# 查看特定命名空间的 Pod 资源使用
kubectl top pod -n <namespace>

# 持续监控资源使用
watch kubectl top pod

存储管理

PersistentVolume 和 PersistentVolumeClaim

bash 复制代码
# 查看 PersistentVolume
kubectl get pv

# 查看 PersistentVolumeClaim
kubectl get pvc

# 查看 PV 详细信息
kubectl describe pv <pv-name>

# 查看 PVC 详细信息
kubectl describe pvc <pvc-name>

# 删除 PVC
kubectl delete pvc <pvc-name>

# 删除 PV
kubectl delete pv <pv-name>

StorageClass

bash 复制代码
# 查看 StorageClass
kubectl get storageclass
kubectl get sc

# 查看 StorageClass 详细信息
kubectl describe storageclass <storageclass-name>

网络管理

Ingress

bash 复制代码
# 查看 Ingress
kubectl get ingress
kubectl get ing

# 查看 Ingress 详细信息
kubectl describe ingress <ingress-name>

# 创建 Ingress
kubectl create ingress <ingress-name> --rule="host/path=service:port"

# 删除 Ingress
kubectl delete ingress <ingress-name>

网络策略

bash 复制代码
# 查看 NetworkPolicy
kubectl get networkpolicies
kubectl get netpol

# 查看 NetworkPolicy 详细信息
kubectl describe networkpolicy <networkpolicy-name>

权限管理

ServiceAccount

bash 复制代码
# 查看 ServiceAccount
kubectl get serviceaccounts
kubectl get sa

# 创建 ServiceAccount
kubectl create serviceaccount <serviceaccount-name>

# 查看 ServiceAccount 详细信息
kubectl describe serviceaccount <serviceaccount-name>

# 删除 ServiceAccount
kubectl delete serviceaccount <serviceaccount-name>

Role 和 RoleBinding

bash 复制代码
# 查看 Role
kubectl get roles

# 查看 RoleBinding
kubectl get rolebindings

# 查看 ClusterRole
kubectl get clusterroles

# 查看 ClusterRoleBinding
kubectl get clusterrolebindings

实用技巧

批量操作

bash 复制代码
# 批量删除 Pod
kubectl delete pods --all

# 批量删除指定标签的 Pod
kubectl delete pods -l app=myapp

# 批量重启 Deployment
kubectl rollout restart deployment/<deployment-name>

输出格式

bash 复制代码
# YAML 格式
kubectl get pod <pod-name> -o yaml

# JSON 格式
kubectl get pod <pod-name> -o json

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

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

# Go 模板
kubectl get pods -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'

别名设置

bash 复制代码
# 设置常用别名(添加到 ~/.bashrc 或 ~/.zshrc)
alias k='kubectl'
alias kgp='kubectl get pods'
alias kgd='kubectl get deployments'
alias kgs='kubectl get services'
alias kdp='kubectl describe pod'
alias kdd='kubectl describe deployment'
alias kds='kubectl describe service'
alias kl='kubectl logs'
alias ke='kubectl exec -it'

上下文切换

bash 复制代码
# 查看所有上下文
kubectl config get-contexts

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

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

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

故障排查

常见问题排查

bash 复制代码
# 查看 Pod 无法启动的原因
kubectl describe pod <pod-name>

# 查看 Pod 事件
kubectl get events --field-selector involvedObject.name=<pod-name>

# 查看容器退出码
kubectl get pod <pod-name> -o jsonpath='{.status.containerStatuses[0].lastState.terminated.exitCode}'

# 查看镜像拉取失败的原因
kubectl describe pod <pod-name> | grep -A 5 "Events"

# 查看节点资源
kubectl describe node <node-name>

# 查看节点上的 Pod
kubectl get pods --field-selector spec.nodeName=<node-name>

调试技巧

bash 复制代码
# 查看 Pod 的完整状态
kubectl get pod <pod-name> -o yaml

# 查看 Pod 的日志和事件
kubectl logs <pod-name> && kubectl describe pod <pod-name>

# 进入 Pod 检查网络连接
kubectl exec -it <pod-name> -- ping <service-name>

# 检查 DNS 解析
kubectl exec -it <pod-name> -- nslookup <service-name>

# 检查环境变量
kubectl exec <pod-name> -- env

# 检查挂载的卷
kubectl exec <pod-name> -- ls -la /path/to/mount

总结

本文档涵盖了 Kubernetes 日常操作中最常用的命令,包括:

  • 基础操作:集群信息查看、配置管理
  • 资源管理:Pod、Deployment、Service 等核心资源
  • 存储和网络:ConfigMap、Secret、PV/PVC、Ingress
  • 监控和调试:日志查看、事件监控、故障排查
  • 高级功能:滚动更新、自动扩缩容、端口转发

掌握这些命令可以大大提高 Kubernetes 集群管理的效率。建议根据实际使用场景,将常用命令设置为别名,以便快速执行。


提示

  • 使用 kubectl --help 查看任何命令的详细帮助
  • 使用 kubectl explain <resource> 查看资源的字段说明
  • 使用 kubectl api-resources 查看所有可用的 API 资源类型
相关推荐
运维老郭2 分钟前
【K8s运维实战】Kubernetes临时存储卷实战:emptyDir核心用法与gitRepo弃用迁移指南
运维·云原生·kubernetes
AAA@峥4 小时前
容器数据不丢失:Docker 分层存储 + Volume 共享、备份迁移完整指南
运维·docker·容器
十年磨一剑~5 小时前
docker 为何每次 docker tag才能 docker push
docker·容器·eureka
gs801407 小时前
记一次多 Agent 架构在单节点 K8s 触发的 PID 耗尽与 Pod 驱逐(Evicted)大摸排
容器·架构·kubernetes
bukeyiwanshui8 小时前
20260701 k8s Metric Server
容器·贪心算法·kubernetes
江湖有缘8 小时前
基于Docker环境部署tillywork开源工作管理工具
docker·容器·开源
鸿儒51711 小时前
MR-50国产化GPU docker配置方法
docker·容器·mr
Zhu75812 小时前
在k8s集群部署ApacheHadoop单节点单数据副本
云原生·容器·kubernetes
Akamai中国12 小时前
Akamai收购安全企业浏览器提供商LayerX
人工智能·云原生·云计算·云服务