HCIE2.0-CloudSA 容器化改造实验

企业 A 前期在华为云上使用虚拟机搭建了一个小型论坛,考虑到成本及前期使用人数较少,虚拟机配置不高,后期论坛内容高质,运营有方,吸引了越来越多的新用户,企业想提升论坛的性能,支持更多并发访问,同时想通过容器化改造,使用容器部署提升灵活性,便于后期的移植和弹性伸缩。

解读:
1、通过在 ECS 上模拟原来的 discuz 网站系统,典型的应用架构 web+redis+mysql。
2、通过容器化改造,web 层通过 dockerfile 构建镜像,通过 helm 部署 redis,通过开源mysql 镜像部署 mysql 数据库,都使用 cce 来部署。

mysql redis php apache安装:

Centos7.6安装PHP Apache

Centos安装Mysql

Redis安装

 

容器化改造

在上述步骤中使用的虚拟机中安装 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 安装。

  1. 登录 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 状态,“运行中”说明集群创建成功。