Kubernetes 速查表
通过实战实验和真实场景学习 Kubernetes 容器编排。LabEx 提供全面的 Kubernetes 课程,涵盖基本的 kubectl 命令、Pod 管理、部署、服务、网络和集群管理。掌握容器编排和云原生应用部署。
安装与设置
安装 kubectl
安装 Kubernetes 命令行工具。
# 使用 Homebrew (macOS)
brew install kubectl
# Linux (官方二进制文件)
curl -LO "https://dl.k8s.io/release/$(curl -L -s
https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kube
ctl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# 使用 Chocolatey (Windows)
choco install kubernetes-cli
验证安装
检查 kubectl 版本和集群连接状态。
# 检查 kubectl 版本
kubectl version --client
# 检查客户端和服务器版本
kubectl version
# 获取集群信息
kubectl cluster-info
配置 kubectl
设置集群访问和上下文。
# 查看当前配置
kubectl config view
# 列出所有上下文
kubectl config get-contexts
# 切换到特定上下文
kubectl config use-context my-cluster
# 设置默认命名空间
kubectl config set-context --current --namespace=my-
namespace
Minikube 设置
用于开发的快速本地 Kubernetes 集群。
# 启动 Minikube
minikube start
# 检查状态
minikube status
# 访问仪表板
minikube dashboard
# 停止集群
minikube stop
基本命令与集群信息
集群信息:kubectl cluster-info
显示基本的集群详细信息和服务端点。
# 获取集群信息
kubectl cluster-info
# 查看集群配置
kubectl config view
# 检查可用的 API 资源
kubectl api-resources
# 显示支持的 API 版本
kubectl api-versions
节点管理:kubectl get nodes
查看和管理集群节点。
# 列出所有节点
kubectl get nodes
# 详细的节点信息
kubectl get nodes -o wide
# 描述特定节点
kubectl describe node
# 获取节点资源使用情况
kubectl top nodes
命名空间操作:kubectl get namespaces
使用命名空间组织和隔离资源。
# 列出所有命名空间
kubectl get namespaces
# 创建一个命名空间
kubectl create namespace my-
namespace
# 删除一个命名空间
kubectl delete namespace my-
namespace
# 获取特定命名空间中的资源
kubectl get all -n my-namespace
登录后即可答题并追踪学习进度
Pod 管理
创建与运行 Pod: kubectl run / kubectl create
启动容器并管理其生命周期。
# 运行一个简单的 Pod
kubectl run nginx --image=nginx
# 从 YAML 文件创建 Pod
kubectl create -f pod.yaml
# 使用命令运行 Pod
kubectl run busybox --image=busybox -- echo "Hello
World"
# 创建 Job
kubectl create job hello --image=busybox:1.28 -- echo
"Hello World"
查看 Pod 信息:kubectl get pods
列出和检查正在运行的 Pod。
# 列出默认命名空间中的所有 Pod
kubectl get pods
# 使用更多细节列出 Pod
kubectl get pods -o wide
# 列出所有命名空间中的 Pod
kubectl get pods --all-namespaces
# 监视 Pod 状态变化
kubectl get pods --watch
登录后即可答题并追踪学习进度
kubectl get pods --all-namespaces 的作用是什么?Pod 详情:kubectl describe pod
获取关于特定 Pod 的全面信息。
# 描述特定 Pod
kubectl describe pod
# 描述特定命名空间中的 Pod
kubectl describe pod -n
Pod 操作:kubectl exec / kubectl delete
在 Pod 中执行命令并管理 Pod 生命周期。
# 获取 Pod 日志
kubectl logs
# 实时跟踪日志
kubectl logs -f
# 在 Pod 中执行命令
kubectl exec -it -- /bin/bash
# 在特定容器中执行命令
kubectl exec -it -c -- sh
# 删除一个 Pod
kubectl delete pod
# 强制删除一个 Pod
kubectl delete pod --grace-period=0 --force
Deployment 与 ReplicaSet
创建 Deployment: kubectl create deployment
声明式地部署和管理应用程序。
# 创建 Deployment
kubectl create deployment nginx --image=nginx
# 创建带有副本数的 Deployment
kubectl create deployment webapp --image=nginx --
replicas=3
# 从 YAML 文件创建
kubectl apply -f deployment.yaml
# 将 Deployment 暴露为 Service
kubectl expose deployment nginx --port=80 --
type=LoadBalancer
登录后即可答题并追踪学习进度
管理 Deployment: kubectl get deployments
查看和控制 Deployment 状态和配置。
# 列出 Deployment
kubectl get deployments
# 描述 Deployment
kubectl describe deployment
# 编辑 Deployment
kubectl edit deployment
# 删除 Deployment
kubectl delete deployment
伸缩:kubectl scale
调整运行中的副本数量。
# 伸缩 Deployment
kubectl scale deployment nginx --replicas=5
# 伸缩 ReplicaSet
kubectl scale rs --replicas=3
# 自动伸缩 Deployment
kubectl autoscale deployment nginx --min=2 --max=10 --
cpu-percent=80
登录后即可答题并追踪学习进度
kubectl scale deployment nginx --replicas=5 会执行什么操作?滚动更新:kubectl rollout
管理 Deployment 更新和回滚。
# 检查滚动更新状态
kubectl rollout status deployment/nginx
# 查看滚动更新历史
kubectl rollout history deployment/nginx
# 回滚到上一个版本
kubectl rollout undo deployment/nginx
# 回滚到特定修订版本
kubectl rollout undo deployment/nginx --to-revision=2
Service 与网络
暴露 Service: kubectl expose
通过网络服务使应用程序可访问。
# 将 Deployment 暴露为 ClusterIP Service
kubectl expose deployment nginx --port=80
# 暴露为 NodePort Service
kubectl expose deployment nginx --port=80 --
type=NodePort
# 暴露为 LoadBalancer
kubectl expose deployment nginx --port=80 --
type=LoadBalancer
# 从 YAML 创建 Service
kubectl apply -f service.yaml
登录后即可答题并追踪学习进度
kubectl expose 时的默认 Service 类型是什么?服务发现:kubectl get services
列出和检查集群中的服务。
# 列出所有 Service
kubectl get services
# 使用更多细节列出 Service
kubectl get svc -o wide
# 描述特定 Service
kubectl describe service
# 获取 Service 端点
kubectl get endpoints
端口转发:kubectl port-forward
在本地机器上访问应用程序以进行测试和调试。
# 将 Pod 端口转发到本地机器
kubectl port-forward pod/ 8080:80
# 转发 Service 端口
kubectl port-forward svc/ 8080:80
# 转发 Deployment 端口
kubectl port-forward deployment/ 8080:80
# 转发多个端口
kubectl port-forward pod/ 8080:80 8443:443
Ingress 管理
通过 HTTP/HTTPS 路由管理对服务的外部访问。
# 列出 Ingress 资源
kubectl get ingress
# 描述 Ingress
kubectl describe ingress
# 从 YAML 创建 Ingress
kubectl apply -f ingress.yaml
ConfigMaps 与 Secrets
ConfigMaps: kubectl create configmap
以键值对的形式存储非机密配置数据。
# 从字面量创建 ConfigMap
kubectl create configmap app-config --from-
literal=database_url=localhost --from-literal=debug=true
# 从文件创建
kubectl create configmap app-config --from-
file=app.properties
# 从目录创建
kubectl create configmap app-config --from-file=config/
ConfigMap 用法
在 Pod 中将 ConfigMaps 作为环境变量或卷使用。
# 查看 ConfigMap
kubectl get configmaps
kubectl describe configmap app-config
# 获取 ConfigMap YAML
kubectl get configmap app-config -o yaml
# 编辑 ConfigMap
kubectl edit configmap app-config
# 删除 ConfigMap
kubectl delete configmap app-config
Secrets: kubectl create secret
存储和管理敏感信息,如密码和 API 密钥。
# 创建通用 Secret
kubectl create secret generic db-secret --from-
literal=username=admin --from-
literal=password=secret123
# 从文件创建 Secret
kubectl create secret generic ssl-certs --from-file=tls.crt --
from-file=tls.key
# 创建 Docker 注册表 Secret
kubectl create secret docker-registry my-registry --
docker-server=myregistry.com --docker-username=user -
-docker-password=pass
Secret 管理
安全地查看和管理 Secret。
# 列出 Secret
kubectl get secrets
# 描述 Secret (值被隐藏)
kubectl describe secret db-secret
# 解码 Secret 值
kubectl get secret db-secret -o
jsonpath='{.data.password}' | base64 -d
# 删除 Secret
kubectl delete secret db-secret
存储与卷
Persistent Volumes: kubectl get pv
管理集群范围的存储资源。
# 列出持久卷
kubectl get pv
# 描述持久卷
kubectl describe pv
# 从 YAML 创建 PV
kubectl apply -f persistent-volume.yaml
# 删除持久卷
kubectl delete pv
Persistent Volume Claims: kubectl get pvc
为 Pod 请求存储资源。
# 列出 PVC
kubectl get pvc
# 描述 PVC
kubectl describe pvc
# 从 YAML 创建 PVC
kubectl apply -f pvc.yaml
# 删除 PVC
kubectl delete pvc
Storage Classes
定义具有不同属性的不同类型的存储。
# 列出存储类
kubectl get storageclass
# 描述存储类
kubectl describe storageclass
# 设置默认存储类
kubectl patch storageclass -p '{"metadata":
{"annotations":{"storageclass.kubernetes.io/is-default-
class":"true"}}}'
卷操作
在 Pod 中使用不同类型的卷。
# 检查 Pod 中的卷挂载
kubectl describe pod | grep -A5 "Mounts:"
# 列出 Pod 中的卷
kubectl get pod -o yaml | grep -A10 "volumes:"
故障排除与调试
日志与事件:kubectl logs / kubectl get events
检查应用程序日志和集群事件以进行调试。
# 查看 Pod 日志
kubectl logs
# 实时跟踪日志
kubectl logs -f
# 查看上一个容器的日志
kubectl logs --previous
# 查看特定容器的日志
kubectl logs -c
# 查看集群事件
kubectl get events --sort-
by=.metadata.creationTimestamp
资源检查:kubectl describe
获取关于任何 Kubernetes 资源的详细信息。
# 描述 Pod
kubectl describe pod
# 描述 Deployment
kubectl describe deployment
# 描述 Service
kubectl describe service
# 描述节点
kubectl describe node
资源使用率:kubectl top
监控集群中 Pod 和节点的资源消耗。
# 查看节点资源使用情况
kubectl top nodes
# 查看 Pod 资源使用情况
kubectl top pods
# 查看命名空间中的 Pod 资源使用情况
kubectl top pods -n
# 按 CPU 使用率排序 Pod
kubectl top pods --sort-by=cpu
交互式调试:kubectl exec / kubectl debug
访问正在运行的容器以进行动手故障排除。
# 执行交互式 shell
kubectl exec -it -- /bin/bash
# 使用临时容器进行调试 (K8s 1.23+)
kubectl debug -it --image=busybox
# 从 Pod 复制文件
kubectl cp :/path/to/file ./local-file
# 复制文件到 Pod
kubectl cp ./local-file :/path/to/destination
资源管理
应用资源:kubectl apply
使用声明式配置文件创建或更新资源。
# 应用单个文件
kubectl apply -f deployment.yaml
# 应用多个文件
kubectl apply -f deployment.yaml -f service.yaml
# 应用整个目录
kubectl apply -f ./k8s-configs/
# 从 URL 应用
kubectl apply -f https://example.com/manifest.yaml
# 显示将要应用的内容 (试运行)
kubectl apply -f deployment.yaml --dry-run=client -o yaml
资源操作:kubectl get / kubectl delete
列出、检查和删除 Kubernetes 资源。
# 获取命名空间中的所有资源
kubectl get all
# 使用自定义列获取资源
kubectl get pods -o custom-
columns=NAME:.metadata.name,STATUS:.status.phase,N
ODE:.spec.nodeName
# 以 JSON/YAML 格式获取资源
kubectl get deployment nginx -o yaml
kubectl get pod -o json
# 删除资源
kubectl delete -f deployment.yaml
kubectl delete pod,service -l app=nginx
资源编辑:kubectl edit / kubectl patch
直接修改现有资源。
# 交互式编辑资源
kubectl edit deployment
# 使用战略合并补丁
kubectl patch deployment nginx -p '{"spec":
{"replicas":3}}'
# 使用 JSON 合并补丁
kubectl patch pod --type='json' -p='[{"op": "replace",
"path": "/metadata/labels/env", "value": "prod"}]'
# 完全替换资源
kubectl replace -f updated-deployment.yaml
资源验证:kubectl diff / kubectl explain
比较配置并理解资源结构。
# 在应用前显示差异
kubectl diff -f deployment.yaml
# 解释资源结构
kubectl explain pod.spec.containers
# 递归解释
kubectl explain deployment --recursive
# 验证资源而不应用
kubectl apply -f deployment.yaml --dry-run=client --
validate=true
高级操作
节点管理:kubectl cordon / kubectl drain
管理节点可用性以进行维护和更新。
# 标记节点为不可调度
kubectl cordon
# 标记节点为可调度
kubectl uncordon
# 疏散节点以进行维护
kubectl drain --ignore-daemonsets --delete-emptydir-
data
# 向节点添加污点
kubectl taint nodes key=value:NoSchedule
# 移除节点污点
kubectl taint nodes key:NoSchedule-
标签与注解:kubectl label / kubectl annotate
向资源添加元数据以进行组织和选择。
# 向资源添加标签
kubectl label pod environment=production
# 从资源移除标签
kubectl label pod environment-
# 向资源添加注解
kubectl annotate pod description="Frontend web
server"
# 按标签选择资源
kubectl get pods -l environment=production
kubectl get pods -l 'environment in (production,staging)'
代理与认证:kubectl proxy / kubectl auth
访问集群 API 和管理身份验证。
# 启动代理访问 Kubernetes API
kubectl proxy --port=8080
# 检查用户是否可以执行操作
kubectl auth can-i create pods
kubectl auth can-i '*' '*' --
as=system:serviceaccount:default:my-sa
# 模拟用户
kubectl get pods --as=system:serviceaccount:default:my-
sa
# 查看用户认证信息
kubectl config view --raw -o jsonpath='{.users[*].name}'
实用命令
用于 Kubernetes 操作的其他有用命令。
# 等待条件满足
kubectl wait --for=condition=Ready pod/ --timeout=300s
# 运行临时 Pod 进行测试
kubectl run tmp-pod --rm -i --tty --image=busybox --
/bin/sh
# 在不创建的情况下生成资源 YAML
kubectl create deployment nginx --image=nginx --dry-
run=client -o yaml
# 按创建时间排序资源
kubectl get pods --sort-by=.metadata.creationTimestamp
性能与监控
资源指标:kubectl top
查看集群中资源的实时使用情况。
# 节点资源使用情况
kubectl top nodes --sort-by=cpu
kubectl top nodes --sort-by=memory
# Pod 资源使用情况
kubectl top pods --sort-by=cpu
kubectl top pods --sort-by=memory -A
# 容器资源使用情况
kubectl top pods --containers=true
# 历史资源使用情况 (需要 metrics-server)
kubectl top pods --previous
健康检查与状态
监控应用程序和集群的健康状况。
# 检查 Deployment 滚动更新状态
kubectl rollout status deployment/
# 检查 Pod 就绪状态
kubectl get pods --field-selector=status.phase=Running
# 监控资源配额
kubectl get resourcequota
kubectl describe resourcequota
# 检查集群组件状态
kubectl get componentstatuses
性能优化
帮助优化集群性能的命令。
# 查看资源请求和限制
kubectl describe node | grep -A5 "Allocated resources:"
# 检查 Pod 中断预算
kubectl get pdb
# 查看水平 Pod 自动伸缩器
kubectl get hpa
# 检查网络策略
kubectl get networkpolicy
备份与恢复
集群备份和灾难恢复的基本命令。
# 备份命名空间中的所有资源
kubectl get all -o yaml -n > backup.yaml
# 导出特定资源
kubectl get deployment -o yaml > deployment-
backup.yaml
# 列出所有资源以供备份
kubectl api-resources --verbs=list --namespaced -o name
| xargs -n 1 kubectl get --show-kind --ignore-not-found -n
配置与上下文管理
上下文管理
在不同的 Kubernetes 集群和用户之间切换。
# 查看当前上下文
kubectl config current-context
# 列出所有上下文
kubectl config get-contexts
# 切换上下文
kubectl config use-context
# 创建新上下文
kubectl config set-context dev-
context --cluster=dev-cluster --
user=dev-user --
namespace=development
Kubeconfig 管理
配置 kubectl 以便与多个集群协同工作。
# 查看合并后的 kubeconfig
kubectl config view
# 设置集群信息
kubectl config set-cluster --
server=https://cluster-api-url --
certificate-
authority=/path/to/ca.crt
# 设置用户凭证
kubectl config set-credentials --
client-
certificate=/path/to/client.crt --
client-key=/path/to/client.key
# 合并 kubeconfig 文件
KUBECONFIG=~/.kube/config:~/.
kube/config2 kubectl config
view --merge --flatten >
~/.kube/merged-config
默认设置
为 kubectl 操作设置默认命名空间和首选项。
# 为当前上下文设置默认命名空间
kubectl config set-context --
current --namespace=
# 将不同输出格式设置为默认
kubectl config set-context --
current --output=yaml
# 查看配置详情
kubectl config view -o
jsonpath='{.users[*].name}'
kubectl config view --raw
最佳实践与技巧
命令效率
用于加快日常操作的快捷方式和别名。
# 常见的 kubectl 别名
alias k=kubectl
alias kgp='kubectl get pods'
alias kgs='kubectl get services'
alias kgd='kubectl get deployments'
# 使用资源的短名称
kubectl get po # pods
kubectl get svc # services
kubectl get deploy # deployments
kubectl get ns # namespaces
kubectl get no # nodes
# 监视资源变化
kubectl get pods --watch
kubectl get events --watch
资源选择
高效选择和过滤资源的方法。
# 按标签选择
kubectl get pods -l app=nginx
kubectl get pods -l 'environment in (prod,staging)'
kubectl get pods -l app=nginx,version!=v1.0
# 按字段选择
kubectl get pods --field-selector=status.phase=Running
kubectl get pods --field-
selector=spec.nodeName=worker-node-1
# 组合选择器
kubectl get pods -l app=nginx --field-
selector=status.phase=Running
输出格式化
自定义命令输出以提高可读性和处理性。
# 不同输出格式
kubectl get pods -o wide
kubectl get pods -o yaml
kubectl get pods -o json
kubectl get pods -o name
# 自定义列
kubectl get pods -o custom-
columns=NAME:.metadata.name,STATUS:.status.phase,N
ODE:.spec.nodeName
# JSONPath 查询
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
kubectl get pods -o
jsonpath='{.items[*].spec.containers[*].image}'
安全与验证
确保安全操作和验证配置的命令。
# 试运行以预览更改
kubectl apply -f deployment.yaml --dry-run=client -o yaml
# 验证配置
kubectl apply -f deployment.yaml --validate=true --dry-
run=client
# 在应用前显示差异
kubectl diff -f deployment.yaml
# 强制删除,设置宽限期
kubectl delete pod --grace-period=0 --force