在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
直接上代碼:
1 apiVersion: v1
2 kind: ReplicationController
3 metadata:
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
還是直接上代碼
1 apiVersion: v1
2 kind: Service
3 metadata:
4? ?name: mysql
5 spec:
6? ?ports:
7? ?- name: mysql-svc
8? ? ?port: 3306
9? ? ?targetPort: 3306
10? ? ?nodePort: 31101
11? ?selector:
12? ? ?app: mysql
13? ?type: NodePort
創建mysql Service對象的結果
可以看到,mysql Service對象也已經啟動成功了。
然后就可以自己訪問mysql的服務看看
本文轉自super李導51CTO博客,原文鏈接:?http://blog.51cto.com/superleedo/2050208,如需轉載請自行聯系原作者