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 小时前
深度解析云监控 2.0 日志审计:统一采集、实体建模与告警溯源能力
阿里云·云原生·云监控·可观测
Ghost Face...3 小时前
Docker实战:从安装到多容器编排指南
运维·docker·容器
闲人编程3 小时前
健康检查与就绪探针
kubernetes·web·状态机·健康检查·codecapsule·存活探针·启动探针
不惑_4 小时前
Windows 安装 Docker 和 Docker Compose 完整教程
windows·docker·容器
云霄IT5 小时前
docker使用教程之部署第一个go项目
docker·容器·golang
阿基米东5 小时前
Let‘s Encrypt 是什么?它是如何工作的?
云原生·https·云计算
故事写到这5 小时前
第一章 Ubuntu24.04环境下的K8S部署【入门保姆级】
云原生·容器·kubernetes
探索云原生5 小时前
Buildah 简明教程:让镜像构建更轻量,告别 Docker 依赖
linux·docker·云原生·go·cicd
走路带_风6 小时前
Ubuntu server 22.04 安装kubernetes
云原生·容器·kubernetes