Docker与Kubernetes企业级实战:Linux运维向云原生转型指南 📅 2026/7/15 21:23:02 这次我们来看一套专门为Linux运维工程师设计的云原生技术教程重点覆盖Docker和KubernetesK8s在企业环境中的实际应用。这套教程不仅包含完整的知识点讲解还附带了实战课件适合有一定Linux基础但希望向云原生方向进阶的运维人员。云原生技术已经成为现代企业基础设施的核心Docker提供了轻量级的容器化解决方案而Kubernetes则负责容器编排和管理。对于运维工程师来说掌握这两项技术意味着能够应对更复杂的部署场景、提高资源利用率、实现自动化运维。本教程将从实际企业需求出发重点讲解安装部署、集群搭建、日常运维和故障排查等关键技能。1. 核心能力速览能力项说明技术栈Docker Kubernetes 完整技术生态适用人群Linux运维工程师、DevOps工程师、SRE学习门槛需要具备Linux基础命令和系统管理经验实验环境可在单机或虚拟机环境部署测试企业应用容器化部署、微服务管理、自动化运维配套资源课件包含安装脚本、配置示例、故障案例2. 适用场景与使用边界这套教程主要面向已经在从事Linux系统运维希望向云原生技术转型的工程师。在实际工作中Docker和Kubernetes能够解决以下问题适用场景传统应用容器化改造和迁移微服务架构的部署和管理开发、测试、生产环境的一致性保障自动化扩缩容和故障自愈混合云和多云环境下的应用部署使用边界不适合小型单机应用过度设计会增加复杂度需要团队具备一定的容器化知识和运维经验生产环境部署需要考虑网络、存储、安全等企业级需求学习曲线较陡需要投入时间掌握核心概念3. 环境准备与前置条件在开始实践之前需要准备以下环境硬件要求至少4核CPU、8GB内存、50GB磁盘空间支持虚拟化的CPU用于运行虚拟机网络连接正常能够访问容器镜像仓库软件要求Linux操作系统Ubuntu 20.04/CentOS 7内核版本5.4以上支持cgroups v2Docker Engine 20.10Kubernetes 1.24容器运行时containerd或CRI-O网络要求能够访问Docker Hub、Quay.io等镜像仓库集群节点间网络互通端口开放如果需要外部访问需要配置负载均衡器4. Docker 安装与基础操作Docker是容器技术的核心我们先从Docker的安装和基本使用开始。4.1 Docker 安装部署Ubuntu系统安装Docker# 更新软件包索引 sudo apt update # 安装依赖包 sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加Docker软件源 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 # 安装Docker Engine sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io # 启动Docker服务 sudo systemctl start docker sudo systemctl enable docker # 验证安装 sudo docker versionCentOS系统安装Docker# 卸载旧版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 安装依赖包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker软件源 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker Engine sudo yum install docker-ce docker-ce-cli containerd.io # 启动Docker服务 sudo systemctl start docker sudo systemctl enable docker # 将当前用户加入docker组避免每次使用sudo sudo usermod -aG docker $USER4.2 Docker 基础操作实战镜像管理# 搜索镜像 docker search nginx # 拉取镜像 docker pull nginx:latest # 查看本地镜像 docker images # 删除镜像 docker rmi nginx:latest容器操作# 运行容器 docker run -d --name my-nginx -p 80:80 nginx:latest # 查看运行中的容器 docker ps # 查看所有容器包括停止的 docker ps -a # 进入容器 docker exec -it my-nginx /bin/bash # 查看容器日志 docker logs my-nginx # 停止容器 docker stop my-nginx # 启动已停止的容器 docker start my-nginx # 删除容器 docker rm my-nginx5. Dockerfile 编写与镜像构建掌握Dockerfile编写是容器化应用的关键技能。5.1 基础Dockerfile示例# 使用官方Python运行时作为父镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 将当前目录内容复制到容器的/app中 COPY . /app # 安装requirements.txt中指定的包 RUN pip install --no-cache-dir -r requirements.txt # 使端口80可供此容器外的环境使用 EXPOSE 80 # 定义环境变量 ENV NAME World # 在容器启动时运行app.py CMD [python, app.py]5.2 多阶段构建优化# 第一阶段构建阶段 FROM golang:1.19 as builder WORKDIR /app COPY . . RUN go mod download RUN CGO_ENABLED0 GOOSlinux go build -a -installsuffix cgo -o main . # 第二阶段运行阶段 FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --frombuilder /app/main . CMD [./main]5.3 构建和推送镜像# 构建镜像 docker build -t my-app:1.0 . # 标记镜像用于推送到仓库 docker tag my-app:1.0 myregistry.com/my-app:1.0 # 登录镜像仓库 docker login myregistry.com # 推送镜像 docker push myregistry.com/my-app:1.06. Kubernetes 集群搭建Kubernetes集群搭建有多种方式我们介绍最常用的kubeadm方式。6.1 环境准备所有节点# 关闭swap sudo swapoff -a sudo sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab # 加载内核模块 sudo modprobe br_netfilter sudo modprobe overlay # 设置内核参数 cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 EOF sudo sysctl --system # 安装容器运行时containerd sudo apt update sudo apt install -y containerd sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml sudo systemctl restart containerd sudo systemctl enable containerd6.2 安装kubeadm、kubelet、kubectl# 添加Kubernetes软件源 sudo apt update sudo apt install -y apt-transport-https curl 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 # 安装kubelet、kubeadm、kubectl sudo apt update sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl # 启动kubelet sudo systemctl enable kubelet sudo systemctl start kubelet6.3 初始化Master节点# 初始化集群在主节点执行 sudo kubeadm init --pod-network-cidr10.244.0.0/16 --apiserver-advertise-addressMASTER_IP # 配置kubectl普通用户 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 安装网络插件Flannel kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml6.4 加入Worker节点# 在Worker节点执行使用kubeadm init输出的join命令 kubeadm join MASTER_IP:6443 --token token --discovery-token-ca-cert-hash hash6.5 验证集群状态# 查看节点状态 kubectl get nodes # 查看所有Pod状态 kubectl get pods --all-namespaces # 查看集群信息 kubectl cluster-info7. Kubernetes 核心概念与实践7.1 Pod管理与部署创建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# 使用YAML文件创建Pod kubectl apply -f nginx-pod.yaml # 查看Pod状态 kubectl get pods # 查看Pod详细信息 kubectl describe pod nginx-pod # 查看Pod日志 kubectl logs nginx-pod # 进入Pod执行命令 kubectl exec -it nginx-pod -- /bin/bash # 删除Pod kubectl delete pod nginx-pod7.2 Deployment管理Deployment YAML示例apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.21 ports: - containerPort: 80Deployment操作# 创建Deployment kubectl apply -f nginx-deployment.yaml # 查看Deployment状态 kubectl get deployments # 扩展副本数 kubectl scale deployment nginx-deployment --replicas5 # 更新镜像版本 kubectl set image deployment/nginx-deployment nginxnginx:1.22 # 查看更新历史 kubectl rollout history deployment/nginx-deployment # 回滚到上一个版本 kubectl rollout undo deployment/nginx-deployment7.3 Service与网络暴露Service YAML示例apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancerService操作# 创建Service kubectl apply -f nginx-service.yaml # 查看Service kubectl get services # 查看Service详情 kubectl describe service nginx-service # 端口转发临时访问 kubectl port-forward service/nginx-service 8080:808. 存储管理与持久化8.1 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)PV示例apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: /mnt/dataPVC示例apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi8.2 使用PVC的Pod示例apiVersion: v1 kind: Pod metadata: name: mysql-pod spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: password volumeMounts: - mountPath: /var/lib/mysql name: mysql-storage volumes: - name: mysql-storage persistentVolumeClaim: claimName: mysql-pvc9. 配置管理与敏感信息9.1 ConfigMap管理创建ConfigMap# 从字面值创建 kubectl create configmap app-config --from-literallog_levelinfo --from-literaldatabase_hostmysql # 从文件创建 kubectl create configmap nginx-config --from-filenginx.confConfigMap YAML示例apiVersion: v1 kind: ConfigMap metadata: name: app-config data: log_level: info database_host: mysql-service nginx.conf: | server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; } }9.2 Secret管理创建Secret# 创建通用Secret kubectl create secret generic db-secret --from-literalusernameadmin --from-literalpasswordsecret123 # 创建TLS Secret kubectl create secret tls tls-secret --certserver.crt --keyserver.key使用Secret的Pod示例apiVersion: v1 kind: Pod metadata: name: app-with-secret spec: containers: - name: app image: my-app:latest env: - name: DB_USERNAME valueFrom: secretKeyRef: name: db-secret key: username - name: DB_PASSWORD valueFrom: secretKeyRef: name: db-secret key: password10. 日常运维与监控10.1 资源监控查看集群资源使用# 查看节点资源使用 kubectl top nodes # 查看Pod资源使用 kubectl top pods # 查看指定命名空间的资源使用 kubectl top pods -n kube-system设置资源限制apiVersion: v1 kind: Pod metadata: name: limited-pod spec: containers: - name: app image: my-app:latest resources: requests: memory: 64Mi cpu: 250m limits: memory: 128Mi cpu: 500m10.2 日志管理查看和管理日志# 查看Pod日志 kubectl logs pod-name # 实时查看日志 kubectl logs -f pod-name # 查看指定容器的日志 kubectl logs pod-name -c container-name # 查看之前崩溃的Pod日志 kubectl logs pod-name --previous # 导出日志到文件 kubectl logs pod-name app.log10.3 健康检查与探针配置存活探针和就绪探针apiVersion: v1 kind: Pod metadata: name: healthy-pod spec: containers: - name: web image: nginx:latest livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 5 periodSeconds: 511. 故障排查与调试11.1 常见问题排查流程Pod启动失败排查# 查看Pod状态 kubectl get pods # 查看Pod详情 kubectl describe pod pod-name # 查看Pod事件 kubectl get events --sort-by.metadata.creationTimestamp # 检查镜像拉取 kubectl describe pod pod-name | grep -A 10 -B 10 Image # 检查资源配额 kubectl describe pod pod-name | grep -A 10 -B 10 Resource服务无法访问排查# 检查Service端点 kubectl get endpoints service-name # 检查网络策略 kubectl get networkpolicies # 检查DNS解析 kubectl run -it --rm --imagebusybox debug --restartNever -- nslookup service-name # 端口连通性测试 kubectl run -it --rm --imagealpine/netcat debug --restartNever -- nc -zv service-ip port11.2 集群状态检查集群健康检查脚本#!/bin/bash echo 集群节点状态 kubectl get nodes echo 系统Pod状态 kubectl get pods -n kube-system echo 集群事件 kubectl get events --sort-by.metadata.creationTimestamp | tail -10 echo 组件状态 kubectl get componentstatuses echo 资源使用情况 kubectl top nodes 2/dev/null || echo Metrics server not installed12. 安全最佳实践12.1 网络安全策略NetworkPolicy示例apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: db-network-policy namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: role: api ports: - protocol: TCP port: 330612.2 服务账户和RBACRole和RoleBinding示例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: namespace: default name: read-pods subjects: - kind: User name: jane apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io13. 持续集成与部署13.1 GitOps工作流使用ArgoCD进行GitOps部署# 安装ArgoCD kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml # 获取管理员密码 kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath{.data.password} | base64 -dApplication定义示例apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app namespace: argocd spec: project: default source: repoURL: https://github.com/my-org/my-app.git targetRevision: HEAD path: k8s destination: server: https://kubernetes.default.svc namespace: default syncPolicy: automated: prune: true selfHeal: true14. 企业级实践建议14.1 多环境管理使用Kustomize管理多环境base/ ├── kustomization.yaml ├── deployment.yaml └── service.yaml environments/ ├── dev/ │ ├── kustomization.yaml │ └── patch.yaml └── prod/ ├── kustomization.yaml └── patch.yaml基础kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - deployment.yaml - service.yaml开发环境补丁apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization bases: - ../../base patchesStrategicMerge: - patch.yaml14.2 备份与恢复Velero备份工具使用# 安装Velero velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.0.0 \ --bucket my-backup-bucket \ --backup-location-config regionus-west-2 \ --snapshot-location-config regionus-west-2 \ --secret-file ./credentials-velero # 创建备份 velero backup create my-backup --include-namespaces default # 恢复备份 velero restore create --from-backup my-backup这套DockerK8s教程涵盖了从基础安装到企业级实践的全流程建议按照章节顺序逐步学习。每个技术点都配有实际操作示例可以通过实验环境进行验证。对于运维工程师来说重点要掌握故障排查、性能优化和安全加固等生产环境需要的技能。在实际工作中建议先从开发测试环境开始实践逐步过渡到生产环境。同时要建立完善的监控告警体系确保集群的稳定运行。随着技术的不断演进还需要持续学习新的特性和最佳实践。