Minikube Quick Startup

前言

為了之後的準備,所以想用下列這樣的模式來做為K8S的CI/CD說明

structure

但不小心踩到雷,想想就把主要的步驟先列出來,以免日子久了就忘了被雷的部份。

會被雷的有兩部份

  1. minikube現在的版本會預設使用docker driver,這部份要做registry很麻煩,所以用virtualbox較為容易。
  2. 如果已經產生了minikube machine,要再加入insecure-registry,除非手動修改檔案,不然加在啟動參數是沒效果的。

Startup

產生一個minikube的實例(machine)。

加入driver及insecure-registry的設定

> minikube start --driver=virtualbox --insecure-registry "192.168.0.0/16"

😄  minikube v1.12.3 on Darwin 10.15.5
....
🏄  Done! kubectl is now configured to use "minikube"

Check insecure-registry

再來要檢查Insecure Registries是否正確,透過minikube ssh進入到minikube中,再用docker info來看相關資訊

> minikube ssh

$ docker info
...
 Name: minikube
...
 Registry: https://index.docker.io/v1/
 Labels:
  provider=virtualbox
...
 Insecure Registries:
  10.96.0.0/12
+  192.168.0.0/16
  127.0.0.0/8

192.168.0.0/16這一行至關重要,沒這個後面就沒什麼可談的了

Enable registry

這裡有兩個要點

  1. 要讓minikube啟用registry
> minikube addons enable registry
🔎  Verifying registry addon...
🌟  The 'registry' addon is enabled
  1. 要讓外部的OS可以連到minikube中的registry

docker for desktop中設定insecure-registries

preferences

要將$(minikube ip):5000設定為insecure-registries

Check And Build Image

再來就可以直接checkout後build

Github Source Repository

Checkout後執行gradle bootBuildImage即可

> gradle bootBuildImage

再看本機裡的docker images就可以找到minispring

> docker images --filter=reference='*spring'
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
minispring                       0.0.1-SNAPSHOT      611db4894be3        40 years ago        297MB

Push to Minikube

再來就是如何將minispring這個image送到minikube中,讓minikube可以取用。

依序執行下面兩行指令

> docker tag 611db4894be3 $(minikube ip):5000/minispring:0.0.1-SNAPSHOT
> docker push $(minikube ip):5000/minispring:0.0.1-SNAPSHOT

要驗證是否正常

  1. 本機的docker image裡要能看到
> docker images --filter=reference='*/*spring' --filter=reference='*spring'
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
192.168.99.105:5000/minispring   0.0.1-SNAPSHOT      611db4894be3        40 years ago        297MB
minispring                       0.0.1-SNAPSHOT      611db4894be3        40 years ago        297MB
  1. minikube裡也要能看到

使用curl去看catalog,如果回傳如下就是正常的了。

> curl http://"$(minikube ip)":5000/v2/_catalog
{"repositories":["minispring"]}

Deploy

再來就是透過kubectl將服務加入
比較快的方式是透過寫好的yaml,現成的範例在github中可找到

deployment.yaml
service.yaml

> kubectl create -f minispring-deployment_minikube.yaml, minispring-service.yaml
deployment.apps/minispring, service/minispring created

要注意的是deployment.yaml
其中的192.168.99.105要改為自己實例的ip.

      containers:
+      - image: 192.168.99.105:5000/minispring:0.0.1-SNAPSHOT

完成

取得service對外的port,如下面會看到是31326,直接用curl測試即可。

> kubectl get service
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP          129m
minispring   NodePort    10.106.95.97   <none>        8080:31326/TCP   3m49s
> curl http://"$(minikube ip)":31326/api/example
Success%

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料