首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
基础
使用 Minikube 创建集群
使用 kubectl 创建 Deployment
查看 pod 和工作节点
使用 Service 暴露你的应用
运行应用程序的多个实例
执行滚动更新
使用 ConfigMap 来配置 Redis
使用 AppArmor 限制容器对资源的访问
在集群级别应用 Pod 安全标准
在名字空间级别应用 Pod 安全标准
使用 seccomp 限制容器的系统调用
公开外部 IP 地址以访问集群中应用程序
使用 Redis 部署 PHP 留言板应用程序
StatefulSet 基础
使用持久卷部署 WordPress 和 MySQL
使用 StatefulSet 部署 Cassandra
运行 ZooKeeper
服务器端应用API
客户端库
用户认证
使用启动引导令牌
证书签名请求
准入控制器
管理服务账号
使用 RBAC 鉴权
当前位置:
首页>>
技术小册>>
Kubernetes中文教程(六)
小册名称:Kubernetes中文教程(六)
本示例描述了如何通过 Minikube 在 Kubernetes 上安装 WordPress 和 MySQL。 这两个应用都使用 PersistentVolumes 和 PersistentVolumeClaims 保存数据。 [PersistentVolume](PV)是在集群里由管理员手动制备或 Kubernetes 通过 [StorageClass] 动态制备的一块存储。 [PersistentVolumeClaim] 是用户对存储的请求,该请求可由某个 PV 来满足。 PersistentVolumes 和 PersistentVolumeClaims 独立于 Pod 生命周期而存在, 在 Pod 重启、重新调度甚至删除过程中用于保存数据。 这种部署并不适合生产场景,因为它使用的是单实例 WordPress 和 MySQL Pod。 在生产场景中,请考虑使用 [WordPress Helm Chart] 部署 WordPress。 本教程中提供的文件使用 GA Deployment API,并且特定于 kubernetes 1.9 或更高版本。 如果你希望将本教程与 Kubernetes 的早期版本一起使用,请相应地更新 API 版本,或参考本教程的早期版本。 * 创建 PersistentVolumeClaims 和 PersistentVolumes * 创建 `kustomization.yaml` 以使用 * Secret 生成器 * MySQL 资源配置 * WordPress 资源配置 * `kubectl apply -k ./` 来应用整个 kustomization 目录 * 清理 此例在 `kubectl` 1.14 或者更高版本有效。 下载下面的配置文件: 1. [mysql-deployment.yaml] 2. [wordpress-deployment.yaml] ## 创建 PersistentVolumeClaims 和 PersistentVolumes MySQL 和 Wordpress 都需要一个 PersistentVolume 来存储数据。 它们的 PersistentVolumeClaims 将在部署步骤中创建。 许多集群环境都安装了默认的 StorageClass。如果在 PersistentVolumeClaim 中未指定 StorageClass, 则使用集群的默认 StorageClass。 创建 PersistentVolumeClaim 时,将根据 StorageClass 配置动态制备一个 PersistentVolume。 在本地集群中,默认的 StorageClass 使用 `hostPath` 制备程序。`hostPath` 卷仅适用于开发和测试。 使用 `hostPath` 卷时,你的数据位于 Pod 调度到的节点上的 `/tmp` 中,并且不会在节点之间移动。 如果 Pod 死亡并被调度到集群中的另一个节点,或者该节点重新启动,则数据将丢失。 如果要建立需要使用 `hostPath` 制备程序的集群, 则必须在 `controller-manager` 组件中设置 `--enable-hostpath-provisioner` 标志。 如果你已经有运行在 Google Kubernetes Engine 的集群, 请参考[此指南]。 ## 创建 kustomization.yaml ### 创建 Secret 生成器 [Secret] 是存储诸如密码或密钥之类敏感数据的对象。 从 1.14 开始,`kubectl` 支持使用一个 kustomization 文件来管理 Kubernetes 对象。 你可以通过 `kustomization.yaml` 中的生成器创建一个 Secret。 通过以下命令在 `kustomization.yaml` 中添加一个 Secret 生成器。 你需要将 `YOUR_PASSWORD` 替换为自己要用的密码。 ```shell cat <<EOF >./kustomization.yaml secretGenerator: - name: mysql-pass literals: - password=YOUR_PASSWORD EOF ``` ## 补充 MySQL 和 WordPress 的资源配置 以下清单文件描述的是一个单实例的 MySQL Deployment。MySQL 容器将 PersistentVolume 挂载在 `/var/lib/mysql`。 `MYSQL_ROOT_PASSWORD` 环境变量根据 Secret 设置数据库密码。 以下清单文件描述的是一个单实例 WordPress Deployment。WordPress 容器将 PersistentVolume 挂载到 `/var/www/html`,用于保存网站数据文件。 `WORDPRESS_DB_HOST` 环境变量设置上面定义的 MySQL Service 的名称,WordPress 将通过 Service 访问数据库。 `WORDPRESS_DB_PASSWORD` 环境变量根据使用 kustomize 生成的 Secret 设置数据库密码。 1. 下载 MySQL Deployment 配置文件。 ```shell curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml ``` 2. 下载 WordPress 配置文件。 ```shell curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml ``` 3. 将上述内容追加到 `kustomization.yaml` 文件。 ```shell cat <<EOF >>./kustomization.yaml resources: - mysql-deployment.yaml - wordpress-deployment.yaml EOF ``` ## 应用和验证 `kustomization.yaml` 包含用于部署 WordPress 网站以及 MySQL 数据库的所有资源。你可以通过以下方式应用目录: ```shell kubectl apply -k ./ ``` 现在,你可以验证所有对象是否存在。 1. 通过运行以下命令验证 Secret 是否存在: ```shell kubectl get secrets ``` 响应应如下所示: ``` NAME TYPE DATA AGE mysql-pass-c57bb4t7mf Opaque 1 9s ``` 2. 验证是否已动态制备 PersistentVolume: ```shell kubectl get pvc ``` 制备和绑定 PV 可能要花费几分钟。 响应应如下所示: ``` NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mysql-pv-claim Bound pvc-8cbd7b2e-4044-11e9-b2bb-42010a800002 20Gi RWO standard 77s wp-pv-claim Bound pvc-8cd0df54-4044-11e9-b2bb-42010a800002 20Gi RWO standard 77s ``` 3. 通过运行以下命令来验证 Pod 是否正在运行: ```shell kubectl get pods ``` 等待 Pod 状态变成 `RUNNING` 可能会花费几分钟。 响应应如下所示: ``` NAME READY STATUS RESTARTS AGE wordpress-mysql-1894417608-x5dzt 1/1 Running 0 40s ``` 4. 通过运行以下命令来验证 Service 是否正在运行: ```shell kubectl get services wordpress ``` 响应应如下所示: ``` NAME TYPE CLUSTER-IP EXTERNAL-IP PORT AGE wordpress LoadBalancer 10.0.0.89 <pending> 80:32406/TCP 4m ``` Minikube 只能通过 NodePort 公开服务。EXTERNAL-IP 始终处于 pending 状态。 5. 运行以下命令以获取 WordPress 服务的 IP 地址: ```shell minikube service wordpress --url ``` 响应应如下所示: ``` http://1.2.3.4:32406 ``` 6. 复制 IP 地址,然后将页面加载到浏览器中来查看你的站点。 你应该看到类似于以下屏幕截图的 WordPress 设置页面。 ![wordpress-init] 不要在此页面上保留 WordPress 安装。如果其他用户找到了它,他们可以在你的实例上建立一个网站并使用它来提供恶意内容。<br/><br/> 通过创建用户名和密码来安装 WordPress 或删除你的实例。 ## 1. 运行以下命令删除你的 Secret、Deployment、Service 和 PersistentVolumeClaims: ```shell kubectl delete -k ./ ``` ## * 进一步了解[自省与调试] * 进一步了解 [Job] * 进一步了解[端口转发] * 了解如何[获得容器的 Shell]
上一篇:
StatefulSet 基础
下一篇:
使用 StatefulSet 部署 Cassandra
该分类下的相关小册推荐:
Kubernets合辑8-权限控制
Kubernets合辑2-部署Ingress
Kubernetes中文教程(五)
Kubernets合辑3-kubernetes介绍
Kubernets合辑5-Pod控制器
Kubernets合辑10-网络
Kubernets合辑4-kubernetes入门
Kubernetes中文教程(四)
Kubernets合辑7-存储
Kubernets合辑13-集群监控
Kubernetes中文教程(二)
Kubernets合辑15-持续部署