1. 程式人生 > >從一個例子開始認識Kubernetes

從一個例子開始認識Kubernetes

ber aml pull 自動 字段 replicat pre 文章 start

  對於絕大多數剛剛接觸Kubernetes的人來說,很難順利的上手和實踐。所以我們從一個例子開始初步的對Kubernetes有一個了解:JSP頁面通過JDBC直接訪問MySQL數據庫並展示數據。

技術分享圖片

  這個例子中我們需要啟動連個容器:WebApp容器和MySQL容器。

  廢話不多說,我們現在開始。。。

  • 第一步:環境準備

  這一步我們就不在這裏贅述了,網上教程一搜一大把。。。

  關閉防火墻、swap、SELinux,安裝Docker、etcd和Kubernetes組件等等。。。

  下載MySQL和Tomcat鏡像:

1 ]# docker pull mysql:5.5
2 ]# docker pull kubeguide/tomcat-app:v1

  也可以參考我之前的文章:《Kubernetes的基本術語和概念》

  • 第二步:啟動MySQL服務

  首先我們要為MySQL服務創建一個RC定義文件:mysql-rc.yaml,代碼內容如下:

 1 apiVersion: v1
 2 kind: ReplicationController        ## 副本控制器RC
 3 metadata:
 4   name: mysql      ## RC的名稱,全局唯一
 5 spec:
 6   replicas: 1      ##
Pod副本期待數量
7 selector: 8 app: mysql ## 符合目標的Pod擁有此標簽 9 template: ## 根據此模板創建Pod實例 10 metadata: 11 labels: 12 app: mysql ## 副本Pod擁有的標簽對應RC的selector 13 spec: 14 containers: ## Pod內容器定義部分 15 - name: mysql ## 容器的名稱 16
image: mysql:5.5 ## 容器的鏡像 17 ports: 18 - containerPort: 3306 ## 容器暴露的端口號 19 env: ## 註入容器的環境變量 20 - name: MYSQL_ROOT_PASSWORD 21 value: "123456"

  創建好mysql-rc.yaml文件後,將它發布到Kubernetes集群中。

1 ]# kubectl create -f mysql-rc.yaml

  接下來查看下創建的RC以及Pod的情況:

1 ]# kubectl get rc
2 NAME      DESIRED   CURRENT   READY     AGE
3 mysql     1         1         1         1h
4 ]# kubectl get po
5 NAME                      READY     STATUS    RESTARTS   AGE
6 mysql-px9th               1/1       Running   0          1h

  上述創建沒有問題後,我們再創建一個與之關聯的mysql的service文件:mysql-svc.yaml。代碼內容如下:

1 apiVersion: v1
2 kind: Service    ## 聲明是Kubernetes的service文件
3 metadata:
4   name: mysql    ## service的全局唯一名稱
5 spec:
6   ports:
7     - port: 3306  ## 服務暴露的端口號
8   selector:       ## service對應的Pod標簽名稱
9     app: mysql

  運行kubectl命令創建service:

1 ]# kubectl create -f mysql-scv.yaml

  查看創建的service:

]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
mysql        ClusterIP   10.107.188.209   <none>        3306/TCP         1h
註:CLUSTER-IP是在service創建時由Kubernetes自動創建的。
  是一個虛地址,隨後Kubernetes集群中其他新創建的Pod就可以通過Service的ClusterIP+端口號6379來連接和訪問它。
  根據Service的唯一名字,容器可以從環境變量中獲取到Service對應的ClusterIP地址和端口,從而發起TCP/IP連接請求了。
  • 第三步:啟動Tomcat應用

  創建Tomcat的rc文件:tomcat-rc.yaml,代碼內容如下:

 1 apiVersion: v1
 2 kind: ReplicationController
 3 metadata:
 4   name: myweb
 5 spec:
 6   replicas: 1     # spec.selector與spec.template.metadata.labels,這兩個字段必須相同,否則下一步創建RC會失敗。
 7   selector:
 8     app: myweb
 9   template:
10     metadata:
11       labels:
12         app: myweb
13     spec:    
14       containers:
15         - name: myweb    
16           image: kubeguide/tomcat-app:v1   
17           ports:         
18           - containerPort: 8080
19           env:       
20           - name: MYSQL_SERVICE_HOST
21             value: ‘mysql‘
22           - name: MYSQL_SERVICE_PORT
23             value: ‘3306‘

  創建RC:

1 ]# kubectl create -f myweb-rc.yaml

  查看Tomcat RC是否創建成功:

1 ]# kubectl get rc
2 NAME      DESIRED   CURRENT   READY     AGE
3 mysql     1         1         1         1h
4 myweb     2         2         2         1h
5 ]# kubectl get po  
6 NAME                      READY     STATUS    RESTARTS   AGE
7 mysql-px9th               1/1       Running   0          1h
8 myweb-fxq9s               1/1       Running   0          1h
9 myweb-tt5sd               1/1       Running   0          1h

  創建Tomcat的service文件tomcat-svc.yaml,內容如下:

 1 apiVersion: v1
 2 kind: Service
 3 metadata: 
 4   name: myweb
 5 spec:
 6   type: NodePort
 7   ports:
 8     - port: 8080
 9       nodePort: 30001
10   selector:
11     app: myweb

註: type: NodePort和nodePort: 30001 這兩個屬性,表明service開啟了外網訪問模式。

  創建並查看創建的service狀態:

1 ]# kubectl create -f tomcat-svc.yaml
2 ]# kubectl get svc
3 NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
4 mysql        ClusterIP   10.107.188.209   <none>        3306/TCP         1h
5 myweb        NodePort    10.109.40.205    <none>        8080:30001/TCP   1h
  • 第四步:通過瀏覽器訪問頁面

  在瀏覽器打開,地址 http://虛擬機IP:30001/demo/

技術分享圖片

  點擊頁面上的add增加一條數據,刷新頁面,數據成功入庫,到這裏我們這個應用服務就完成了!

從一個例子開始認識Kubernetes