如何在Kubernetes上运行WordPress和MySQL 5.7

时间:2020-01-09 10:34:20  来源:igfitidea点击:

说明

在本教程中,将指导我们如何在Kubernetes上使用WordPress和MySQL 5.7. 我们将看到用于存储密码,将WordPress博客暴露于Internet以及使用持久存储来存储上载内容的不同资源类型。

入门

为该教程创建了以下Gist文件。下载它们以进行后续操作,并在我们自己的环境中用作模板。

  • MySQL 5.7
  • WordPress 5.2

创建密码

强烈建议我们不要将敏感信息存储在Docker映像或者Kubernetes资源文件中。相反,我们应该将敏感信息安全地存储在远离应用程序和资源的地方。

Kubernetes机密使我们可以存储集群中资源使用的敏感信息。在本教程中,我们将存储两个密码作为机密-一个用于MySQL root,另一个用于WordPress管理员密码。

密码存储为Base64编码的字符串。例如,我们将需要在Linux或者OSX上使用base64命令自己创建这些字符串。现在为两个密码创建密码,并记下输出。

echo "super-secret-mysql-password" | base64
c3VwZXItc2VjcmV0LW15c3FsLXBhc3N3b3JkCg==
echo "super-secret-wp-password" | base64
c3VwZXItc2VjcmV0LXdwLXBhc3N3b3JkCg==

创建一个名为myblog-secrets.yml的新文件

touch myblog-secrets.yml

添加以下内容。

---
apiVersion: v1
kind: Secret
metadata:
  name: myblog-secrets
type: Opaque
data:
  mysql_password: c3VwZXItc2VjcmV0LW15c3FsLXBhc3N3b3JkCg==
  admin_password: c3VwZXItc2VjcmV0LXdwLXBhc3N3b3JkCg==

使用kubectl apply命令在Kubernetes中创建secrets资源。

kubectl apply -f myblog-secrets.yml

部署MySQL 5.7服务

在部署WordPress之前,我们需要为博客平台创建一个数据库。我们将为MySQL数据库创建一个部署资源,该资源将执行以下操作:

  • 下拉最新的MySQL 5.7 Docker映像
  • 为MySQL服务创建Pod
  • 使用我们之前创建的机密设置环境变量

创建一个名为myblog-db.yml的新文件。

touch myblog-db-deployment.yml

向其中添加以下内容。

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: db1-disk
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: db1-deployment
  labels:
    app: db1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: db1
  template:
    metadata:
      labels:
        app: db1
    spec:
      containers:
        - name: db1
          image: mysql:5.7
          ports:
            - containerPort: 3306
          volumeMounts:
            - mountPath: "/var/lib/mysql"
              subPath: "mysql"
              name: mysqldb
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db1-secrets
                  key: ROOT_PASSWORD
            - name: MYSQL_USER
              value: site1_user
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db1-secrets
                  key: SITE1_USER_PASSWORD
            - name: MYSQL_DATABASE
              value: site1
      volumes:
        - name: mysqldb
          persistentVolumeClaim:
            claimName: db1-disk
---
apiVersion: v1
kind: Service
metadata:
  name: myblog-db-service
spec:
  selector:
    app: db1
  ports:
  - protocol: TCP
    port: 3306
    targetPort: 3306

使用kubectl apply命令将创建在myblog-db.yml文件中声明的资源。

kubectl apply -f myblog-db.yml

部署WordPress

创建一个名为myblog-wordpress.yml的新文件。

touch myblog-wordpress.yml

向其中添加以下内容。

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-disk
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myblog-wordpress-deployment
  labels:
    app: myblog-wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myblog-wordpress
  template:
    metadata:
      labels:
        app: myblog-wordpress
    spec:
      containers:
        - name: myblog-wordpress
          image: wordpress:5.2
          ports:
            - containerPort: 80
          volumeMounts:
            - mountPath: "/var/www/html/wp-content"
              subPath: "wp-content"
              name: wordpress-disk
          env:
            - name: WORDPRESS_DB_HOST
              value: myblog-db-service
            - name: WORDPRESS_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db1-secrets
                  key: ROOT_PASSWORD
      volumes:
        - name: wordpress-disk
          persistentVolumeClaim:
            claimName: wordpress-disk
---
apiVersion: v1
kind: Service
metadata:
  name: myblog-wordpress-service
spec:
  selector:
    app: myblog-wordpress
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

使用kubectl apply命令创建声明的资源。

kubectl apply -f myblog-wordpress.yml