首页 > 代码库 > Docker+K8S实践

Docker+K8S实践

一。运维角度:

     (一)镜像:

        1. 避免依赖过深。不要在基础镜像上加太多产生其他的镜像,我觉得这块最多是三四层。

           一层是base景像再往上是工具、中间件这样的,再往上一层就是你自己的程序,再多就比较乱了。

            Base image是CentOS 7

        2. 镜像越小越好,消耗的资源越少越好

        3. 根据应用的差异化,建多个基础镜像

        4. 镜像构建这块,一定要从Dockerfile生成,这样做最大的好处是可以通过Dockerfile“阅读”镜像。

           在后续的协作、升级维护等方面会带来巨大的便利。如果不从Dockerfile生成,以后更新、回滚是很麻烦的。

           我用Dockerfile生成的时候,其他的人可以通过Dockerfile或者镜像就可以阅读这个镜像是怎么来的。

           哪个镜像是base镜像,中间加了哪些软件,运行什么东西

       5.镜像管理这块,虽然我们应用的是原生的,但是这几项只要跟数据有关系的都要考虑。

            单点问题,暂时我们用的是一台机器,不是很安全,对应的解决方案可以考虑DRBD、分布式存储以及云存储。

            性能问题,主要是下载加速,目前可用的解决方案是通过HTTP反向代理缓存来加速Layer的下载。

            权限问题,可以用Nginx LUA提供一个简单快速的实现方案

     (二)日志管理:

          日志管理的话,如果把日志放在容器里面,由于容器是无状态的,所以存储在容器内的日志会随着容器的销毁而消失。

          你要把日志实时保存下来,或者把日志放在宿主机,但是放在宿主机的话,有点违反Docker化不依赖宿主机的任何环境的要求。

           建议放一些日志收集工具如Logstash或者Flume等。

      (三)RC配置

          1. 多实例运行,我们的机器可够跑多个实例的,启动的时候每个实例的占的内存和CPU都要考虑一下

      (四)内核参数的调整:

          1. ulimit

          2. dns

          3. ....

二。开发角度:

     (一)

       1. 程序放在容器里的话,这个程序至少应该是无状态的,不能依赖于宿主机的一切环境,如目录、IP

       2. 以前如果用正常开发的话,root是不让用的,用Docker就可以

Docker+K8S实践