本文档提供了 Kubernetes 管理的全面指南,涵盖了核心概念、关键组件以及有效管理 Kubernetes 集群的必备任务。本指南专为 DevOps 工程师、系统管理员以及负责操作 Kubernetes 环境的任何人设计。有关 Kubernetes 中特定部署策略的信息,请参阅 Kubernetes 部署策略,或有关 Kubernetes 配置管理详细信息,请参阅 Kubernetes 配置管理。
理解 Kubernetes 架构对于有效的管理至关重要。作为管理员,您需要熟悉控制平面组件和工作节点组件。
| 组件 | 描述 | 管理职责 |
|---|---|---|
| API服务器 | Kubernetes 控制平面的前端 | 安全访问、监控 API 服务器日志 |
| etcd | 用于集群数据的分布式键值存储 | 备份与恢复,确保高可用性 |
| 调度器 | 将 Pod 分配给节点 | 配置调度策略 |
| 控制器管理器 | 运行控制器进程 | 监控和排查控制器问题 |
| 组件 | 描述 | 管理职责 |
|---|---|---|
| Kubelet | 确保容器在 Pod 中运行的代理 | 监控节点健康状况,排查容器问题 |
| Kube-proxy | 维护网络规则 | 网络排查 |
| 容器运行时 | 运行容器(例如 Docker、containerd) | 确保兼容性,监控性能 |
来源:topics/kubernetes/README.md:225-242, topics/kubernetes/CKA.md:241-266
管理员有多种设置 Kubernetes 集群的选项
设置生产集群时,请考虑
节点管理是 Kubernetes 管理员的一项关键任务。
# View all nodes
kubectl get nodes
# Get detailed information about a node
kubectl describe node <node-name>
# Get nodes with labels
kubectl get nodes --show-labels
来源:topics/kubernetes/CKA.md:277-298
Kubectl 是与 Kubernetes 集群交互的主要命令行工具。
# Set up helpful aliases
alias k=kubectl
alias kd=kubectl delete
alias kds=kubectl describe
alias ke=kubectl edit
alias kr=kubectl run
alias kg=kubectl get
来源:topics/kubernetes/CKA.md:29-38
Pod 是 Kubernetes 中最小的可部署单元,也是管理员的一项基本职责。
# Create a pod
kubectl run nginx-test --image=nginx
# List all pods
kubectl get pods
# List pods with more details
kubectl get pods -o wide
# List pods from all namespaces
kubectl get pods -A
# Delete a pod
kubectl delete pod nginx-test
来源:topics/kubernetes/CKA.md:41-76
常见的 Pod 问题及排查步骤
| 状态 | 可能原因 | 排查命令 |
|---|---|---|
| 待处理 | 资源不足、调度器问题 | kubectl describe pod <pod-name> |
| CrashLoopBackOff | 应用程序错误、配置无效 | kubectl logs <pod-name> |
| ImagePullBackOff | 镜像名称无效、注册表访问问题 | kubectl describe pod <pod-name> |
| 错误 | 容器运行时问题、节点问题 | kubectl get events, kubectl describe pod <pod-name> |
来源:topics/kubernetes/CKA.md:175-204
静态 Pod 由特定节点上的 kubelet 直接管理,无需 API 服务器观察。
# Create a static pod
# First, locate the static pod path on the node
grep -i staticpod /var/lib/kubelet/config.yaml
# Create the pod definition in that directory
sudo vi /etc/kubernetes/manifests/static-nginx.yaml
要删除静态 Pod,请从静态 Pod 目录中删除其清单文件。
来源:topics/kubernetes/README.md:557-613
ReplicaSets 确保在任何给定时间都运行指定数量的 Pod 副本。
# Get all ReplicaSets
kubectl get rs
# Scale a ReplicaSet
kubectl scale rs <replicaset-name> --replicas=5
排查 ReplicaSets 问题
来源:topics/kubernetes/CKA.md:354-397, topics/kubernetes/CKA.md:404-464
Deployments 提供 Pod 和 ReplicaSets 的声明式更新。
# Create a deployment
kubectl create deployment dep --image=redis --replicas 3
# List deployments
kubectl get deployments
# Update a deployment
kubectl set image deployment/dep redis=redis:alpine
# Scale a deployment
kubectl scale deployment dep --replicas=5
排查 Deployments 问题
kubectl describe deployment <name> 检查部署事件kubectl get rs 验证 ReplicaSet 创建kubectl get pods 检查 Pod 创建来源:topics/kubernetes/CKA.md:466-598
Services 使得 Kubernetes 中的一组 Pod 能够被网络访问。
# Create a service for an existing deployment
kubectl expose deployment web --port=80 --name=web-service
# List all services
kubectl get svc
# Get more details about a service
kubectl describe svc web-service
| Service 类型 | 用例 | 特性 |
|---|---|---|
| ClusterIP | 内部通信 | 默认类型,集群内部 IP |
| NodePort | 访问固定端口的外部 | 在节点 IP 上以静态端口公开服务 |
| LoadBalancer | 生产环境外部访问 | 与云负载均衡器集成 |
| ExternalName | 服务别名 | 将服务映射到 DNS 名称 |
来源:topics/kubernetes/CKA.md:299-353
Network Policies 指定 Pod 组之间以及 Pod 与其他网络端点之间的通信方式。
# Get network policies
kubectl get networkpolicies
调度器负责决定哪个节点将托管新创建的 Pod。
节点亲和性允许您根据节点标签来限制 Pod 可以调度到的节点。
来源:topics/kubernetes/CKA.md:619-656
Taints 和 Tolerations 协同工作,确保 Pod 不会被调度到不合适的节点上。
# Add a taint to a node
kubectl taint node <node-name> app=web:NoSchedule
# Check taints on a node
kubectl describe node <node-name> | grep -i taints
# Remove a taint
kubectl taint node <node-name> app=web:NoSchedule-
要使 Pod 能够调度到带有 taint 的节点上,它必须具有匹配的 toleration。
来源:topics/kubernetes/CKA.md:710-751, topics/kubernetes/exercises/taints_101/exercise.md:1-12, topics/kubernetes/exercises/taints_101/solution.md:1-30
作为管理员,您需要管理资源分配以确保集群的稳定性。
资源请求保证了最低资源,而限制则限制了容器可以使用的最大资源。
# Check if pods have resource limits
kubectl describe pod <pod-name> | grep -i limits
来源:topics/kubernetes/CKA.md:753-806
资源配额限制命名空间中的总资源消耗。
RBAC 允许管理员通过 Kubernetes API 动态配置策略。
关键 RBAC 组件
# Create a role
kubectl create role pod-reader --verb=get,list,watch --resource=pods
# Create a role binding
kubectl create rolebinding bob-pod-reader --role=pod-reader --user=bob
# Deploy metrics-server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# View node resource usage
kubectl top nodes
# View pod resource usage
kubectl top pods
来源:topics/kubernetes/CKA.md:808-826
在排查 Kubernetes 问题时,请遵循系统化的方法。
kubectl get 命令查看资源状态kubectl describe 查看事件和配置kubectl logs 调查应用程序问题kubectl get events 查看集群范围的事件etcd 是 Kubernetes 集群中最关键的需要备份的组件。
# Backup etcd
ETCDCTL_API=3 etcdctl snapshot save snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key
# Restore etcd
ETCDCTL_API=3 etcdctl snapshot restore snapshot.db \
--data-dir /var/lib/etcd-from-backup
您可以将资源导出为 YAML 文件,作为一种备份形式。
# Backup all deployments to YAML files
kubectl get deployments -o yaml > deployments-backup.yaml
# Backup specific namespaces
kubectl -n <namespace> get all -o yaml > namespace-backup.yaml
# Create a secret
kubectl create secret generic db-credentials \
--from-literal=username=admin \
--from-literal=password=secret
# Get secrets
kubectl get secrets
Security contexts 定义了权限和访问控制设置。
升级 Kubernetes 集群需要仔细规划和执行。
# Check current versions
kubectl version
# Drain a node before upgrade
kubectl drain <node-name> --ignore-daemonsets
有效的 Kubernetes 管理需要对架构和日常操作任务都有深入的了解。本指南涵盖了 Kubernetes 管理的各个关键方面,但该领域不断发展。定期的实践、了解最新动态和持续学习是成功进行 Kubernetes 管理的关键。
来源:topics/kubernetes/CKA.md, topics/kubernetes/README.md, topics/kubernetes/exercises/taints_101/exercise.md, topics/kubernetes/exercises/node_selectors/exercise.md
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(eac6c6)