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