如何在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

