Docker与Kubernetes企业级实战:从零搭建云原生运维平台

发布时间:2026/7/15 13:36:46

Docker与Kubernetes企业级实战:从零搭建云原生运维平台 这次我们来深入探讨一套完整的 Linux 运维云原生技术教程重点聚焦 Docker 和 KubernetesK8s在企业级环境中的实际应用。这套教程不仅包含核心概念解析还提供了完整的课件资料帮助 Linux 运维工程师快速进阶到云原生技术栈。对于已经掌握基础 Linux 运维技能的工程师来说Docker 和 K8s 是必须攻克的下一代技术门槛。大厂普遍采用云原生架构的核心原因在于其能够实现应用快速部署、弹性伸缩和高可用性。本文将带你从零开始搭建完整的 Docker K8s 环境并通过实际案例演示企业级部署流程。1. 核心能力速览能力项说明技术栈组成Docker 容器化 Kubernetes 容器编排学习门槛需要具备 Linux 基础运维知识和命令行操作能力硬件要求最低 2核4G 内存推荐 4核8G 以上配置部署方式单机学习环境、多节点集群部署企业应用场景微服务部署、持续集成、自动扩缩容、故障自愈配套资源完整课件、配置模板、实战案例2. 适用场景与使用边界这套教程特别适合以下人群已有 Linux 运维经验希望转型云原生技术的工程师需要为企业搭建容器化平台的技术团队准备面试容器化相关岗位的求职者想要理解大厂技术架构背后原理的技术爱好者适用场景传统应用向容器化迁移微服务架构的部署和管理开发测试环境快速搭建生产环境的高可用部署技术边界不适合完全没有 Linux 基础的初学者生产环境部署需要更严格的安全配置大规模集群需要专业的网络和存储方案支持3. 环境准备与前置条件在开始实践之前需要确保你的实验环境满足以下要求3.1 硬件配置要求CPU至少 2 核支持虚拟化内存最低 4GB推荐 8GB 以上磁盘空间至少 20GB 可用空间网络需要互联网连接以下载依赖包3.2 软件环境要求操作系统Ubuntu 18.04 / CentOS 7 / RHEL 8Linux 内核版本3.10 或更高软件依赖systemd、iptables、cgroup 支持3.3 网络环境配置确保服务器可以正常访问外网需要配置正确的 DNS 解析和网络代理如有需要# 检查网络连通性 ping -c 3 baidu.com # 检查 DNS 解析 nslookup docker.com # 如有代理需要配置 export http_proxyhttp://your-proxy:port export https_proxyhttp://your-proxy:port4. Docker 安装与配置实战4.1 Docker 安装步骤以下是基于 Ubuntu 系统的 Docker CE 安装流程# 1. 更新软件包索引 sudo apt-get update # 2. 安装必要的依赖包 sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release # 3. 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 4. 设置稳定版仓库 echo \ deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 5. 安装 Docker Engine sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io # 6. 启动 Docker 服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 7. 验证安装 sudo docker --version sudo docker run hello-world4.2 Docker 基础配置优化安装完成后需要进行一些基础配置以优化使用体验# 1. 将当前用户加入 docker 组避免每次使用 sudo sudo usermod -aG docker $USER # 2. 重新登录使组权限生效 newgrp docker # 3. 配置 Docker 镜像加速器国内用户必备 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } } EOF # 4. 重启 Docker 服务 sudo systemctl daemon-reload sudo systemctl restart docker4.3 Docker 常用命令实战掌握以下核心命令是容器化运维的基础# 镜像管理 docker images # 查看本地镜像 docker pull nginx:latest # 拉取镜像 docker rmi image_id # 删除镜像 # 容器管理 docker ps # 查看运行中的容器 docker ps -a # 查看所有容器 docker run -d --name my-nginx nginx # 后台运行容器 docker exec -it my-nginx bash # 进入容器 docker stop my-nginx # 停止容器 docker rm my-nginx # 删除容器 # 容器日志查看 docker logs my-nginx # 查看容器日志 docker logs -f my-nginx # 实时查看日志 # 资源监控 docker stats # 查看容器资源使用情况5. Kubernetes 集群搭建实战5.1 单机学习环境搭建Minikube对于初学者建议从 Minikube 开始# 1. 安装 Minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube # 2. 安装 kubectl 命令行工具 curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl # 3. 启动 Minikube 集群 minikube start --driverdocker --memory4096 --cpus2 # 4. 验证集群状态 kubectl cluster-info kubectl get nodes5.2 多节点生产级集群搭建对于生产环境推荐使用 kubeadm 搭建多节点集群Master 节点配置# 1. 关闭 swap sudo swapoff -a sudo sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab # 2. 安装 kubeadm、kubelet、kubectl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo deb https://apt.kubernetes.io/ kubernetes-xenial main | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl # 3. 初始化集群 sudo kubeadm init --pod-network-cidr10.244.0.0/16 # 4. 配置 kubectl mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 5. 安装安装网络插件Flannel kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlWorker 节点加入集群# 在 Worker 节点执行 Master 初始化时输出的 join 命令 kubeadm join master-ip:6443 --token token --discovery-token-ca-cert-hash hash5.3 集群状态验证搭建完成后需要验证集群各组件运行状态# 查看节点状态 kubectl get nodes # 查看集群状态 kubectl get cs # 查看所有命名空间的 Pod kubectl get pods --all-namespaces # 查看集群信息 kubectl cluster-info6. Kubernetes 核心概念与实战操作6.1 Pod 管理与部署Pod 是 K8s 的最小调度单位以下是 Pod 的创建和管理# nginx-pod.yaml apiVersion: v1 kind: Pod metadata: name: nginx-pod labels: app: nginx spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80应用配置并验证# 创建 Pod kubectl apply -f nginx-pod.yaml # 查看 Pod 状态 kubectl get pods # 查看 Pod 详情 kubectl describe pod nginx-pod # 进入 Pod 内部 kubectl exec -it nginx-pod -- bash # 查看 Pod 日志 kubectl logs nginx-pod6.2 Deployment 部署与管理Deployment 提供了 Pod 的声明式更新# nginx-deployment.yaml apiVersion: : apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.20 ports: - containerPort: 80部署和更新策略# 创建 Deployment kubectl apply -f nginx-deployment.yaml # 查看 Deployment 状态 kubectl get deployments # 扩容到 5 个副本 kubectl scale deployment nginx-deployment --replicas5 # 更新镜像版本 kubectl set image deployment/nginx-deployment nginxnginx:1.21 # 回滚到上一个版本 kubectl rollout undo deployment/nginx-deployment6.3 Service 服务发现与负载均衡Service 为 Pod 提供稳定的网络访问入口# nginx-service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: NodePort创建和测试服务# 创建 Service kubectl apply -f nginx-service.yaml # 查看 Service kubectl get services # 获取 NodePort 端口 kubectl get svc nginx-service # 测试服务访问 curl http://node-ip:node-port7. 企业级应用部署实战7.1 多环境配置管理使用 ConfigMap 和 Secret 管理应用配置# configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: app-config data: database.host: mysql-service database.port: 3306 app.log.level: INFO # secret.yaml apiVersion: v1 kind: Secret metadata: name: app-secret type: Opaque data: database.password: cGFzc3dvcmQxMjM # base64 编码7.2 有状态应用部署MySQL有状态服务需要 PersistentVolume 支持# mysql-statefulset.yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: mysql replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: root-password ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: mysql-persistent-storage spec: accessModes: [ ReadWriteOnce ] resources: requests: storage: 10Gi7.3 应用健康检查与自愈配置存活探针和就绪探针apiVersion: apps/v1 kind: Deployment metadata: name: webapp-with-probes spec: replicas: 3 template: spec: containers: - name: webapp image: myapp:latest livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 5 periodSeconds: 58. 监控与日志管理8.1 集群监控方案部署 Prometheus 和 Grafana 进行集群监控# 添加 Helm 仓库 helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update # 安装 Prometheus Stack helm install prometheus prometheus-community/kube-prometheus-stack8.2 应用日志收集配置 Fluentd 进行日志收集apiVersion: v1 kind: ConfigMap metadata: name: fluentd-config data: fluent.conf: | source type tail path /var/log/containers/*.log pos_file /var/log/fluentd-containers.log.pos tag kubernetes.* read_from_head true parse type json time_format %Y-%m-%dT%H:%M:%S.%NZ /parse /source9. 持续集成与持续部署9.1 GitLab CI/CD 集成配置自动化部署流水线# .gitlab-ci.yml stages: - build - test - deploy build: stage: build script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA deploy: stage: deploy script: - kubectl set image deployment/myapp myapp$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA only: - master9.2 蓝绿部署策略实现零停机部署# 蓝绿部署脚本示例 #!/bin/bash # 部署新版本绿环境 kubectl apply -f green-deployment.yaml # 等待新版本就绪 kubectl rollout status deployment/green-deployment # 切换服务指向新版本 kubectl apply -f green-service.yaml # 保留旧版本一段时间后清理 sleep 3600 # 等待1小时 kubectl delete -f blue-deployment.yaml10. 安全配置最佳实践10.1 网络策略配置限制 Pod 间网络访问apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: database-isolation spec: podSelector: matchLabels: role: database policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: role: api ports: - protocol: TCP port: 330610.2 RBAC 权限控制配置基于角色的访问控制apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [] resources: [pods] verbs: [get, watch, list] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods namespace: default subjects: - kind: User name: jane apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io11. 故障排查与性能优化11.1 常见问题排查命令# 查看 Pod 详细状态 kubectl describe pod pod-name # 查看 Pod 日志 kubectl logs pod-name # 进入 Pod 调试 kubectl exec -it pod-name -- /bin/bash # 查看节点资源使用 kubectl top nodes # 查看 Pod 资源使用 kubectl top pods # 检查集群事件 kubectl get events --sort-by.lastTimestamp # 检查网络连通性 kubectl run debug --imagebusybox --rm -it --restartNever -- ping service-name11.2 性能优化建议资源请求和限制配置resources: requests: memory: 64Mi cpu: 250m limits: memory: 128Mi cpu: 500m节点亲和性配置affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: disktype operator: In values: - ssdHPA 自动扩缩容kubectl autoscale deployment nginx-deployment --cpu-percent50 --min1 --max1012. 生产环境部署检查清单在将应用部署到生产环境前务必完成以下检查[ ] 所有容器镜像都有明确的版本标签[ ] 配置了正确的资源请求和限制[ ] 设置了健康检查探针[ ] 配置了日志收集和监控[ ] 网络策略和安全策略已就绪[ ] 备份和恢复方案已测试[ ] 灾难恢复流程已文档化[ ] 团队成员都经过相关培训这套 Docker K8s 教程涵盖了从基础概念到企业级实战的完整路径配合提供的课件资料可以帮助 Linux 运维工程师系统性地掌握云原生技术栈。建议按照章节顺序逐步实践每个技术点都要亲手操作验证遇到问题时参考排查指南进行调试。

相关新闻