在 《k8s云集群混搭模式,可能帮你节省50%以上的服务成本》一文中,介绍了使用k8s + 虚拟节点混合集群的方式,为负载具有时间段波峰、波谷交替规律的业务节约成本,提高服务伸缩效率的部署方案。本文对该方案的具体落地步骤与基本运行维护进行分享,为有此需求者提供参考。

部署要求

  1. 应能24小时不间断提供服务
  2. 在业务高峰期到来前能自动扩展指定数量的容器(提前对业务负载进行评估与压测,确定容器数)
  3. 在业务高峰期过后能自动收缩到指定数量的容器
  4. 能根据服务负载情况自动弹性伸缩,避免业务突发情况下服务能力跟不上

 

 


基本概念

   Docker

  • 容器:应用运行的形式

  • 镜像:容器的定义,或打包形式

  • 容器镜像服务:镜像仓库

   

   k8s云混合集群

  • 集群 —— 托管版、专有版、Serverless版

  • 节点 —— Master Node、Worker Node

  • 命名空间(Namespace) 

  • Pod

  • 副本控制器 (Replication Controller)

  • 副本集(Replica Set)

  • 部署(Deployment)

  • 服务(Service)

  • 标签(Labels)

  • 存储卷(Volume)—— PV、PVC

  • Ingress

 

 镜像准备

    Dockerfile定义,这里因为涉及到分布式session的支持(参考[redission-tomcat:快速实现从单机部署到多机部署]),所以加了一些相应的jar依赖与替换配置,根据自身实际情况编写Dockerfile。

复制代码
FROM tomcat:8.5.43-jdk8-openjdk
# 清除无用或需替换的文件,修改容器时区为上海时区
RUN rm -rf /usr/local/tomcat/webapps/* && \
rm -f /usr/local/tomcat/conf/context.xml && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 复制配置文件
COPY ./target/classes/redisson-tomcat/* /usr/local/tomcat/conf/
# 复制需要依赖的jar包
COPY ./dockerimage-depends/*.jar /usr/local/tomcat/lib/
# 替换catalina.sh 解决时区问题
COPY ./dockerimage-depends/catalina.sh /usr/local/tomcat/bin/
# 复制部署war包
COPY ./target/biz-server.war /usr/local/tomcat/webapps/EXPOSE 8080
# 启动时运行tomcat,覆盖默认的启动指令
# 使用catalina.sh run 则catalina.out中日志打印不充分, 使用startup.sh 因为是后台运行,执行就退出了,docker容器也退出了,所以添加tail -F 让其保持前台运行
#CMD ["catalina.sh", "run"]
CMD /usr/local/tomcat/bin/startup.sh && tail -F /usr/local/tomcat/logs/catalina.out
复制代码

 

创建集群(托管版)

参考:https://help.aliyun.com/document_detail/85903.html


专有网络VPC:同一个专有网络中的节点之间,Pod之间可互联

虚拟交换机:多选择几个不同可用区的虚拟交换机

SNAT:如果VPC 不具备公网访问能力,选中配置SNAT会创建 NAT 网关并自动配置 SNAT 规则。如果使用云数据库需要配置IP白名单,或微信公众号配置IP白名单,则服务需要公网IP,有些ECS节点具有公网IP会优先使用,对于没有公网IP的节点或虚拟节点,需要配置SNAT获取公网IP。

 

添加节点

参考:https://help.aliyun.com/document_detail/86919.html

只能添加同一个地域的ECS节点

自动添加:会替换系统盘,原系统盘会被释放(谨慎!)

手动添加:需在ECS上执行指定命令安装必要的软件依赖

 

下图所示在集群中添加了三个ECS节点与一个虚拟节点(virtual-kubelet)

 

添加虚拟节点

参考:https://help.aliyun.com/document_detail/118970.html