Kubernetes实战指南:从入门到生产环境部署

Kubernetes实战指南:从入门到生产环境部署


目录

  1. 核心架构解析
  2. 关键对象详解
  3. 集群搭建方案
  4. 工作负载管理
  5. 网络与存储
  6. 监控与日志
  7. CI/CD集成
  8. 故障排查手册

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'

进阶方向

  1. 安全加固:RBAC策略、NetworkPolicy、Pod安全策略
  2. 性能优化:调度算法调优、ETCD性能优化
  3. 多集群管理:Kubefed、Cluster API
  4. 服务网格: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") ``` ```

相关推荐
资源开发与学习2 天前
Kubernetes集群核心概念 Service
kubernetes
Nazi62 天前
k8s的dashboard
云原生·容器·kubernetes
是小崔啊2 天前
叩丁狼K8s - 概念篇
云原生·容器·kubernetes
summer_west_fish3 天前
2023年系统分析师上半年论文试题分析
kubernetes
落日漫游3 天前
dockercompose和k8s区别
docker·kubernetes
资源开发与学习3 天前
kubernetes核心概念 Service
kubernetes
有谁看见我的剑了?3 天前
k8s-容器探针和生命周期回调学习
学习·容器·kubernetes
Rancher社区3 天前
Rancher 社区双周报|聚焦 Harvester 新特性:网络、存储与虚拟化全面升级
kubernetes
linweidong3 天前
解锁 Ray 在 Kubernetes 上的弹性伸缩:打造高效、稳定的分布式作业
分布式·容器·kubernetes·ray·keda·autoscaling·ray推理
Katzelala3 天前
[K8S学习笔记] Service和Ingress的关系
笔记·学习·kubernetes