久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

基于Kubernetes和Docker構(gòu)建微服務(wù)之路

 快讀書(shū)館 2018-01-27

隨著本文逐步學(xué)習(xí)使用Kubernetes開(kāi)源平臺(tái)和Docker創(chuàng)建用于構(gòu)建微服務(wù)的持續(xù)交付配置,。


在我之前的一篇文章中,,描述了一個(gè)用Docker和Jenkins構(gòu)建微服務(wù)的持續(xù)交付配置的例子。 這是一個(gè)簡(jiǎn)單的配置,,只使用Docker Pipeline Plugin來(lái)構(gòu)建和運(yùn)行帶有微服務(wù)的容器,。 這個(gè)解決方案有一個(gè)很大的缺點(diǎn) - 我們不得不鏈接所有的容器,以提供部署在這些容器內(nèi)的微服務(wù)之間的通信,。 今天,,我將向您展示一個(gè)聰明的解決方案,幫助我們避免這個(gè)問(wèn)題 - Kubernetes,。


原理


Kubernetes是一個(gè)最初是由Google設(shè)計(jì)的開(kāi)源平臺(tái),,用于在主機(jī)集群之間自動(dòng)部署,、擴(kuò)展和運(yùn)行應(yīng)用程序容器,提供以容器為中心的基礎(chǔ)架構(gòu),。 它具有許多對(duì)于在生產(chǎn)中運(yùn)行的應(yīng)用程序特別有用的功能,,如服務(wù)命名和發(fā)現(xiàn)、負(fù)載均衡,、應(yīng)用程序運(yùn)行狀況檢查,、橫向彈性伸縮和滾動(dòng)更新等。 在進(jìn)入例子之前,,我們應(yīng)該知道Kubernetes的幾個(gè)重要概念,。

Pod - Kubernetes的基本單元,。 它可以由一個(gè)或多個(gè)容器組成,,這些容器在同一個(gè)物理主機(jī)內(nèi),并共享相同的資源,。 在pod內(nèi)部署的所有容器都可以通過(guò)localhost看到其他容器,。 每個(gè)Pod在集群中具有唯一的IP地址。


Service - 一組一起工作的Pod,。 默認(rèn)情況下,,Service在集群內(nèi)部公開(kāi),但也可以暴露在集群外部的外部IP地址上,。 我們可以使用以下四種方式之一來(lái)暴露它:ClusterIP,、NodePort、LoadBalancer和ExternalName,。


Replication Controller (RC) - 一種特定類型的Kubernetes控制器,。 它通過(guò)在集群中運(yùn)行指定數(shù)目的pod副本來(lái)處理復(fù)制和擴(kuò)展。 如果底層節(jié)點(diǎn)發(fā)生故障,,它也負(fù)責(zé)替換失敗Pod,。


Kubernetes集群的高可用配置不是一件容易的任務(wù)。 幸運(yùn)的是,,有一個(gè)工具可以讓本地運(yùn)行Kubernetes更簡(jiǎn)單 - Minikube,。 Minikube可以在虛擬機(jī)內(nèi)部運(yùn)行單節(jié)點(diǎn)集群,這對(duì)于想要嘗試的開(kāi)發(fā)人員來(lái)說(shuō)非常重要,。 開(kāi)始真的很簡(jiǎn)單,,對(duì)于Windows上的例子,您必須下載minikube.exe和kubectl.exe,,并將它們添加到PATH環(huán)境變量中,。 然后,您可以使用minikube start命令從命令行啟動(dòng)它,,并通過(guò)調(diào)用kubectl命令來(lái)使用幾乎所有的Kubernetes功能,。 命令行選項(xiàng)的另一種選擇是Kubernetes Dashboard,。 它可以通過(guò)調(diào)用minikube儀表板命令啟動(dòng)。 我們可以從UI儀表板創(chuàng)建,,更新或刪除部署,,還可以列出并查看所有Pod、Service,、Ingress,、RC等的配置。如下圖所示是Kubernetes Dashboard,,其中包含例子的部署列表:


應(yīng)用


我們的例子中的微服務(wù)體系結(jié)構(gòu)的概念與我在本文開(kāi)頭提到的有關(guān)Docker和Jenkins的持續(xù)交付的文章中的概念非常相似,。 例子也有Account和Customer的微服務(wù), Customer Service在搜索Customer帳戶的同時(shí)與Customer Service進(jìn)行交互,。 我們不使用網(wǎng)關(guān)(Zuul)和發(fā)現(xiàn)(Eureka)Spring Boot服務(wù),,因?yàn)槲覀冊(cè)贙ubernetes中內(nèi)置這些機(jī)制。 這是一張圖解說(shuō)明所提出解決方案的架構(gòu),。 每個(gè)微服務(wù)的pod由兩個(gè)容器組成:第一個(gè)是微服務(wù)應(yīng)用程序,,第二個(gè)是Mongo數(shù)據(jù)庫(kù)。 Account和Customer的微服務(wù)都有自己的數(shù)據(jù)庫(kù)存儲(chǔ)所有的數(shù)據(jù),。 每個(gè)Pod都是作為服務(wù)暴露的,,并且可以通過(guò)在Kubernetes上的名字進(jìn)行搜索。 我們還配置Kubernetes Ingress,,它充當(dāng)我們微服務(wù)的網(wǎng)關(guān),。

