镜像

  • 初始镜像

    • 设定一个业务常用的基础镜像,主要包含一些基础的命令和依赖,例如SSH. JDK/Tomcat/Vim/curl/wget/yum等等
    • 核实业务需要的命令
      • 例如有些业务需要调用脚本解压文件(zip/unrar)等等
      • 有些业务需要使用到node,gm等等
    • 版本标志文件(根据标志文件走不同的启动脚本)
      • Tomcat镜像走tomcat的启动脚本
      • Springboot镜像启动脚本
      • Node启动脚本
      • 后期升级镜像YAML文件基本可以保持不变,仅仅变更TAG即可
    • 不同的JDK尽量保持JDK版本和tomcat变动,其他维持一致,方便管理.

      这些都可以安装到一个镜像当中,大一点么有关系,后期的管理和维护会比较方便. 尽量避免在容器启动时安装命令.

  • 代码

    • 代码直接打到镜像中.
      • 优点,伸缩/重启快,容器启动即可运行代码
      • 缺点,每次都需要重新构建镜像,慢,和初始镜像的工作存在重合且拉去镜像慢,需要消耗磁盘空间
    • 代码通过启动脚本从OSS中下载.
      • 优点,项目启动快,伸缩也不受影响,不必要拉取新的镜像
      • 缺点,上传OSS如果有问题全面影响,启动脚本需要下载OSS文件(内网下载时间不计)
    • Node镜像,Node依赖Node_Module, 需要下载的数据较多,最好使用NFS/NAS挂载
  • 内置工具
    • Java#arthas
    • 有用的脚本
  • 尽量不引入较多的NFS/NAS. 一旦出现诡异的问题,可能搞不定.

    其他

  • 检测

    • 不论使用那种检测方式,最好是能将检测失败的结果记录下来,方便对容器重启进行分析.
  • 业务
    • 成立保障小组,出现问题时能够处理问题
      • 容器重启问题
      • 项目启动问题(发布失败,发布频繁重启等等)