Docker

  • 记得上次说到的 #1 中提到,需要搭建ELK来实现数据需求,其实还有另一个需求:日志系统。

    联系到最近一直在看的docker,我就直接用它来部署了,申请了台8核16G机器,CentOS7,其实ELK还是得深入看看,毕竟docker只是用来部署,而不是帮你解决日志系统的问题。

    项目地址在这里:https://github.com/xizhibei/docker-elk

    目前的系统架构已经完全不跟fork之前的项目一样了,简单介绍下:

    基础结构

    logstash => elasticsearch => kibana
    这个最简单,对于项目的早期来说,请求量不高,完全够了。

    加Broker

  • 运维了这么些日子的ELK,解决了些问题,总结如下:

    禁止内存换出memlock

    在docker中运行elasticsearch有个很大的问题就是

    bootstrap.mlockall: true

    这个选项不起作用,总是会报错,后来查了一下,在普通机器上需要运行这个命令:

    ulimit -l unlimited

    但是如果你在docker里面运行这个命令,会报错,提示无权限

    解决方法是在运行的时候设置ulimit,我用的docker-compose,于是可以这样设置:

       environment:
          ES_HEAP_SIZE: 4g
          MAX_LOCKED_MEMORY: u
  • 一直以来,我使用的是 rancher,它提供的 k8s 集群非常棒,基于 docker 镜像安装,免去了很多的安装配置细节,如果对于 k8s 的运行原理不想太深入了解、图方便快捷或者只是想尝试功能,那么它会让你绝对满意:在界面上点击配置下就能搭建起一个集群了。

    但是这次我就需要自己真正在机器上搭建起一个原生的集群,折腾下自己。众所周知,k8s 的安装,绝对是个坑,尤其是国内,不翻墙基本上就没戏,对比国外的技术环境,瞬间觉得,国内的技术环境下,能做出好的世界性项目绝对不容易,当然 GFW 除外。

    好了,吐槽结束,下面开始正题。

    工具准备

    首先是代理或者 VPN,这个没的说,不然很多东西都得浪费一

  • 今天把做的项目直接做了docker化,一个是前端纯静态化的,另一个是后端Node.js App,对于这两个项目,想用最简单的方式来使用docker

    静态项目最容易,直接用nginx,将编译好的静态文件直接丢到volums里面即可:

    version: '2'
    services:
      nginx:
        image: nginx:latest
        volumes:
          - ./build:/user/share/nginx/html:ro
        ports:
          - "8080:80"
    

    后端项目有点麻烦,需要写Dockerfile,我觉得dockerfile的编写原则就是

  • 在之前的 CI&CD 实践中,我们一直使用的是 Shell runner,简单来说,就是在一台机器上配置好所有的环境,然后序列地去执行任务。

    很明显,好处是配置非常简单,也很容易 Debug,出了问题,登录到机器上去查找即可;然而坏处就是配置迁移麻烦,也非常容易被破坏环境,而且单台机器上并发比较麻烦,好些的方法是需要配置多个机器,只是这就有些有点浪费资源了。

    因此为了更快,我们需要并行地去执行 CI&CD 任务,这就需要换种更好些的方式了。

    选择其他 Runner

    因此在剩下的几个方式中:

    • Docker:最简单,从 Shell 迁移来说,工作量不大;
    • Docker Machi