Docker与Kubernetes企业级实战:从零搭建云原生运维平台
这次我们来深入探讨一套完整的 Linux 运维云原生技术教程,重点聚焦 Docker 和 Kubernetes(K8s)在企业级环境中的实际应用。这套教程不仅包含核心概念解析,还提供了完整的课件资料,帮助 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 8+
- Linux 内核版本:3.10 或更高
- 软件依赖:systemd、iptables、cgroup 支持
3.3 网络环境配置
确保服务器可以正常访问外网,需要配置正确的 DNS 解析和网络代理(如有需要):
# 检查网络连通性
ping -c 3 baidu.com
# 检查 DNS 解析
nslookup docker.com
# 如有代理需要配置
export http_proxy=http://your-proxy:port
export https_proxy=http://your-proxy:port
4. 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 [arch=amd64 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-world
4.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 docker
4.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 --driver=docker --memory=4096 --cpus=2
# 4. 验证集群状态
kubectl cluster-info
kubectl get nodes
5.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-cidr=10.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.yml
Worker 节点加入集群:
# 在 Worker 节点执行 Master 初始化时输出的 join 命令
kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>
5.3 集群状态验证
搭建完成后,需要验证集群各组件运行状态:
# 查看节点状态
kubectl get nodes
# 查看集群状态
kubectl get cs
# 查看所有命名空间的 Pod
kubectl get pods --all-namespaces
# 查看集群信息
kubectl cluster-info
6. 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-pod
6.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 --replicas=5
# 更新镜像版本
kubectl set image deployment/nginx-deployment nginx=nginx:1.21
# 回滚到上一个版本
kubectl rollout undo deployment/nginx-deployment
6.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-port>
7. 企业级应用部署实战
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: 10Gi
7.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: 5
8. 监控与日志管理
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-stack
8.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>
</source>
9. 持续集成与持续部署
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:
- master
9.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.yaml
10. 安全配置最佳实践
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: 3306
10.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.io
11. 故障排查与性能优化
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 --image=busybox --rm -it --restart=Never -- ping <service-name>
11.2 性能优化建议
- 资源请求和限制配置 :
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- 节点亲和性配置 :
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
- HPA 自动扩缩容 :
kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=1 --max=10
12. 生产环境部署检查清单
在将应用部署到生产环境前,务必完成以下检查:
- [ ] 所有容器镜像都有明确的版本标签
- [ ] 配置了正确的资源请求和限制
- [ ] 设置了健康检查探针
- [ ] 配置了日志收集和监控
- [ ] 网络策略和安全策略已就绪
- [ ] 备份和恢复方案已测试
- [ ] 灾难恢复流程已文档化
- [ ] 团队成员都经过相关培训
这套 Docker + K8s 教程涵盖了从基础概念到企业级实战的完整路径,配合提供的课件资料,可以帮助 Linux 运维工程师系统性地掌握云原生技术栈。建议按照章节顺序逐步实践,每个技术点都要亲手操作验证,遇到问题时参考排查指南进行调试。
更多推荐
所有评论(0)