從一個例子開始認識Kubernetes
阿新 • • 發佈:2018-10-10
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.52 ]# 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 ## 容器的名稱 16image: 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