前言
WordPress 是一款广泛使用的博客和网站平台,而 Kubernetes 和 Docker 是目前比较流行的容器化技术,它们可以协同工作以构建高可靠、高性能的自动化 WordPress 站点。在这篇文章中,我们将介绍如何在 Ubuntu 上使用 Kubernetes 和 Docker 部署一个 WordPress 站点,并且让站点变得强大、自动化和高效。
技术环境
在开始学习本教程之前,您需要有以下预备知识:
- 了解 Kubernetes 和 Docker 怎么用
- 熟悉使用 Ubuntu 操作系统
- 具备一定的命令行操作经验
步骤概述
在使用 Kubernetes 和 Docker 部署 WordPress 网站时,需要经历以下步骤:
- 安装 Kubernetes 和 Docker 运行环境
- 创建 Kubernetes 应用程序
- 验证 Kubernetes 部署是否成功
- 部署 WordPress 站点
- 部署 MySQL 数据库
- 验证 WordPress 站点是否成功
安装 Kubernetes 和 Docker 运行环境
在 Ubuntu 中,您可以使用以下命令来安装 Kubernetes 和 Docker 运行环境:
安装 Kubernetes
// www.javascriptcn.com code example # 把当前用户加入到 sudo 组 sudo usermod -aG sudo $USER # 安装必需的软件 sudo apt-get update && sudo apt-get install -y apt-transport-https curl # 添加 Kubernetes 的 GPG 公钥 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - # 添加 Kubernetes 的 apt 仓库 echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list # 安装 Kubernetes sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl # 禁止自动升级 sudo apt-mark hold kubelet kubeadm kubectl
安装 Docker
// www.javascriptcn.com code example # 安装必需的软件包 sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common # 添加 Docker GPG 公钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 添加 Docker 的 apt 仓库 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 安装 Docker sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 验证 Docker 是否成功安装 sudo docker run hello-world
创建 Kubernetes 应用程序
在安装好 Kubernetes 和 Docker 运行环境之后,我们需要创建一个 Kubernetes 的应用程序来部署 WordPress 站点。对于此,我们将使用 YAML 文件来定义我们需要部署的应用程序。
创建 WordPress YAML 文件
// www.javascriptcn.com code example
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:5.2.2-php7.3-apache
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
value: mysql-service
- name: WORDPRESS_DB_NAME
value: wordpress
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: username
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
---
apiVersion: v1
kind: Service
metadata:
name: wordpress-service
spec:
type: NodePort
selector:
app: wordpress
ports:
- protocol: TCP
port: 80
targetPort: 80创建 MySQL YAML 文件
// www.javascriptcn.com code example
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
ports:
- port: 3306
name: mysql
clusterIP: None
selector:
app: mysql
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.6
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
---
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm部署 WordPress 和 MySQL 应用程序
在创建好 WordPress 和 MySQL 的 YAML 文件后,我们可以通过以下命令来部署应用程序:
# 创建 MySQL 应用程序 kubectl apply -f mysql.yaml # 创建 WordPress 应用程序 kubectl apply -f wordpress.yaml
验证 Kubernetes 部署是否成功
我们可以通过 Kubernetes Dashboard 来验证我们的部署是否成功。Kubernetes Dashboard 是一个 Web 管理界面,使您能够直接查看容器、 Pod、部署等信息,并且还能够与它们交互。
安装 Kubernetes Dashboard
# 安装 Kubernetes Dashboard kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml # 创建 Kubernetes Dashboard 服务账号和角色绑定 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
启动 Kubernetes Dashboard
# 启动 Kubernetes Dashboard kubectl proxy
登录 Kubernetes Dashboard
打开以下链接:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login,并使用以下命令来获取 Kubernetes Dashboard 的 Token:
# 获取 Kubernetes Dashboard 的 Token
kubectl describe secret $(kubectl get secret | grep admin-user | awk '{print $1}')在打开的链接中输入 Token 并登录即可打开 Kubernetes Dashboard 界面。
部署 WordPress 站点
在成功部署 Kubernetes 应用程序后,我们可以通过以下步骤来部署 WordPress 站点:
获取 WordPress 代码
# 获取 WordPress 代码 wget https://wordpress.org/latest.tar.gz tar -xzvf latest.tar.gz
构建 WordPress Docker 镜像
# 构建 WordPress Docker 镜像 docker build -t your-name/wordpress .
推送 WordPress Docker 镜像到 Docker Hub
# 登录 Docker Hub docker login # 推送 WordPress Docker 镜像 docker push your-name/wordpress
使用 YAML 文件部署 WordPress 应用程序
// www.javascriptcn.com code example
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: your-name/wordpress
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
value: mysql-service
- name: WORDPRESS_DB_NAME
value: wordpress
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: username
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
type: LoadBalancer
selector:
app: wordpress
ports:
- protocol: TCP
port: 80
targetPort: 80通过以下命令部署 WordPress 应用程序:
kubectl apply -f wordpress.yaml
部署 MySQL 数据库
除了部署 WordPress 应用程序,我们还需要配置 MySQL 数据库。在这里,我们使用 MySQL 官方的 Docker 镜像来部署 MySQL 数据库。
// www.javascriptcn.com code example
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
ports:
- port: 3306
name: mysql
clusterIP: None
selector:
app: mysql
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.6
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
---
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm通过以下命令部署 MySQL 数据库:
kubectl apply -f mysql.yaml
验证 WordPress 站点是否成功
在部署好 WordPress 应用程序和 MySQL 数据库之后,我们可以通过浏览器来验证 WordPress 是否可以正常工作。
首先,我们需要获取 WordPress 服务的 URL 地址,方法如下所示:
# 获取 WordPress 服务的 URL 地址 minikube service wordpress --url
然后,在浏览器中输入 URL 地址并打开 WordPress。如果看到 WordPress 站点,那么恭喜你,你已经使用 Kubernetes 和 Docker 成功部署了 WordPress 站点。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d776bea941bf7134d61d02