此示例教程介绍如何在 vSphere IaaS control plane 环境中使用 vSphere Pod 部署 WordPress 应用程序。
WordPress 部署包括用于 WordPress 前端和 MySQL 后端的容器以及同时用于这两者的服务。此外,还需要密钥对象。
本教程使用一个部署对象。在生产环境中,通常对 WordPress 和 MySQL 容器使用 StatefulSet。
必备条件
- 创建具有 NSX 网络连接的单区域 主管。只有配置了 NSX 的单区域 主管 支持 vSphere Pod。请参见部署具有 NSX 网络连接的单区域 Supervisor
- 创建用于部署 vSphere Pod 的命名空间。请参见在 主管 上创建并配置 vSphere 命名空间。
- 创建一个存储策略,例如 vwt-storage-policy,并将分配给命名空间。
- 下载 vSphere Kubernetes CLI 工具。请参见下载并安装适用于 vSphere 的 Kubernetes CLI 工具。
- 创建本教程所需的 YAML 文件,并验证对文件的命令行访问权限。
类别 文件 存储 -
注: 确保文件引用了正确的存储类。
密钥 服务 部署
部署 WordPress
使用此工作流时,可使用 vSphere Pod 来部署 WordPress 应用程序。
第 1 部分.访问命名空间
使用以下步骤访问命名空间。
过程
第 2 部分.创建 WordPress PVC
使用以下命令创建 WordPress PVC。
过程
第 3 部分.创建密钥
公共 Docker Hub 是 Kubernetes 的默认容器注册表。Docker Hub 现在会限制映像拉取。您需要拥有一个付费帐户,并将帐户密钥添加到密钥 YAML 中的 data.dockerconfigjson
字段。
过程
第 4 部分.创建服务
按照以下步骤创建服务。
过程
第 5 部分.创建 Pod 部署
使用此任务可创建 Pod 部署。
过程
第 6 部分.测试 WordPress
按照以下步骤测试 WordPress 部署。
过程
WordPress 部署的示例 YAML 文件
使用 vSphere Pod 部署 WordPress 应用程序时,请使用以下示例 YAML 文件。
mysql-pvc.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc labels: app: wordpress spec: accessModes: - ReadWriteOnce storageClassName: vwt-storage-policy resources: requests: storage: 20Gi
wordpress-pvc.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wordpress-pvc labels: app: wordpress spec: accessModes: - ReadWriteOnce storageClassName: vwt-storage-policy resources: requests: storage: 20Gi
regcred.yaml
apiVersion: v1 kind: Secret metadata: name: regcred data: .dockerconfigjson: ewoJImF1dGhzIjog....zZG1KcE5WUmtXRUozWpc type: kubernetes.io/dockerconfigjson
mysql-pass.yaml
apiVersion: v1 data: password: YWRtaW4= #admin base64 encoded kind: Secret metadata: name: mysql-pass
mysql-service.yaml
apiVersion: v1 kind: Service metadata: name: wordpress-mysql labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None
wordpress-service.yaml
apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer
mysql-deployment-vsphere-pod.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-mysql labels: app: wordpress spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: wordpress tier: mysql template: metadata: labels: app: wordpress tier: mysql spec: containers: - image: mysql:5.6 name: mysql #increased resource limits required for this pod vm #default pod VM RAM is 512MB; MySQL container needs more #without extra RAM OOM error prevents deployment #extra RAM not required for Kuberentes cluster resources: limits: memory: 1024Mi cpu: 1 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-pvc imagePullSecrets: - name: regcred
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.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: wordpress-pvc imagePullSecrets: - name: regcred