minikube Kubernetes (k8s) 部屬網站

先前我們在 docker 建置了 一個 Image 檔案 根據 docker file 與對應的檔案。那如果我們要在 minikube 部屬一個網站需要 就必須要把外部 建立好的 Image 加入到 minikube 的 Docker runtime,不然會找不到。

✅ 總結流程:

  1. minikube image load my-custom-nginx:latest
  2. kubectl apply -f deployment.yaml
  3. kubectl apply -f service.yaml
  4. minikube service my-nginx-servicehttp://$(minikube ip):30080

docker 建立Image 可參考(link)

1. 把 Image 匯入至 minikube

方法 1

docker save my-custom-nginx:latest -o my-custom-nginx.tar
minikube image load my-custom-nginx:latest

方法 2

minikube image load my-custom-nginx:latest
使用 Minikube 內置的 Docker
minikube ssh
minikube images
驗證是否設置成功
docker ps

如果顯示的是 Minikube 中的容器而不是你主機的容器,說明設置成功了。

之後你就可以構建鏡像並直接在 Minikube 中使用了:

docker build -t my-image .

記得在 Kubernetes 部署文件中設置:

imagePullPolicy: Never

2. 在Minikube 中建立網站

在 local 建立兩個檔案分別是 deployment 與 service 用

Deployment yaml(用來管理 Pod)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-nginx
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: nginx
        image: my-custom-nginx:latest
        imagePullPolicy: Never        # ⬅️ 這個非常關鍵!
        ports:
        - containerPort: 80
Service yaml(用來對外暴露端口)
apiVersion: v1
kind: Service
metadata:
  name: my-nginx-service
spec:
  type: NodePort  # NodePort 在 minikube 下方便測試,實際生產會用 LoadBalancer 或 Ingress
  selector:
    app: my-nginx
  ports:
  - protocol: TCP
    port: 80        # 服務端口(Cluster 內部)
    targetPort: 80  # Pod 內部 containerPort
    nodePort: 30080 # minikube 主機對外端口,30000~32767 之間
套用配置
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

確認是否正常運行

minikube service my-nginx-service

查 Service port

kubectl get svc