1 关键原则
1. 通过vpc进行功能模块分区,清晰架构
2. 通过vsw进行网络分区,清晰架构
3. cen的转发路由表连线vpc
4. 能按量付费的就尽量按量付费,规格尽量选小点。
5. 策略相关:基本选均衡策略
6. ess和ack有自带的snat可以上外网,只有普通的ecs需要通过nat网关配置上网。
2 搭建DMZ
1. 画一个单region多可用区:华东1,
2. 创建vpc:vpc-hz-dmz,172.20.0.0/16
3. 创建vsw:vsw-hz-dmz-nat-J,172.20.0.0/24
4. 创建nat:nat-hz-dmz
5. 创建两个eip:eip-hz-main-pro、eip-hz-main-test,带宽50Mbps
6. 创建共享流量包:与eip连线
7. 创建堡垒机(跳过部署):bastionhost-hz-dmz
8. 创建两台cen连接专用vsw:172.20.254.0/25 + 172.20.254.128/25
3 搭建主系统
3.1 生产环境(pro)
1. 创建vpc:vpc-hz-main-pro,172.16.0.0/16
2. 创建两个vsw:(J区172.16.0.0/24、 K区172.16.1.0/24)
3. 每个vsw里6台ecs:实例名称ecs-hz-main-pro-[1,3]、ecs-hz-main-pro-[7,3]
4. 创建redis数据库:kv-hz-main-pro,双可用区,2分片、2副本、12G集群版,白名单CIDR添加两个vsw
5. 创建安全组:sg-hz-main-pro,成员12台ecs + redis,安全组参数默认
6. 创建两台cen连接专用vsw: 172.16.254.0/25、172.16.254.128/25
3.2 测试环境(test)
1. 创建vpc:vpc-hz-main-test,172.17.0.0/16
2. 创建vsw:vsw-hz-main-test-J,172.17.0.0/24
3. 创建两台ecs:centos+ windows系统
4. 为两台ecs创建安全组sg-hz-main-test,参数默认
5. 创建两台cen连接专用vsw:172.17.254.0/25、172.17.254.128/25
4 搭建web子系统
1. 创建vpc:vpc-hz-web,172.18.0.0/16
2. 创建clb(vsw1,172.18.0.0/24):clb-hz-web,
3. 创建eip:eip-hz-web
4. 创建ess弹性伸缩组(vsw2+3):两台ecs+ ess组件(ecs-hz-web-ess-J-001 + ecs-hz-web-ess-K-001 + ess-hz-web),ess启动模板名ess-hz-web-tmp,实例健康检查,配置ess连线clb,监听和后端端口均为80
5. 为两台ecs添加安全组:sg-hz-web
6. rds数据库(vsw4):单可用区部署,100GB,普通账号dbuser,数据库wordpress,授权dbuser读写。
7. 短信服务器ecs-hz-web-sms-J+短信服务(vsw5):
8. ack集群+两vsw(vsw5+6):ack与vsw连线的交换机类型PodAndNode,ack选择pro版,双可用区,Terway,CIDR 10.0.0.0/16,配SNAT,api server简约型,3个Node,系统盘120GB,标准型公网负载均衡
9. 创建ack要用到的急速型nas:nas-hz-web-ack,100GB,不加密。
10. 创建两台cen连接专用vsw:172.18.254.0/25、172.18.254.128/25
11. 创建PTS:pts-hz-web,最低配置即可
5 搭建云企业网CEN
1. 创建cen:cen
2. 创建转发路由器:cen-tr,默认带路由表。
3. cen连线转发路由器
4. 4个vpc连默认路由表:连线配置选择多交换机场景
6 配置外网访问+部署+配置网络
6.1 连线配置外网访问
生产环境ecs、测试环境ecs所在的vsw + 短信服务ecs与dmz中的nat连线,配置SNAT。其中测试环境vpc上网走测试eip。
6.2 部署(注意截图保存)
1. 核对价格
2. 截图保存
6.3 配置外网访问
1. 测试vpc之间的ecs互通,互通说明cen组网没问题
2. 路由发布,解决cen上外网问题:
a) vpc-hz-dmz的路由表里,自定义路由条目-发布0.0.0.0/0目标网段。发布后cen的转发路由表可学习到这条路由。
b) 生产和测试vpc里面的路由表-自定义路由-添加路由条目0.0.0.0/0,下一条指向cen的转发路由器
3. ecs-hz-main-pro-J-001测试ping aliyun.com,截图保存
4. ecs-hz-main-test-K-win测试浏览器访问aliyun.com,截图保存
5. 配置短信服务器ecs访问外网:vpc-hz-web下创建一张新的路由表route-hz-web-sms,专门用于ecs-sms上网,进入路由表,先绑定vsw-sms交换机,然后在自定义路由条目-添加条目GW 0.0.0.0/0,下一跳指向cen的转发路由器。
6. 进入ecs-hz-web-sms-J,测试测试ping aliyun.com,截图保存
6.4 配置RDS
1. 白名单:关联ess和ack中的ecs到rds白名单,通过安全组方式添加,添加ess和ack的安全组,其中ack自动建立的安全组名称叫alicloud-cd-auto开头,这样安全组下的所有ECS实例都可以访问RDS实例。
7 ACK安装wordpress
7.1 一、配置ACR (阿里云容器镜像服务)
1.创建ACR个人版
2.创建ACR的命名空间zhouchong0718和公开仓库wordpress
3.设置ACR的登陆密码:在“访问凭证“处
4.在ack实例ack-hz-web-工作负债-无状态-使用镜像创建下,创建deployment。如果搜索不到wordpress镜像,则跳转到7.2和7.3节,如果能搜索到,跳转7.4节。
7.2 二、安装Docker环境
1. 登录一台开发机(自己买一台,不要用架构内的机器)
2. 通过mirrors.aliyun.com找到docker安装文档,并在开发机安装
3. 在开发机上,通过ACR中的镜像加速配置docker:
4. docker info 验证docker 安装成功
7.3 三、上传wordpress镜像
1.在开发机执行docker pull wordpress
2. 在ACR的仓库中找到上传镜像的命令
$ docker login --username=jika****@gmail.com registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/jikai731/wordpress:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/jikai731/wordpress:[镜像版本号]
3. 注意,docker login使用阿里云账户名作为user,镜像版本号可以用年月日命名
7.4 四、启动工作负担
1. 在NAS控制台为NAS创建挂载点。
2. 在ACK控制台的存储声明中,创建PersistentVolumeClaim
3. 在Deployment配置中的数据卷添加上一步配置的云存储声明PersistentVolumeClaim。
4. 将本地存储声明中的路径复制到云存储声明中。并删除本地存储声明
5、创建负载均衡类的服务Service,命名为wordpress-svc(有了服务后,就能访问到wordpress应用,就可以不用Ingress,除非有更高阶的需求)
7.5 五、配置wordpress中的数据库
0. 终端登录第一个容器组(Pod),安装vi(RUN apt-get update && apt-get install -y vim)
方法2:
1. 在NAS控制台中为开发机所在的VPC添加挂载点
2. 在NAS控制台中将NAS挂载到开发机ECS上
3. 在开发机中使用vi打开wp-config.php
1. 打开wp-config.php,然后到RDS控制台中,获得数据库连接url
2. 修改如下配置
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') );
改为
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'example username') );
改为
define( 'DB_USER', 数据库用户名 );
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'example password') );
改为
define( 'DB_PASSWORD', 数据库密码 );
define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', 'mysql') );
改为
define( 'DB_HOST', 数据库url );
define( 'DB_CHARSET', getenv_docker('WORDPRESS_DB_CHARSET', 'utf8') );
改为
define( 'DB_CHARSET', 'utf8mb4' );
7.6 六、验证和配置wordpress
1. 在ACK控制台创建公网负载均衡类的Service
2. 访问这个负载均衡的外网地址。
3. 页面跳转到http://公网IP/wp-admin/install.php即为数据库配置成功
4. 选择语言,输入初始化标题、用户名aliyun、密码。
5. 使用用户密码登录成功,即为配置成功
7.7 七、上传一张图片,截图保存
1. 输入http://公网IP/地址
2. 点击上方的发布按钮,选择发布页面
3. 在特色图片中输入一种图片
4. 添加一个标题,然后点击发布
5. 记录下发布的页面url
7.8 八、在ACK上安装ECI支持
1. 在组件管理中安装ack-virtual-node组件
2. 在应用市场中安装ack-kubernetes-elastic-workload应用
3. 通过yaml文件安装ElasticWorkload对象,默认pod数为10-20(我的配置2-10-50)
apiVersion: autoscaling.alibabacloud.com/v1beta1 #
kind: ElasticWorkload
metadata:
name: elasticworkload-wordpress
spec:
sourceTarget: # sourceTarget部分主要定义原始负载的类型、副本数目可变化的范围。
name: wordpress
kind: Deployment
apiVersion: apps/v1
min: 2
max: 10
replicas: 50
elasticUnit: # elasticUnit部分是一个数组,定义弹性单元的调度策略,如果有多个弹性单元,则按照模板的顺序定义。
- name: virtual-kubelet
labels:
alibabacloud.com/eci: "true"
上面这段YAML配置文件replicas超过了max规定的值,正常情况不应该大于max值,在这里是因为后续要和HPA配合,实现的效果是Deployment的Pod数初始化直接达到上限10(运行在ECS上),剩余还差40个Pod由ECI弹出,一共50个Pod。初始化后,根据系统负载压力,动态地在2-100之间伸缩。当系统需要小于10个副本时,会分配到wordpress的Deployment上,当需要超过10个副本时,会弹到wordpress-unit-virtual-kubelet的Deployment上(运行在ECI资源上)。当需要缩容时,会优先将弹性单元的副本进行缩容。业务低峰时,最低保留2个副本。
概念:
wordpress Deployment:原始负载应用
wordpress-unit-virtual-kubelet Deployment:弹性单元应用
4. 上步创建ElasticWorkload弹性单元应用后,绑定HPA:通过yaml文件安装HorizontalPodAutoscaler对象(在无状态-wordpress-容器伸缩下添加HPA),弹性最大值设为200左右,cpu设置为20%。(注意:HorizontalPodAutoscaler释放pod对象有延迟)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: elastic-workload-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: ElasticWorkload
name: elasticworkload-wordpress
minReplicas: 2
maxReplicas: 200
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 20
上面这段YAML配置文件是用来创建一个Kubernetes的水平Pod自动伸缩器(HorizontalPodAutoscaler,HPA),并与阿里云ACK服务中的ElasticWorkload资源进行集成,以实现基于CPU利用率的弹性伸缩。它监视名为"elasticworkload-wordpress"的ElasticWorkload资源,并根据Pod的CPU平均使用率进行自动扩缩容。当CPU平均使用率达到或超过20%时,HPA将尝试增加副本数,但始终会在2到200个副本之间进行调整。
5. 创建Ingress:网络-路由-创建。。。网关试着选Nginx或ALB,服务名称选wordpress-svc
6. 验证应用弹性到ECI上。
7. 看考题是否考弹性缩容:查看平均cpu的命令是kubectl describe hpa elastic-workload-hpa
7.9 九、压测
1. 进入PTS控制台,输入页面url
2. 点击压测,输入测试时间和每秒请求数,点击启动压测
3. 观察成功率高低高的曲线并截图
8 附件
8.1 架构图