此例子的源代碼在GitHub上提供。 它由兩個(gè)模塊組成:Account Service和Customer Service,。 它基于Spring Boot框架,,但不使用除Feign客戶端之外的任何Spring云項(xiàng)目。 這里是Account Service的dockerfile,。 我們使用一個(gè)小的openjdk image - alpine,。 因此,使用標(biāo)準(zhǔn)的openjdk作為base image時(shí),,我們的結(jié)果image大約有120MB而不是?650MB,。

FROM openjdk:alpine

MAINTAINER Piotr Minkowski

ADD target/account-service.jar account-service.jar

ENTRYPOINT ['java', '-jar', '/account-service.jar']

EXPOSE 2222


為了啟用MongoDB支持,我將spring-boot-starter-data-mongodb依賴關(guān)系添加到了pom.xml中,。 我們還必須提供連接數(shù)據(jù)到application.yml并用@Document注釋實(shí)體類,。 最后,聲明存儲(chǔ)庫(kù)接口擴(kuò)展MongoRepository,,其中實(shí)現(xiàn)了基本的CRUD方法,。 我們添加兩個(gè)自定義查找方法:

public interface AccountRepository extends MongoRepository {

   public Account findByNumber(String number);

   public List findByCustomerId(String customerId);

}


在Customer Service中,我們打算從Account Service調(diào)用API方法,。 這是聲明式REST客戶端@FeignClient聲明,。 所有具有Account Service的Pod在服務(wù)名稱和默認(rèn)服務(wù)端口2222下均可用,。此類設(shè)置是Kubernetes上服務(wù)配置的結(jié)果。 我將在下一節(jié)中對(duì)其進(jìn)行描述,。


@FeignClient(name = 'account-service', url = 'http://account-service:2222')

public interface AccountClient {

   @RequestMapping(method = RequestMethod.GET, value = '/accounts/customer/{customerId}')

   List getAccounts(@PathVariable('customerId') String customerId);

}

我們的微服務(wù)的docker image可以使用下面的命令來(lái)構(gòu)建,。 構(gòu)建之后,您應(yīng)該將該image推送到docker hub 或您的registry,。 在下一節(jié)中,,我將介紹如何在Kubernetes上使用它們。 所描述的微服務(wù)的Docker鏡像也可以在我的Docker Hub公共存儲(chǔ)庫(kù)上用作piomin / account-service和piomin / customer-service,。

docker build -t piomin/account-service .

docker push piomin/account-service


部署


您可以使用kubectl運(yùn)行命令,、Minikube dashboard或使用kubectl create命令的YAML配置文件在Kubernetes上創(chuàng)建部署。 我將向您展示如何從YAML配置文件創(chuàng)建所有資源,,因?yàn)槲覀冃枰徊絼?chuàng)建多容器部署,。 這是Account Service的部署配置文件。 我們必須提供部署名稱,,image名稱和暴露端口,。 在副本屬性中,,我們正在設(shè)置創(chuàng)建的pod的請(qǐng)求數(shù)量,。

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

 name: account-service

 labels:

   run: account-service

spec:

 replicas: 1

 template:

   metadata:

     labels:

       run: account-service

   spec:

     containers:

     - name: account-service

       image: piomin/account-service

       ports:

       - containerPort: 2222

         protocol: TCP

     - name: mongo

       image: library/mongo

       ports:

       - containerPort: 27017

         protocol: TCP


我們正在通過(guò)運(yùn)行下面的命令來(lái)創(chuàng)建新的部署。 相同的命令用于創(chuàng)建Service和ingress,。 只有YAML文件格式不同:

kubectl create -f deployment-account.yaml


現(xiàn)在,,我們來(lái)看看Service配置文件。 我們已經(jīng)創(chuàng)建了部署,。 如您所見(jiàn),,dashboard image已從Docker Hub中取出; pod和副本集已經(jīng)創(chuàng)建。 現(xiàn)在,,我們想在外面暴露我們的微服務(wù),。 這就是為什么需要Service。 我們還在其默認(rèn)端口上公開(kāi)Mongo數(shù)據(jù)庫(kù),,以便能夠連接數(shù)據(jù)庫(kù)并從MongoDB客戶端創(chuàng)建集合,。

