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") ``` ```

相关推荐
tingting01199 小时前
k8s 1.30 安装ingress-nginx
nginx·容器·kubernetes
陈陈CHENCHEN11 小时前
【Kubernetes】CentOS 7 安装 Kubernetes 1.30.1
kubernetes
2201_7611990412 小时前
k8s2部署
云原生·容器·kubernetes
云上艺旅13 小时前
K8S学习之基础六十四:helm常用命令
学习·云原生·容器·kubernetes
RedCong15 小时前
在k8s中使用CronJob定时备份mysql
mysql·容器·kubernetes
木二19 小时前
附042.Kubernetes_v1.32.3生成环境高可用部署
云原生·kubernetes·prometheus·ingress·longhorn
XMYX-020 小时前
使用 KT-Connect 0.3.7在本地访问 Kubernetes
云原生·容器·kubernetes
有梦想的攻城狮1 天前
【一起来学kubernetes】29、NFS使用详解
云原生·容器·kubernetes·nfs·网络文件系统
这个懒人1 天前
Kubernetes深度解析:云原生时代的容器编排引擎
云原生·容器·kubernetes
小安运维日记1 天前
CKS认证 | Day3 K8s容器运行环境安全加固
运维·网络·安全·云原生·kubernetes·云计算