1. 程式人生 > 實用技巧 >一個簡單的例子

一個簡單的例子

一、啟動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