随着业务的增长,或碰到大促,如果需要扩容,只需要购买ECS加入集群,通过阿里官方控制台直接扩容(见图)就可以达到增加业务的处理能力,速度相当之快,减少以往好多繁琐的步骤。现在只需要有足够的资源,几秒内就可以完成扩容,大大节省运维时间。
通过K8S强大复杂的分配资源原则,尽可能的利用集群各节点的资源,让空余CPU、内存尽量集中在一起,减少内存碎片化, 可以部署更多更大内存应用。
(1)便捷UI操作,无需关心K8S/docker等细节。
(2)ECS只是资源的载体,除此之外完全无视,不再需要记住ECS的密码。
(3)通过镜像,使用同镜像各容器应用配置完全一样,防止之前运维人员配置错误造成的影响。
(4)实现分批发布,替换原通过svn、jenkins发布方式,更加安全、快速。
(5)不再登记应用部署在哪里,维护一大堆文件夹。
(6)通过容器应用监控,了解应用的运行情况,减少之前一台ECS布署多个应用,只能监控到ECS的 性能,到不了每个应用。
云原生迁移中,首先是要创建集群,集群是一组ECS的集合,作为一个整体向ISV提供一组网络资源,这些单个的ECS系统就是集群的节点(node)。
这可能要根据各自的情况来定,对于我们来说,我们还是会习惯性根据功能模块来划分,WEB应用 (用户访问操作系统)一个集群,跟后台定时任务分开,后台定时任务可能又会分很多功能点,如果这 个功能本身就比较大,比如原来就需要10几台以上ECS机器来支持,那我们会单独为这功能点建立一个 集群。这样做的目的主要是为了好管理,耦合度低一点,一旦出问题不会影响其它业务,另外也更容易
计算该集群是否需要增加机器(我们用的是竞争模式)。集群添加多少ECS机器?当我们了解K8S:对于 N台ECS的集群来说,不可调度CPU = N*0.35C + 1C;不可调度内存 = N*500M(折损)+ N* 800M(系统预 留)+ N*100M(系统proxy组件占用) + 1000M(集群其他组件),为了减少资源的操失,原则上应选择大 机器,但有时要考虑到每台ECS的内外宽带的限制,ECS故障影响面,会平衡下不一味选择大机器。
网段代表了这个集群的可用IP数,也就是容器的个数,说下我们碰到的问题,之前我们建了个集 群,网段为192.168.1.0/24,这说明了有256个ip可用,我们加了5台ECS,发布70个实例(容器),我们 希望这70个实例能平均分配到5台ECS来去,实际情况不是这样的,这70个实例全分配其中2台机器上, 另外3台,一个都没有部署,原因是什么呢,原来ECS可用IP是预分配的,这256个ip只够分配到2台机 器,所以如果集群下面的ECS比较多的话,尽可能选择大的网段,后面我们用另一网段10.1.0.0/16重建 集群,就能达到平均部署到不同的宿主机上。
官方提供了好些镜像,如果没有一些特殊的需要可直接使用,也提供健康检查机制,容器内我们的应 用如果挂掉,可通过这种机制自动重启。
如果我们软件本身需要用到一些第三方组件的,比如字体需要支持黑体或截图的组件等等,那就需 要我们来制作镜像了,制作镜像可以更加灵活适应自身的需求。简单描述下我们如何制作带jdk环境的 centos的镜像:
1)安装之前,建议先yum -y upgrade更新软件包。
yum -y upgrade
2)docker安装脚本
安装 Docker
只需通过以下命令即可安装 Docker 软件:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm yum -y install docker-io
可使用以下命令,查看 Docker 是否安装成功:
docker version
若输出了 Docker 的版本号,则说明安装成功了,可通过以下命令启动 Docker 服务:
service docker start 启动 service docker restart 重启
3)配置阿里云加速器
参考阿里云官方:https://cr.console.aliyun.com/undefined/instances/mirrors
4)拉取centos镜像
docker pull centos
默认latest,我们拉取的是7的版本,指令如下:docker pull centos:7。
5)删除镜像
docker rmi -f {repository}:{tag} docker rmi -f {image id}
6)启动容器
只需使用以下命令即可启动容器:
docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash
这条命令比较长,我们稍微分解一下,其实包含以下三个部分:
docker run <相关参数> <镜像 ID> <初始命令>
我们提前在/root/software放置了jdk安装包,进入镜像后在/mnt/software可找到这个安装包进行 安装
7)准备好安装软件放置 /root/software/,进入容器安装
8)制作常驻程序
自已制作镜像有个需要注意的,需要有个常驻程序,证明容器是存活动的,我们在目录 /acs/user下生成start.sh,里面内容为:
#!/bin/sh while : do sleep 60 Done
9)容器生成镜像
不带入口执行,不带环境设置:
docker commit 8bae2d412846 aitui/app:1.0
带入口执行,带环境设置:
docker commit -c='ENTRYPOINT ["/acs/user/start.sh"]' -c='ENV LC_ALL zh_CN.UTF-8' 7356730495d8 aitui/app:1.0