Kubernetes实战指南:从入门到生产环境部署
目录
1. 核心架构解析
graph TD
Master[Control Plane] -->|管理| Node[Worker Node]
Master -->|存储| etcd
Node -->|运行| Pod
Node -->|网络| CNI
Master -->|调度| Scheduler
Master -->|API入口| API-Server
Master -->|控制循环| Controller-Manager
组件功能说明
- etcd:分布式键值存储(集群状态数据库)
- kube-apiserver:集群操作的唯一入口(RESTful API)
- kube-scheduler:资源调度决策引擎
- kube-controller-manager:维护集群状态的守护进程
- kubelet:节点代理(Pod生命周期管理)
- kube-proxy:网络流量代理(Service实现基础)
2. 关键对象详解
2.1 核心对象关系
graph LR
Deployment --> ReplicaSet
ReplicaSet --> Pod
Service -->|暴露| Pod
Ingress -->|路由| Service
ConfigMap -->|配置注入| Pod
PersistentVolume -->|存储供给| Pod
2.2 对象声明示例(YAML)
yaml
# Deployment示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
volumeMounts:
- name: config
mountPath: /etc/nginx
volumes:
- name: config
configMap:
name: nginx-config
3. 集群搭建方案
3.1 主流工具对比
工具 | 适用场景 | 学习曲线 | 生产适用性 |
---|---|---|---|
kubeadm | 官方推荐方案 | 中等 | ★★★★☆ |
Minikube | 本地开发测试 | 简单 | ★☆☆☆☆ |
kops | AWS环境部署 | 中等 | ★★★★☆ |
Rancher | 多集群管理 | 简单 | ★★★★☆ |
OpenShift | 企业级容器平台 | 复杂 | ★★★★★ |
3.2 快速创建集群
bash
# 使用kubeadm创建集群
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4. 工作负载管理
4.1 常用命令速查
bash
# 查看Pod详细信息
kubectl describe pod <pod-name>
# 进入容器调试
kubectl exec -it <pod-name> -- /bin/bash
# 查看日志(实时)
kubectl logs -f <pod-name>
# 水平扩展Deployment
kubectl scale deployment/webapp --replicas=5
# 滚动更新策略
kubectl set image deployment/webapp nginx=nginx:1.22
4.2 资源配额管理
yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
spec:
hard:
requests.cpu: "4"
requests.memory: 8Gi
limits.cpu: "8"
limits.memory: 16Gi
5. 网络与存储
5.1 Service类型对比
类型 | 特点 | 适用场景 |
---|---|---|
ClusterIP | 默认类型,内部访问 | 服务间通信 |
NodePort | 通过节点端口暴露服务 | 开发测试环境 |
LoadBalancer | 云平台负载均衡器集成 | 生产环境公网暴露 |
Ingress | 7层路由规则管理 | 域名访问管理 |
5.2 存储方案选型
graph TD
LocalPV -->|本地存储| HostPath
CloudPV -->|云存储| AWS-EBS
NetworkPV -->|网络存储| NFS
DynamicPV -->|动态供给| StorageClass
6. 监控与日志
6.1 监控体系架构
graph LR
Prometheus -->|采集指标| Exporters
Grafana -->|可视化| Prometheus
AlertManager -->|告警通知| Prometheus
EFK -->|日志管理| Fluentd
6.2 核心监控指标
bash
# 查看节点资源使用
kubectl top node
# 查看Pod资源使用
kubectl top pod
# 安装metrics-server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
7. CI/CD集成
7.1 GitOps工作流
graph LR
Git -->|代码变更| CI-Pipeline
CI-Pipeline -->|构建镜像| Registry
CD-Tool -->|同步配置| Kubernetes
Kubernetes -->|状态反馈| CD-Tool
7.2 Argo CD部署示例
yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
spec:
project: default
source:
repoURL: https://github.com/argoproj/argocd-example-apps
targetRevision: HEAD
path: guestbook
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
8. 故障排查手册
8.1 常见问题处理
现象 | 排查步骤 |
---|---|
Pod处于Pending状态 | 1. 检查资源配额 2. 查看节点调度情况 3. 检查存储卷挂载 |
Service无法访问 | 1. 验证Endpoints是否正确 2. 检查网络策略 3. 测试ClusterIP连通性 |
镜像拉取失败 | 1. 检查镜像地址权限 2. 验证ImagePullSecret配置 3. 手动测试拉取 |
节点NotReady | 1. 检查kubelet状态 2. 验证网络插件运行情况 3. 查看系统资源使用 |
8.2 诊断命令组合
bash
# 快速诊断命名空间问题
kubectl get all -n <namespace>
kubectl describe ns <namespace>
kubectl get events --sort-by='.metadata.creationTimestamp'
进阶方向
- 安全加固:RBAC策略、NetworkPolicy、Pod安全策略
- 性能优化:调度算法调优、ETCD性能优化
- 多集群管理:Kubefed、Cluster API
- 服务网格:Istio、Linkerd集成
推荐学习路径 :
官方文档 → 认证考试(CKA/CKAD)→ 生产环境实践 → 源码研究
附录\] 常用资源列表: * [Kubernetes官方文档](https://link.juejin.cn?target=https%3A%2F%2Fkubernetes.io%2Fdocs%2Fhome%2F "https://kubernetes.io/docs/home/") * [Kubectl备忘单](https://link.juejin.cn?target=https%3A%2F%2Fkubernetes.io%2Fdocs%2Freference%2Fkubectl%2Fcheatsheet%2F "https://kubernetes.io/docs/reference/kubectl/cheatsheet/") * [Awesome Kubernetes](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Framitsurana%2Fawesome-kubernetes "https://github.com/ramitsurana/awesome-kubernetes") ``` ```