javascript
Spring Boot微服务,Docker和Kubernetes研讨会–第3部分
在之前的文章中,我們為使用Docker和Spring Boot的訂單管理系統構建了一些微服務(訂單服務,產品服務,客戶服務)。 我們使用Netflix庫來管理,發現和平衡微服務。
管理這些微服務及其多個容器可能會有些棘手; 特別是在可伸縮性,可觀察性,安全性,監視和管理資源方面。 因此,我們將使用Kubernetes進行容器編排。 單擊此處以了解有關Kubernetes的更多信息。
為了入門,我們可以在筆記本電腦中使用本地Kube集群,也可以使用AWS / Azure / GCP之類的云提供商。
本地Kube集群:
我們可以使用Minikube或Docker for Desktop來設置本地kube集群。 請按照它們各自的文檔將它們安裝在筆記本電腦/計算機上。 在本教程中,我們將在Mac上使用Docker for Desktop,因此,如果使用的是Docker,請遵循此文檔進行設置。
使用Amazon Elastic Kubernetes服務(EKS) :
您還可以在EKS上設置集群以部署應用程序,因為您將需要在AWS上使用一個帳戶( https://aws.amazon.com/ )。
登錄到AWS后,轉到EKS并創建一個集群。 閱讀此文檔以設置集群。
Kubectl:
KubeCtl是一個命令行界面,用于針對Kubernetes集群運行命令。 如果您使用的是Docker for Desktop,則已經包含并配置了Docker以連接到本地Kubernetes服務器,否則請使用此文檔在筆記本電腦上設置KubeCtl。
為了讓kubectl找到并訪問Kubernetes集群,它需要一個kubeconfig文件。 默認情況下,kubectl配置位于:
~/.kube /config .通過獲取集群狀態來檢查kubectl是否已正確配置:
kubectl cluster-info要在EKS中管理集群,請使用此文檔來設置kubeconfig。
在Kube集群中部署應用程序:
現在,我們已經成功創建了一個kube集群,并配置了kubectl來管理和部署到該集群中,我們準備將應用程序部署到該集群中。
在之前的博客中,我們創建了3個在Docker容器中運行的微服務。 我們可以使用任何這些微服務的映像來部署到kube集群中。 如果我們使用本地kube集群(用于桌面的Docker或MiniKube),則可以使用本地docker映像部署到集群。
(要使本地映像正常工作,我們需要在我們的部署定義中將一個名為“ imagePullPolicy”的屬性設置為“ Never”。)
對于EKS,我們需要將映像保存在注冊表中,我們現在可以使用docker hub public repo,因此我們不必擔心通過注冊表進行身份驗證。 如果必須使用ECR(Amazon Elastic Container Registry),則需要為運行集群中節點的實例授予ECR拉權限,為簡單起見,我們暫時不介紹該部分。
建立本地形象
為了在本地kube集群中部署應用程序,我們將在筆記本電腦中創建其docker映像。
因此,如果您擁有先前博客中使用的任何服務的源代碼,我們將使用它們。
–轉到productService的根文件夾,然后運行docker build命令:
這將創建帶有標簽“ productservice”的本地圖像。 通過運行該圖像來測試該圖像是否工作正常。
docker run -p 8001:8001 productservice:latest 此服務需要訪問本地Postgres數據庫服務器,因此無法啟動。 為簡單起見,讓我們快速更改應用程序并使用內存數據庫(H2)。
對build.gradle進行以下更改:(用H2替換postgres depenendcy)
并替換spring數據源以在application.properties中使用H2:
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.h2.console.enabled= false完成這兩項更改后,該應用程序將可以很好地啟動和運行。 這次重建圖像(確保您清除了舊標簽)并運行它。 使用以前的博客來測試端點。 (創建和獲取產品@ / products)
創建deployment.yaml
要將映像部署到kube,我們需要一個部署定義(如果只想安裝Pod,則需要一個Pod定義)。
確保使用在“名稱”中創建的本地圖像的標簽。
將以上文件另存為product-service-deployment.yaml,并從保存文件的位置運行以下命令。
kubectl apply -f product-service-deployment.yaml這將在運行容器內的應用程序的集群中創建一個Pod。 現在,此應用程序正在kube集群中的pod內運行,并已分配了IP地址,該IP地址只能從集群內部訪問。 我們可以使用此IP地址從群集內部訪問此容器,但是由于容器是易變的(可以按比例放大和縮小,重新創建和銷毀),我們將需要一個接口或服務來通過“服務名稱”進行訪問重新創建廣告連播時,該設置不會更改。 該“服務”還將充當負載平衡器,用于將請求分發到Pod。
創建一個Kubernetes服務:
現在,我們將在Kubernetes中創建一個可用于訪問Pod的服務。 在此處閱讀有關Kubernetes服務的更多信息。 對于此博客,我們將創建“ ClusterIP”類型的服務,該服務可從群集訪問。
在名稱為product-service.yaml的同一根文件夾中創建一個文件,其內容如下:
要創建此服務,請運行以下命令:
kubectl apply -f product-service.yaml運行kubectl get services命令以查看服務是否成功創建:
kubectl get svc您應該在其中看到帶有分配的ClusterIP的服務“ product-service”。
從筆記本電腦訪問該服務。
要從我們的筆記本電腦訪問此服務,我們將使用稱為“ kube端口轉發”的命令,運行以下命令:
現在,我們可以使用http:// localhost:8001 / products訪問該服務。
您可以通過創建一些產品并檢索它們來測試產品服務,如上一個博客所述。
因此,現在我們的應用程序在本地kube集群中運行。
在下一系列博客中,我們將使用外部數據庫將更多的應用程序部署到集群中,并具有功能齊全的微服務應用程序。 我們還將學習內部服務如何相互通信以及如何使用Ingress Controller將其暴露給外部世界。
翻譯自: https://www.javacodegeeks.com/2019/11/spring-boot-microservices-docker-and-kubernetes-workshop-part3.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Spring Boot微服务,Docker和Kubernetes研讨会–第3部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 居家办公每5分钟抓拍一次员工人脸居家办公
- 下一篇: AITO 问界 CARE 服务战略明日发