一個簡單的例子
阿新 • • 發佈:2020-08-10
一、啟動MySQL服務
1.1為MySQL服務建立一個RC定義
mysql-rc.yaml
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 imagePullPolicy: IfNotPresent ports: - containerPort: 3306 # 容器應用監聽的埠號 env: # 注入容器內的環境變數 - name: MYSQL_ROOT_PASSWORD value: "123456"
1.2 釋出到kubernetes叢集
建立RC
kubectl create -f mysql-rc.yaml
驗證是否成功
檢視剛才建立的RC
kubectl get rc
NAME DESIRED CURRENT READY AGE mysql 1 1 0 10s
檢視Pod建立情況
kubectl get pod NAME READY STATUS RESTARTS AGE mysql-lh5dv 1/1 Running 0 2m39s
二、建立MySQL Kubernetes Service
2.1 定義一個service
mysql-scv.yaml
apiVersion: v1 kind: Service # 表明是 Kubernetes Service metadata: name: mysql # Service 的全域性唯一名稱 spec: ports: - port: 3306 # Service 提供服務的埠號 selector: # Service 對應的Pod擁有這裡定義的標籤 app: mysql
2.2 建立Service
kubectl create -f mysql-scv.yaml
檢視建立的Service
kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7h48m mysql ClusterIP 10.109.55.96 <none> 3306/TCP 7s
可以發現,MySQL服務被分配了一個值為10.109.55.96的Cluser IP地址。Kubernetes叢集中其他Pod就能通過Service的Cluster IP + 埠號3306來訪問mysql了。通常Cluster IP是系統自動分配的,因此需要一個服務發現機制來找到這個服務(Coer DNS就能通過Service的名稱來發現該服務)。最初Kubernetes巧妙的使用Linux環境變數來解決了這個問題。根據Service的唯一名稱,容器可以從環境變數中獲取Service對應的Cluster IP地址和埠,從而發起TCP/IP連線請求。
三、啟動Tomcat應用
3.1 建立對應的RC
myweb-rc.yaml
apiVersion: v1 kind: ReplicationController metadata: name: myweb spec: replicas: 1 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'
在這裡使用了環境變數的形式傳入mysql的相關資訊,更安全的方法是使用服務的名稱mysql。
3.2 將應用釋出到叢集
# kubectl create -f myweb-rc.yaml # kubectl get rc NAME DESIRED CURRENT READY AGE mysql 1 1 1 22m myweb 1 1 0 28s
3.3 建立對應的Service
myweb-svc.yaml
apiVersion: v1 kind: Service metadata: name: myweb spec: type: NodePort ports: - port: 8080 nodePort: 30001 selector: app: myweb
建立service
# kubectl create -f myweb-svc.yaml
service/myweb created
檢視service
# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 8h mysql ClusterIP 10.109.55.96 <none> 3306/TCP 25m myweb NodePort 10.111.193.215 <none> 8080:30001/TCP 53s
至此一個應用例子搭建完成
通過瀏覽器訪問 nodeip:30001訪問Tomcat