前提条件

  • 建立一個 Kubernetes 叢集。詳情參見快速建立Kubernetes叢集
  • 您需要建立儲存卷和儲存卷聲明,關於如何建立儲存卷,請參見使用阿里雲雲端硬碟使用阿里雲 NAS使用阿里雲 OSS;關於如何建立儲存卷聲明,請參見建立持久化儲存卷聲明。在這裡我們使用阿里雲雲端硬碟作為儲存卷;在樣本中我們選擇PV/PVC的方式進行儲存卷掛載。在這裡建立wordpress-pv-claim和wordpress-mysql-pv-claim兩個儲存聲明,分別會在wordpress和wordpress-mysql的yaml檔案中使用這兩個聲明來掛載相應的儲存卷。


背景信息

本例主要示範如何通過編排模板中的自訂模板建立有依賴關係的應用。

主要組件有:

  • wordpress
  • mysql

涉及到的資源:

  • 儲存卷管理
  • secret管理
  • 服務

操作步骤

  1. 登入Container Service管理主控台
  2. 使用準備好的儲存卷聲明。在這裡建立wordpress-pvc和wordpress-mysql-pvc兩個儲存聲明,分別會在wordpress和wordpress-mysql的yaml檔案中到這兩個聲明來掛載相應的儲存卷。
  3. 單擊左側導覽列中應用 > 保密字典,選擇所需的叢集和命名空間,單擊右上方建立。建立過程請參考建立密鑰


    由於建立和訪問mysql資料庫需要使用者名密碼,所以我們通過建立密鑰的方式進行使用者名密碼的管理。

    在使用secret前,您需要先將需要加密的secret在保密字典裡進行建立,在本例中通過將mysql root的密碼作為密鑰進行建立,建立名稱為mysql-pass。該密鑰會在後面的wordpress和wordpress-mysql的yaml檔案中用到。



  4. 單擊左側導覽列中的應用 > 部署,單擊右上方使用範本部署


    選擇所需的叢集和命名空間,建立wordpress deployment的yaml檔案如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: wordpress
      labels:
        app: wordpress
    spec:
      selector:
        matchLabels:
          app: wordpress
          tier: frontend
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: wordpress
            tier: frontend
        spec:
          containers:
          - image: wordpress:4
            name: wordpress
            env:
            - name: WORDPRESS_DB_HOST
              value: wordpress-mysql  #通過名稱指向需要訪問的mysql,該名稱與mysql service的名稱相對應。
            - name: WORDPRESS_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: password-wordpress
            ports:
            - containerPort: 80
              name: wordpress
            volumeMounts:
            - name: wordpress-pvc
              mountPath: /var/www/html
          volumes:
          - name: wordpress-pvc
            persistentVolumeClaim:
              claimName: wordpress-pv-claim
    建立mysql deployment的yaml檔案如下:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: wordpress-mysql
      labels:
        app: wordpress
    spec:
      selector:
        matchLabels:
          app: wordpress
          tier: mysql
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: wordpress
            tier: mysql
        spec:
          containers:
          - image: mysql:5.6
            name: mysql
            env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: password-mysql
            ports:
            - containerPort: 3306
              name: mysql
            volumeMounts:
            - name: wordpress-mysql-pvc
              mountPath: /var/lib/mysql
          volumes:
          - name: wordpress-mysql-pvc
            persistentVolumeClaim:
              claimName: wordpress-mysql-pv-claim
  5. 為了使wordpress能夠被外部存取,我們需要為wordpress建立service對外暴露訪問方式,在這裡使用LoadBalancer類型進行wordpress service的建立,Container Service會自動建立阿里雲負載平衡,為使用者提供外部存取。

    wordpress mysql需要建立名為wordpress-mysql的service,以使在上面建立的wordpress deploymet可以訪問到。由於該mysql只為wordpress內部調用,所以不需要為其建立LoadBalancer類型的service。

    建立service的方法請參考建立服務

    建立wordpress和mysql service的yaml檔案如下:
    apiVersion: v1
    kind: Service
    metadata:
      name: wordpress
      labels:
        app: wordpress
    spec:
      ports:
        - port: 80
      selector:
        app: wordpress
        tier: frontend
      type: LoadBalancer
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: wordpress-mysql
      labels:
        app: wordpress
    spec:
      ports:
        - port: 3306
      selector:
        app: wordpress
        tier: mysql
      	  clusterIP: None
  6. 當部署完成後,單擊左側導覽列中的應用 > 服務,找到wordpress服務並查看其外端端點


  7. 在瀏覽器中訪問wordpress服務的外部端點,您就可以通過負載平衡提供的IP地址進行wordpress應用的訪問。


下一步

在wordpress應用的配置過程中,您可以使用密鑰中配置的密碼登入應用,此外,wordpress應用所屬的容器產生的資料會儲存資料卷中。