kind: Service

apiVersion: v1

metadata:

 name: account-service

spec:

 selector:

   run: account-service

 ports:

   - name: port1

     protocol: TCP

     port: 2222

     targetPort: 2222

   - name: port2

     protocol: TCP

     port: 27017

     targetPort: 27017

 type: NodePort


在為Customer Service創(chuàng)建類似的配置后,我們已經(jīng)暴露了我們的微服務(wù),。在Kubernetes內(nèi)部,,它們?cè)谀J(rèn)端口(2222和3333)和服務(wù)名稱上可見(jiàn)。這就是為什么在客戶服務(wù)REST客戶端(@FeignClient)中,,我們聲明了URL http:// account-service:2222,。無(wú)論創(chuàng)建了多少個(gè)Pod,服務(wù)將始終在該URL上可用,,并且請(qǐng)求在所有Pod之間進(jìn)行負(fù)載均衡,。如果我們希望訪問(wèn)Kubernetes以外的每個(gè)服務(wù),,例如,在Web瀏覽器中,,我們需要使用在容器默認(rèn)端口下方可見(jiàn)的端口來(lái)調(diào)用它 - 在該Account Service的示例中,,它是31638端口,并且對(duì)于Customer Service,, 31171端口,。如果您在Windows上運(yùn)行Minikube,則您的Kubernetes可能位于192.168.99.100地址下,,因此您可以嘗試使用URL http://192.168.99.100:31638/accounts呼叫帳戶服務(wù),。在進(jìn)行這樣的測(cè)試之前,您需要在Mongo數(shù)據(jù)庫(kù)和用戶微型/微型(在application.yml中為該服務(wù)設(shè)置)上創(chuàng)建一個(gè)集合,。



好了,,我們?cè)趦蓚€(gè)不同的端口下有兩個(gè)微服務(wù),這不完全是我們所需要的,。 我們需要一些IP可用的網(wǎng)關(guān),,通過(guò)匹配請(qǐng)求路徑來(lái)代理我們的請(qǐng)求,以及確切的服務(wù),。 幸運(yùn)的是,,Kubernetes也提供這樣的選項(xiàng)。 這個(gè)解決方案是Ingress,。 這里是YAML入口配置文件,。 定義了兩個(gè)規(guī)則,第一個(gè)是Account Service,,第二個(gè)是Customer Service,。 我們的網(wǎng)關(guān)在micro.allhost名稱和默認(rèn)HTTP端口下可用。

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

 name: gateway-ingress

spec:

 backend:

   serviceName: default-http-backend

   servicePort: 80

 rules:

 - host: micro.all

   http:

     paths:

     - path: /account

       backend:

         serviceName: account-service

         servicePort: 2222

     - path: /customer

       backend:

         serviceName: customer-service

         servicePort: 3333


為了使網(wǎng)關(guān)能夠正常工作,,最后一件事就是將下列條目添加到系統(tǒng)主機(jī)文件(Linux的/ etc / hosts和windows的C: Windows  System32  drivers  etc  hosts)中,。 現(xiàn)在,您可以嘗試從您的網(wǎng)絡(luò)瀏覽器調(diào)用http://micro.all/accounts或http://micro.all/customers/ {id},,該帳戶在后臺(tái)也調(diào)用帳戶服務(wù),。

[MINIKUBE_IP] micro.all


總之,Kubernetes是微服務(wù)集群管理和編排的好工具,。 它在快速發(fā)展中,,仍然是一個(gè)比較新的解決方案。 它可以與Spring Boot堆棧一起使用,,或者作為Spring Cloud Netflix OSS(這似乎是目前最流行的微服務(wù)解決方案)的替代品,。 它還有一個(gè)UIdashboard ,您可以在其中管理和監(jiān)視所有資源,。 生產(chǎn)級(jí)配置可能比使用Minikube的單一主機(jī)開(kāi)發(fā)配置更復(fù)雜,,但我不認(rèn)為這是針對(duì)Kubernetes,。


譯者介紹:

樓煒 Jet,云技術(shù)社區(qū)金牌翻譯,,現(xiàn)任云星數(shù)據(jù)副總裁兼研發(fā)中心總監(jiān),,業(yè)內(nèi)資深的云計(jì)算專家, 10年云計(jì)算經(jīng)驗(yàn),,7年+ IaaS,、PaaS經(jīng)驗(yàn)。著有: 《企業(yè)級(jí)IaaS架構(gòu)的深度解析》,、《企業(yè)級(jí)私有云構(gòu)建的架構(gòu)師陣型及架構(gòu)策略》等文章


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多