配置Kubenetes實現Hello World

介紹

本文主要介紹如何搭建一個Mysqkl+Java Web留言板項目,JSP頁面通過JDBC直接訪問Mysql數據庫並展示數據。為了演示和簡化的目的,只要程序正確連接到了數據庫上,它就會自動完成對應Table的創建和初始化數據的準備工作。

此應用需要啟動兩個容器:Web APP容器和MySQL容器,並且WebApp容器需要訪問MySQL容器。

配置Kubenetes實現Hello World

啟動MySQL服務器

首先為MySQL服務創建一個RC定義文件:,下面給出了改文件的完成內容和解釋:

apiVersion: v1

kind: ReplicationController # 副本控制器RC

metadata:

name: mysql # RC的名稱,全局唯一

spec:

replicas: 1 # Pod副本數量

selector:

app: mysql # 符合目標的Pod擁有此標籤

template:

metadata:

labels:

app: mysql # Pod副本用戶的標籤,對應RC的Selector

spec:

containers: # Pod內容器的定義部分

- name: mysql # 容器名稱

image: mysql:5.6 # 容器對應的docker image

ports:

- containerPort: 3306 # 容器暴露的端口號

env:

- name: MYSQL_ROOT_PASSWORD # mysql容器默認密碼設置

value: "123456"

執行該文件:

kubectl create -f mysql-rc.yaml

接下來,我們用kubectl命令查看剛剛創建的RC:

[root@bigman-m2 config]# kubectl get rc

NAME DESIRED CURRENT READY AGE

mysql 1 1 1 20m

查看Pod的創建情況時,可以運行下面的命令:

[root@bigman-m2 config]# kubectl get pods

NAME READY STATUS RESTARTS AGE

mysql-xxp56 1/1 Running 0 20m

我們通過docker ps|grep mysql指令查看正在運行的容器,發現提供MySQL服務的Pod容器已經創建並正常運行了,除此之外還多創建了一個來自谷歌的pause容器,這就是Pod的根容器:

[root@bigman-s3 ~]# docker ps|grep mysql

3a07bce96aab mysql "docker-entrypoint.s…" 23 minutes ago Up 23 minutes k8s_mysql_mysql-xxp56_default_a03ab81d-0f34-11e9-8c52-1866da8c1dba_0

06f009f3886a k8s.gcr.io/pause:3.1 "/pause" 24 minutes ago Up 24 minutes k8s_POD_mysql-xxp56_default_a03ab81d-0f34-11e9-8c52-1866da8c1dba_0

後面我們創建一個與之關聯的Kubernetes Service-Mysql的定義文件mysql-svc.yaml:

apiVersion: v1

kind: Service # 表名是Kubernetes Service

metadata:

name: mysql # Service的全局唯一名稱

spec:

ports:

- port: 3306 # Service提供服務的端口號

selector: # Pod副本實例名稱

app: mysql

執行該文件:

kubectl create -f mysql-svc.yaml

運行kubectl命令,查看剛剛創建的service

[root@bigman-m2 config]# kubectl get svc

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23h

mysql ClusterIP 10.107.100.143 <none> 3306/TCP 29m

注意到Mysql服務被分配了一個值為10.107.100.143的Cluster-ip,這是一個虛擬地址,隨後,Kubernetes集群中其他新創建的Pod就可以通過Service的Cluster IP+端口號3306來連接和訪問它了。這些信息kubernetes巧妙地利用了Linux環境變量來進行存儲。

啟動Tomcat應用

上面我們定義和啟動了MySQL服務,接下來我們採用同樣的步驟,完成Tomcat應用的啟動過程。首先,創建對應的RC文件myweb-rc.yaml,內容如下:

apiVersion: v1

kind: ReplicationController

metadata:

name: myweb

spec:

replicas: 5 # 5個副本,負載均衡

selector:

app: myweb

template:

metadata:

labels:

app: myweb

spec:

containers:

- name: myweb

image: kubeguide/tomcat-app:v1

ports:

- containerPort: 8080

env:

- name: MYSQL_SERVICE_HOST # 定義環境變量,代碼中才能獲取到值

value: 'mysql'

- name: MYSQL_SERVICE_PORT # 定義環境變量,代碼中才能獲取到值

value: '3306'

有人肯定會疑惑,這裡只配置了主機名和端口,並沒有配置賬號密碼,tomcat能啟動成功嗎?原因是在於這個tomcat-app容器代碼中默認寫死了賬號密碼(root/123456)。

執行該文件:

kubectl create -f myweb-rc.yaml

查看創建好的Pod:

[root@bigman-m2 config]# kubectl get pods

NAME READY STATUS RESTARTS AGE

mysql-xxp56 1/1 Running 0 38m

myweb-ds8nv 1/1 Running 0 82m

myweb-jdtdw 1/1 Running 0 82m

myweb-rjbm9 1/1 Running 0 82m

myweb-tg6zc 1/1 Running 0 49m

myweb-v7fwf 1/1 Running 0 82m

最後創建對應的service,下面是文件內容和說明,myweb-svc.yaml:

apiVersion: v1

kind: Service

metadata:

name: myweb

spec:

type: NodePort # 表示此Service開啟了NodePort方式的外網訪問模式

ports:

- port: 8080 # Service提供服務的端口號

nodePort: 30002 # 外網訪問端口

selector:

app: myweb # Pod副本實例名稱

執行該文件:

kubectl create -f myweb-svc.yaml

查看剛才創建的Service:

[root@bigman-m2 config]# kubectl get svc

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23h

mysql ClusterIP 10.107.100.143 <none> 3306/TCP 43m

myweb NodePort 10.106.119.48 <none> 8080:30002/TCP 83m

通過瀏覽器訪問頁面

訪問地址是master節點的30002端口,如http://10.242.10.22:30002/demo/index.jsp

配置Kubenetes實現Hello World

dashboard界面查看

配置Kubenetes實現Hello World

相關操作

命令行登錄容器

顯示Pods:

[root@bigman-m2 config]# kubectl get pods

NAME READY STATUS RESTARTS AGE

mysql-xxp56 1/1 Running 0 46m

myweb-ds8nv 1/1 Running 0 90m

myweb-jdtdw 1/1 Running 0 90m

myweb-rjbm9 1/1 Running 0 90m

myweb-tg6zc 1/1 Running 0 57m

myweb-v7fwf 1/1 Running 0 90m

比如,進入mysql容器:

[root@bigman-m2 config]# kubectl exec -ti mysql-xxp56 -c mysql /bin/bash

root@mysql-xxp56:/# date

Thu Jan 3 09:38:26 UTC 2019


分享到:


相關文章: