如何在Linode上安装Kubernetes上的WordPress

时间:2020-03-05 15:31:08  来源:igfitidea点击:

WordPress是众所周知的教程 工具之一。
它使用关系数据库来存储内容:文章,涉及元数据,而persistentvolume(pv)和persistentvolumeclaim(pvc)存储资产数据。

本教程将在Linode上使用Kubernetes上的MySQL数据库向我们展示在Kubernetes上安装单个副本的单个副本。

在Linode上设置Kubernetes集群

本节将通过在Linode上设置Kubernetes的所有步骤。
COM。

首先,让我们在Linode上注册一个帐户,然后登录Linode仪表板。
转到Kubernetes子菜单然后单击"在右上角的"添加群集"按钮并填写现场:群集标签,选择合适的区域并选择Kubernetes版本。

Kubernetes子菜单在Linode仪表板上

然后,让我们为Kubernetes群集添加节点池。
在本教程中,我们将使用"专用的4GB"计划设置1节点群集,节点具有4 GB 内存,2 CPU和80 GB存储。

添加节点池

最后,单击"创建群集"以提供Kubernetes群集。

创建集群

等待几分钟,Kubernetes群集已成功配置。
让我们将Kubeconfig文件下载到本地计算机,因此我们可以方便地与群集进行交互。

下载Kubeconfig.

在本地计算机上,创建名为的文件夹。
kube在主目录上,将下载的文件移动到该文件夹:

$mkdir ~/.kube
$mv wordpress-kubeconfig.yaml .kube/config

此外,我们必须安装kubectl工具:

$curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl
$chmod +x kubectl
$sudo mv kubectl /usr/local/bin

现在,我们可以通过运行以下命令获取Kubernetes集群的信息:

$kubectl get node
NAME                                                STATUS   ROLES    AGE    VERSION
lke11043-13758-5f73eca05dae    Ready       5m   v1.18.8

创建persistentvolume和persistentvolumeclablam

WordPress和MySQL都需要PersistentVolume(PV)来存储数据。
PersistentVolume(PV)和PersistentVolumeclaim(PVC)独立于应用程序POD的生命周期。
重新启动,重新安排或者删除POD时,PV和PVC仍然保留并保留数据。

首先,提供持久性volume(PV),将通过持久性volumeclaim(PVC)来申请。
创建名为"pvc-mysql-wp的列表文件"。
Yaml"如下:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
--
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

使用命令kubectl应用于创建PV:

$kubectl apply -f pvc-mysql-wp.yaml                                                                                                                                  
persistentvolumeclaim/mysql-pv-claim created
persistentvolumeclaim/wp-pv-claim created

验证在创建PVC后自动配置PV:

$kubectl get pv                    
NAME                   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS                  REASON   AGE
pvc-658d8d2da7a241bd   20Gi       RWO            Retain           Bound    default/wp-pv-claim      linode-block-storage-retain            5m
pvc-ca93cd86df0d49c8   20Gi       RWO            Retain           Bound    default/mysql-pv-claim   linode-block-storage-retain            5m1s

为MySQL数据库创建密码

Kubernetes使用秘密来存储密码或者私钥等敏感数据。

让我们创建一个文件秘密。 Yaml与我们最喜欢的编辑如下:

apiVersion: v1
kind: Secret
metadata:
  name: mysql-pass
type: Opaque
data:
  password: yourpassword

应用列表:

$kubectl apply -f secret.yaml
secret/mysql-pass created

验证秘密是否已成功创建:

$kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-gcgp4   kubernetes.io/service-account-token   3      7h52m
mysql-pass            Opaque                                1      2m33s

部署MySQL.

我们可以使用以下列表文件创建MySQL的单个实例部署。
PersistentVolume将安装在/var/lib/mysql。

让我们创建文件mysql-deployment。 yaml

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
--
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
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
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

然后,应用上面的列表:

$kubectl apply -f mysql-deployment.yaml       
service/wordpress-mysql unchanged
deployment.apps/wordpress-mysql created

验证已成功部署MySQL POD:

$kubectl get pod
NAME                               READY   STATUS    RESTARTS   AGE
wordpress-mysql-57464b4779-vtjrf   1/1     Running   0          3m33s

部署WordPress

我们可以使用以下列表部署Kubernetes集群上的WordPress。
WordPress容器使用的PersistentVolume将安装在/var/www/html上。

服务WordPress具有类型LoadBalancer,以便从群集之外访问。

让我们创建文件wordpress-deployment。 yaml

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer
--
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
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.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim

现在,让我们运行以下命令来部署WordPress:

$kubectl apply -f wordpress-deployment.yaml 
service/wordpress created
deployment.apps/wordpress created

验证WordPress是否已启动并运行:

$kubectl get pod
NAME                               READY   STATUS    RESTARTS   AGE
wordpress-6857459697-wmgn9         1/1     Running   0          3m34s
wordpress-mysql-57464b4779-vtjrf   1/1     Running   0          32m

验证所有服务是否正在运行:

$kubectl get svc                           
NAME              TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)        AGE
kubernetes        ClusterIP      10.128.0.1                  443/TCP        12h
wordpress         LoadBalancer   10.128.108.139   172.104.37.236   80:30567/TCP   5s
wordpress-mysql   ClusterIP      None                        3306/TCP       29m

现在,我们可以通过服务WordPress的外部IP访问WordPress页面。
让我们将其复制并粘贴到Web浏览器: