需求背景
搭建 Minikube 本地 K8s 环境,学习容器编排、服务发现、配置管理,部署多容器应用(前端 + 后端 + 数据库)并验证其运行机制。
实现步骤
- Minikube 环境搭建
- 安装 Minikube 与 kubectl:
# 安装Minikube(Linux)curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudo install minikube-linux-amd64 /usr/local/bin/minikube# 安装kubectlcurl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"sudo install kubectl /usr/local/bin/
- 启动集群:minikube start --cpus=2 --memory=4096(分配 2 核 CPU 和 4GB 内存)
- 启用插件(可选):
minikube addons enable dashboard # 启用仪表盘minikube addons enable metrics-server # 启用 metrics-server
- 访问仪表盘:minikube dashboard(自动打开浏览器)
- 应用部署清单(多容器应用)
- 创建app-deployment.yaml:
# 数据库部署apiVersion: apps/v1kind: Deploymentmetadata: name: postgresspec: replicas: 1 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:14 env: - name: POSTGRES_DB value: appdb - name: POSTGRES_USER value: appuser - name: POSTGRES_PASSWORD value: apppass ports: - containerPort: 5432 volumeMounts: - name: postgres-data mountPath: /var/lib/postgresql/data volumes: - name: postgres-data persistentVolumeClaim: claimName: postgres-pvc# 数据库PVCapiVersion: v1kind: PersistentVolumeClaimmetadata: name: postgres-pvcspec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi# 后端API部署apiVersion: apps/v1kind: Deploymentmetadata: name: api-servicespec: replicas: 2 selector: matchLabels: app: api-service template: metadata: labels: app: api-service spec: containers: - name: api-service image: my-api:latest env: - name: DB_HOST value: postgres - name: DB_USER value: appuser - name: DB_PASS value: apppass ports: - containerPort: 8080# 前端部署apiVersion: apps/v1kind: Deploymentmetadata: name: web-frontendspec: replicas: 1 selector: matchLabels: app: web-frontend template: metadata: labels: app: web-frontend spec: containers: - name: web-frontend image: my-frontend:latest ports: - containerPort: 80# 服务定义apiVersion: v1kind: Servicemetadata: name: postgres-servicespec: selector: app: postgres ports: - port: 5432 targetPort: 5432 clusterIP: None # Headless服务apiVersion: v1kind: Servicemetadata: name: api-servicespec: selector: app: api-service ports: - port: 8080 targetPort: 8080 type: ClusterIPapiVersion: v1kind: Servicemetadata: name: web-frontendspec: selector: app: web-frontend ports: - port: 80 targetPort: 80 type: NodePort # 允许外部访问
- 部署与验证
- 部署应用:kubectl apply -f app-deployment.yaml
- 查看部署状态:kubectl get pods
- 访问前端服务:minikube service web-frontend(自动获取 NodePort 并打开访问地址)
- 查看日志:kubectl logs <pod-name>(替换为实际 Pod 名称)
- 扩展操作
- 水平扩展:kubectl scale deployment api-service --replicas=3
- 滚动更新:修改镜像版本后执行kubectl apply -f app-deployment.yaml
- 配置管理:使用 ConfigMap 存储非敏感配置,Secret 存储密码等敏感信息