企业 A 前期在华为云上使用虚拟机搭建了一个小型论坛,考虑到成本及前期使用人数较少,虚拟机配置不高,后期论坛内容高质,运营有方,吸引了越来越多的新用户,企业想提升论坛的性能,支持更多并发访问,同时想通过容器化改造,使用容器部署提升灵活性,便于后期的移植和弹性伸缩。
解读:
1、通过在 ECS 上模拟原来的 discuz 网站系统,典型的应用架构 web+redis+mysql。
2、通过容器化改造,web 层通过 dockerfile 构建镜像,通过 helm 部署 redis,通过开源mysql 镜像部署 mysql 数据库,都使用 cce 来部署。
mysql redis php apache安装:
容器化改造
在上述步骤中使用的虚拟机中安装 docker,本实验使用 web01 主机。
步骤 1 安装 docker。
下载脚本sh curl -fsSL get.docker.com -o get-docker.sh 运行脚本 bash get-docker.sh 查看docker安装版本 docker version
步骤 2 编写 Dockerfile。
在 discuz 安装目录下,新建 dockerfile 文件,并按照 docker 编写规范,将 discuz 安装步骤写成 dockerfile,如下供参考,学员也可以根据自己的理解来编写。
~ vim dockerfile
FROM centos:7.6.1810 RUN yum install -y httpd php php-fpm php-server php-mysql COPY ./Discuz_X3.2_SC_UTF8.zip /root/ RUN yum -y install zip unzip && unzip /root/Discuz_X3.2_SC_UTF8.zip COPY upload /var/www/html/ RUN chmod -R 777 /var/www/html ADD httpd-foreground /httpd-foreground RUN chmod -v +x /httpd-foreground CMD ["/httpd-foreground"]
步骤 3 编写开机脚本 httpd-foreground。
注:httpd-foreground 为开机启动 httpd 服务脚本,在 docker 里面无法直接使用 systemctl来启动服务,因此需要使用开机脚本启动 httpd 服务。
! vim httpd-foreground
#!/bin/bash set -e rm -f /usr/local/apache2/logs/httpd.pid exec httpd -DFOREGROUND
步骤 4 制作镜像。
确保以下文件在同一目录下。httpd-foreground Dockerfile Discuz
docker build -t dis11 .
等待镜像制作成功,如在镜像制作过程中出现失败,根据提示做相应的修改。 完成后通过 docker images 命令可查看到已构建完成的镜像。
docker images
步骤 5 上传镜像。
登录 SWR 服务,创建组织–登录指令
选择左侧导航栏的“总览”,单击页面右上角的“登录指令”,在弹出的页面中单击复制登录指令。
在安装容器引擎的机器中执行上一步复制的登录指令。
登录成功会显示“Login Succeeded”。
在安装容器引擎的机器上执行以下命令,为 dis11 镜像打标签。
docker tag [镜像名称 1:版本名称 1] [镜像仓库地址]/[组织名称]/[镜像名称 2:版本名称 2]。
docker tag dis11 swr.cn-east-3.myhuaweicloud.com/自己的组织/dis11:v1 docker tag dis11 swr.自己的地区.myhuaweicloud.com/自己的组织/dis11:v1
注:镜像名称和仓库地址根据自己的实验内容填写。
docker push [镜像仓库地址]/[组织名称]/[镜像名称 2:版本名称 2]。
docker push swr.cn-east-3.myhuaweicloud.com/自己的组织/dis11:v1 docker push swr.自己的可用区.myhuaweicloud.com/自己的组织/dis11:v1
步骤 6 验证镜像。
成功后,可在 SWR 中查看到镜像存在。
3.1.4 CCE 部署应用
3.1.4.1 部署 discuz
3.1.4.2 部署 mysql 数据库
部署Mysql,需要添加环境变量。
MYSQL_ROOT_PASSWORD:MySQL 的 root 用户密码。 MYSQL_DATABASE:镜像启动时要创建的数据库名称。
3.1.4.3 使用 helm 部署 redis
目前华为云的“模板市场”是基于 helm v2.12,配套 kubernetes 1.15 及以下版本,为了兼容较新的 helm 和 kubernetes 版本,通过自行部署 helm 工具来实现模板功能。
步骤 1 Node 节点 kubectl 配置。
在控制台依次打开“云容器引擎 CCE->资源管理->集群管理”, 点击所创建的 CCE 集群下方的“命令行工具”,在下拉列表点击“kubectl”。
步骤 2 参考指引在 CCE Node 节点配置 kubectl 访问 CCE 集群。
通过节点管理-进入到节点,远程登录 node 节点。
在节点上测试是否能用 kubectl 命令(看是否能自动补全),一般节点都已经下载好kubectl,因此可跳过这一步。
下载 kubectl 配置文件。
下载完成后,通过 winscp 工具或其他可用工具将文件上传到 node 节点的/home 目录下。 然后依次执行以下命令。
cp /usr/bin/kubectl /home/ cd /home chmod +x kubectl mv -f kubectl /usr/local/bin mkdir -p $HOME/.kube mv -f kubeconfig.json $HOME/.kube/config
注:第一条命令是将 kubectl 文件也拷贝到/home 目录下。 选择 VPC 网络内接入访问请执行此命令。
kubectl config use-context internal
步骤 3 helm 安装。
- 登录 CCE 节点后,2. 下载 helm v3.7.1,其它版本请在。 https://github.com/helm/helm/releases 查找。
wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz --no-check-certificate 注:wget 下载方式有可能会非常慢,也可以通过手动下载,即打开网页。 https://github.com/helm/helm/releases,找到对应的 v3.7.1 版本,下载完成后通过winscp 工具上传到 node 节点。
步骤 4 解压 helm 包。
tar -zxvf helm-v3.7.1-linux-amd64.tar.gz
步骤 5 把 helm 执行文件复制到/usr/local/bin/helm。
mv linux-amd64/helm /usr/local/bin/helm
步骤 6 添加 helm chart 仓库。
helm repo add bitnami https://charts.bitnami.com/bitnami
步骤 7 redis-cluster 安装。
helm install redis-cluster2 --set persistence.storageClass=csi-disk --set persistence.size=10Gibitnami/redis-cluster 注:redis-cluster2 指 Redis 工作负载名称,可根据实际拉起的工作负载名称进行修改。
步骤 8 通过云容器引擎->工作负载->有状态负载确认 redis-cluster 状态,“运行中”说明集群创建成功。