本文主要为您介绍如何部署有依赖关系的WordPress应用。

前提条件

背景信息

本例主要演示如何通过编排模板中的自定义模板创建有依赖关系的应用。

主要组件有:
  • WordPress
  • MySQL
涉及到的资源:
  • 存储卷管理
  • Secret管理
  • 服务

操作步骤

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,单击配置管理
  5. 配置管理页面单击保密字典页签,然后在保密字典页签右上角,单击创建

    创建过程请参见创建密钥

    配置密钥页面

    使用准备好的存储卷声明。本文创建WordPress-pvc和WordPress-MySQL-pvc两个存储声明,分别在WordPress和WordPress-MySQL的YAML文件中,用这两个声明挂载相应的存储卷。

    由于创建和访问MySQL数据库需要用户名密码,所以我们通过创建密钥的方式进行用户名密码的管理。

    在使用Secret前,您需要先将需要加密的Secret在保密字典里进行创建,在本例中通过将MySQL root的密码作为密钥进行创建,创建名称为MySQL-pass,类型选择Opaque。该密钥会在后面的WordPress和WordPress-MySQL的YAML文件中用到。

  6. 在集群管理页左侧导航栏中,单击工作负载
  7. 单击无状态页签,然后在无状态页面右上角,单击使用模板创建
    创建应用

    在页面顶端选择所需的命名空间,创建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-mysql
            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
  8. 创建服务。

    为了使WordPress能够被外部访问,我们需要为WordPress创建service对外暴露访问方式,在这里使用LoadBalancer类型进行WordPress 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
  9. 当部署完成后,单击集群左侧导航栏中的服务
    找到WordPress服务并查看其外端端点。 服务列表
  10. 在浏览器中输入XX.XX.XX.XX/wp-admin/install.php,访问WordPress服务的外部端点,您就可以通过负载均衡提供的IP地址进行WordPress应用的访问。
    此处的 XX.XX.XX.XX为上步骤获取的外部端点的IP地址。
    访问外部端点

后续步骤

在WordPress应用的配置过程中,您可以使用密钥中配置的密码登录应用,此外,WordPress应用所属的容器产生的数据会保存数据卷中。