需求背景

搭建 Minikube 本地 K8s 环境,学习容器编排、服务发现、配置管理,部署多容器应用(前端 + 后端 + 数据库)并验证其运行机制。

实现步骤

  1. 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(自动打开浏览器)
  1. 应用部署清单(多容器应用)
  • 创建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  # 允许外部访问
  1. 部署与验证
  • 部署应用:kubectl apply -f app-deployment.yaml
  • 查看部署状态:kubectl get pods
  • 访问前端服务:minikube service web-frontend(自动获取 NodePort 并打开访问地址)
  • 查看日志:kubectl logs <pod-name>(替换为实际 Pod 名称)
  1. 扩展操作
  • 水平扩展:kubectl scale deployment api-service --replicas=3
  • 滚动更新:修改镜像版本后执行kubectl apply -f app-deployment.yaml
  • 配置管理:使用 ConfigMap 存储非敏感配置,Secret 存储密码等敏感信息