天天看點

在kubernetes中部署tomcat與mysql叢集

在kubernetes中部署tomcat與mysql叢集之前必須要有以下這些基礎:

1. 已安裝、配置kubernetes

2. 叢集中有tomcat與mysql容器鏡像

3. 有docker基礎

具體步驟

部署tomcat

建立tomcat RC對象

我們想要在kubernetes叢集中配置tomcat伺服器,首先要保證叢集中的節點上有tomcat鏡像,鏡像可以從docker Hub中拉取,也可以放在自己的私有倉庫中。這在我之前的部落格中講過,這裡就不詳述了。

要部署tomcat服務,我們需要做兩件事,一是建立RC(Replication Controller),二是建立Service。RC是kubernetes中的副本控制器,也就是說,RC負責自動部署容器化應用。Service是我們通路tomcat服務的入口位址,我們是通過Service來對該服務就行通路的。

建立RC與Service對象,我這裡用的是建立yaml檔案的方式。yaml檔案中的内容是聲明式的。這些聲明讓kubernetes做你想要它做的事情。聲明與指令有所不同,聲明是告訴它你的需要是什麼,而不涉及具體的實作的步驟,而指令,如linux中的ls,你是告訴它去做什麼。聲明與指令是不同的,請自己體會。話不多說了,上代碼:

此檔案名為myweb-rc1.yaml

這裡我簡單的說明一下此yaml檔案聲明了什麼:

  1 apiVersion: v1      //描述RC對象的版本是v1

  2 kind: ReplicationController    //我現在在聲明RC對象

  3 metadata:     //metadata中的是對此RC對象描述資訊

  4   name: myweb      //此RC對象在default命名空間中名為myweb,同一個命名空間中的命名一定是不同的

  5 spec:     //spec中是對RC對象的具體描述

  6   replicas: 5    //我要建立5個副本,機關當然是pod

  7   selector:      //選擇器,用來選擇對象的

  8     app: myweb    //我選擇了标簽為app: myweb的pod

  9   template:     //模版,以下用來描述建立的pod的模版

 10     metadata:   //對pod模版描述的中繼資料

 11       labels:      //給以下的東西打上标簽,以讓selector來選擇

 12         app: myweb   //給pod模版打上app: myweb這樣的标簽

 13     spec:             //對pod模版的具體描述

 14       containers:         //以下就是要放入pod模版中的容器了

 15       - image: kubeguide/tomcat-app:v1    //選擇鏡像

 16         name: myweb         //容器名

 17         resources:           //給該容器配置設定的資源大小

 18           limits:

 19             cpu: "2"

 20             memory: 4Gi

 21         ports:         //容器端口号

 22         - containerPort: 8080         

 23         env:          //給該容器設定環境變量,這裡就可以将mysql與我們的tomcat連接配接

 24         - name: MYSQL_SERVICE_HOST

 25           value: 'mysql'

 26         - name: MYSQL_SERVICE_PORT

 27           value: '3306'

仔細研究就發現其實yaml檔案的規範還是比較嚴謹的。它是通過縮進與對齊的方式來表達了具體的資訊的。比如一個metadata,在我這個yaml檔案中就有兩個。實際上通過縮進與對齊,我們就可以了解到,第一個metadata是對這個RC對象進行描述的中繼資料,而第二個metadata因為縮進了,實際上它是對pod模版進行描述的中繼資料。當然是不一樣的。spec也有兩個,同樣的道理,大家可以自行分析。

建立tomcat RC對象的結果

如下,我截了個屏:

可以看到,我在建立完了tomcat的RC對象之後,它就立馬自動部署了5個pod,這5個pod已經健康的跑起來了。為什麼是建立5個pod?因為我在yaml檔案中聲明了我需要5個副本。

建立tomcat Service對象

單單建立了RC對象還不行,雖然RC對象為我們自動部署了5個pod,但是我們還需要一個Service對象來作為入口位址來對建立好的tomcat進行通路,是以,接下來我們的任務就是建立Service對象。

此檔案名為myweb-svc1.yaml。還是直接上代碼:

  1 apiVersion: v1

  2 kind: Service   //對象是Service了哦

  3 metadata:

  4   name: myweb

  5 spec:  

  6   ports:

  7   - name: myweb-svc         //端口名稱,Service是必須指定端口名稱的

  8     port: 8080          //Service的端口号

  9     targetPort: 8080        //容器暴露的端口号

 10     nodePort: 31111       //node的真實端口号

 11   selector:

 12     app: myweb     //Service選擇了标簽為app: myweb的pod

 13   type: NodePort

重點在于三個端口的差別,容器有端口,Service有端口,node也有真實的端口号,這裡我們将這三者關聯起來,在一會通路的時候會看出門道。是以,我們就拿結果說話吧。

建立tomcat Service對象的結果

大家可以看到,我已經建立好了名為myweb的Service。而且這個Service也已經通過selector選擇了剛才建立好的5個pod。是以我可以通過Service來通路tomcat的服務了。我這裡使用指令行來示範。

通路服務的方式

我們可以通過兩種方式來通路已經建立好的服務。

1. 叢集内部通路服務

我們可以通過Service IP + Service端口号的方式來從叢集内部通路已經建立好的服務,是以,我們來看看tomcat Service的IP與端口号。

2. 叢集外部通路服務

從叢集的外部我們可以通過node IP + node端口号的方式來對服務進行通路。pod實際上已經分在了不同的node中了,我們隻用找到其中一個pod所在的node就行了。 

部署mysql

如果你能将tomcat部署成功了,那麼部署mysql就沒有什麼好講的了。照前面做就行了。

建立mysql RC對象

我将此RC對象命名為mysql-rc1.yaml

直接上代碼:

  2 kind: ReplicationController

  4   name: mysql

  5 spec:

  6   replicas: 1

  7   selector:

  8     app: mysql

  9   template:

 10     metadata:

 11       labels:

 12         app: mysql

 13     spec:

 14         containers:

 15         - image: img.reg.3g:15000/mysql:5.7.13

 16           name: mysql

 17           resources:

 18             limits:

 19               cpu: "2"

 20               memory: 4Gi

 21           ports:

 22           - containerPort: 3306

 23           env:

 24           - name: MYSQL_ROOT_PASSWORD

 25             value: "123456"

不同之處在于建立mysql的RC對象yaml檔案時,注入了一個name為MYSQL_ROOT_PASSWORD的環境變量,這個是給mysql資料庫設定密碼,這個環境變量的注入是必須的,如果沒有此環境變量,雖然RC可以被建立成功,但是系統是無法啟動mysql容器的。

建立mysql RC對象的結果

建立mysql Service對象

同樣道理,mysql也需要一個通路入口位址。建立的Service yaml檔案名為mysql-svc1.yaml

還是直接上代碼

  2 kind: Service

  7   - name: mysql-svc

  8     port: 3306

  9     targetPort: 3306

 10     nodePort: 31101

 12     app: mysql

建立mysql Service對象的結果

可以看到,mysql Service對象也已經啟動成功了。

然後就可以自己通路mysql的服務看看

本文轉自super李導51CTO部落格,原文連結: http://blog.51cto.com/superleedo/2050208,如需轉載請自行聯系原作者

繼續閱讀