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

但不小心踩到雷,想想就把主要的步驟先列出來,以免日子久了就忘了被雷的部份。
會被雷的有兩部份
- minikube現在的版本會預設使用
docker
driver,這部份要做registry很麻煩,所以用virtualbox
較為容易。 - 如果已經產生了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
這裡有兩個要點
- 要讓minikube啟用registry
> minikube addons enable registry
🔎 Verifying registry addon...
🌟 The 'registry' addon is enabled
- 要讓外部的OS可以連到minikube中的registry
在docker for desktop
中設定insecure-registries

要將$(minikube ip):5000設定為insecure-registries
Check And Build Image
再來就可以直接checkout後build
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
要驗證是否正常
- 本機的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
- minikube裡也要能看到
使用curl去看catalog,如果回傳如下就是正常的了。
> curl http://"$(minikube ip)":5000/v2/_catalog
{"repositories":["minispring"]}
Deploy
再來就是透過kubectl
將服務加入
比較快的方式是透過寫好的yaml,現成的範例在github中可找到
> 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%