{%hackmd BJzAwtWvp %} # spring boot k8s Example 101 * 參考資料 [[Kubernetes]部署Spring Boot 應用程式到 Kubernetes|Deploy spring boot on Kubernetes(GKE)](https://medium.com/k8s%E7%AD%86%E8%A8%98/kubernetes-%E9%83%A8%E7%BD%B2spring-boot-%E6%87%89%E7%94%A8%E7%A8%8B%E5%BC%8F%E5%88%B0-kubernetes-deploy-spring-boot-on-kubernetes-gke-cdb87cf81038) [Day23 Kubernetes (Kubernetes on Docker Desktop & Pod Lifetime)](https://ithelp.ithome.com.tw/articles/10247441) [Kubernetes on Docker Desktop (Nginx Running on Pods)](https://www.youtube.com/watch?v=dyaEzaDS7NQ) 1. 使用spring initializer創立新的project,引入web、Actuator、DevTools ![](https://i.imgur.com/ybulVV4.png) 2. 打開pom檔設定包出jar檔的名稱 ![](https://i.imgur.com/QVDYy7v.png) 3. 寫一個測試的controller ![](https://i.imgur.com/85aAujN.png) 4. 啟動localhost測試 ![](https://i.imgur.com/O7EovaQ.png) 5. 建立dockerfile ![](https://i.imgur.com/tiUdtLf.png) 6. run 右側maven底下的clean,再接著run package就會產生如左側的target資料夾,其中就會有我們需要的jar檔 ![](https://i.imgur.com/1Bd2BWK.png) 7. 申請並登入dockerhub,並到設定的security中產生token,以便安全登入 ![](https://i.imgur.com/jKyLPTX.png) 8. 開啟命令提示字元(cmd)輸入 ``` docker login -u [username] ``` ![](https://i.imgur.com/kStOToS.png) 9. 移動到專案位置確認有dockerfile並開啟cmd ![](https://i.imgur.com/BRlYOqV.png) 10. 輸入docker build -t docker-demo . ![](https://i.imgur.com/xbcyeBu.png) 11. 推送(push)鏡像檔(images)到DockerHub 輸入指令 ``` docker tag docker-demo '你的docker帳戶'/docker-demo docker push '你的docker帳戶'/docker-demo ``` ![](https://i.imgur.com/lAjJfBV.png) 12. 接著我們嘗試把本地的移除,重新拉剛剛推上去的images(鏡像檔)試試 移除輸入 ``` docker rmi "你的名稱"/docker-demo docker-demo ``` 查看列表發現已經移除 ![](https://i.imgur.com/cT2hJij.png) 再輸入以下指令把剛剛推上去的拉下來,意思是直接run,如果沒有的話,把他拉下來 ``` docker run -p 8080:8080 [你的docker帳戶]/docker-demo ``` ![](https://i.imgur.com/BYnaqAp.png) 成功後就可以直接輸入網址試試看 http://localhost:8080//test-docker 13. 建立k8s需要的yaml設定檔 docker-k8s-demo-deployment.yaml ``` apiVersion: apps/v1 kind: Deployment metadata: name: docker-k8s-demo-deployment labels: app: docker-k8s-demo spec: replicas: 1 selector: matchLabels: app: docker-k8s-demo template: metadata: labels: app: docker-k8s-demo spec: containers: - name: docker-k8s-demo image: vincentkai/docker-demo env: - name: "PORT" value: "8080" ``` docker-k8s-demo-service.yaml ``` apiVersion: v1 kind: Service metadata: name: docker-k8s-demo-service spec: type: LoadBalancer selector: app: docker-k8s-demo ports: - protocol: TCP port: 60000 targetPort: 8080 ``` --- 如果使用GCP提供的GKE 14. 打開GCP找到Kubernetes Engine->叢集 ![](https://i.imgur.com/Tvf099k.png) 點擊建立 未完............... --- 如果使用docker desktop的k8s 14. 打開docker desktop,到setting中的kubernetes中把它啟動,再開啟cmd輸入以下指定確認是否真的啟動了 ``` kubectl version --short kubectl get all ``` ![](https://i.imgur.com/2JkpPtE.png) 15. 首先在cmd中輸入以下指另,確認沒有目前任何資源 ``` kubectl get pod ``` ![](https://i.imgur.com/DCDBBO8.png) 16. 接著將剛剛寫好的兩個部屬yaml檔都推上去,並查詢是否成功。 輸入以下指令 ``` kebectl apply -f [部屬的檔案名稱] kebectl get pod kebectl get all ``` ![](https://i.imgur.com/iivjeYh.png) 17. 在網址輸入http://localhost:60000/test-docker 測試是否正常 ###### tags: `k8s` `docker` `spring boot` `spring`