其他分享
首页 > 其他分享> > 闲聊容器的标签

闲聊容器的标签

作者:互联网

序言

    物以类聚,人以群分,朋友越来越少了,不知道是一种悲哀还是一种凄凉。


    你会给自己打什么标签呢?毕竟咱的猪脑子装不下那么多事。

标签化

    容器的每个部分都可以打标签,也就是我们经常谈到的label,例如容器container有标签,镜像image有标签,网络network有标签,存储卷volume有标签,最可恶的居然是dockerd也有标签。


    为什么需要打标签?


    在容器的使用中,打不打标签其实也无所谓,很多的调度算法是根据标签来的,例如k8s里面的pod,打上一个标签,从而指定pod的数量,从而实现流量的负载均衡;例如k8s里面的node,打上不同的标签,从而可以实现根据node的selector来实现定向调度。


    在使用dockerfile编译镜像的时候,可以直接加入label,也可以多个,例如根据环境分类,根据版本分类,根据区域分类,根据架构分类。(镜像的标签)

图片


    在运行时也能直接加入label,从而可以将容器划分为各种环境的,例如生产环境为production。(容器的标签)

图片

    volume也是可以打上标签的。

图片

    网络也是可以打上标签的。

图片

风言风语

    世界上有两种事情不能嘲笑,一个是出身,一个是梦想,除非。。。你真忍不住。


    打标签毫无意义,那为什么要瞎逼逼。因为。。。有更好玩的。

image.png

    在看一眼运行时的状态:

image.png

    你会看出什么?


    容器最主要存在的目的就是提供服务,那么在镜像中就写上健康检查的一些东西,从而更容易使用容器,当你发现容器有问题,可以直接使用label来对服务进行健康检查。


    容器的设计分为两方面,一个是服务的提供,涉及到健康检查,一个则是容器里面的服务,那么就必然存在一个问题,容器的日志怎么来清理。


    如果在容器里面运行了两个服务,一个是nginx,一个是java程序,那么必然会涉及到两方面的清理日志,crond了解一下,nginx使用logrotate,而java使用自身的日志切割即可。


    容器是有大小的,也就是无论是计算,存储,从而在进行设定的时候,需要对容器指定cpu和内存的大小(cpusets和memory),而对于存储,则可以分为两个部分来进行限制,一个是根目录的大小限制,根据projectid来限制,而对于其他的分区,则根据物理机的磁盘大小共享使用限制。


    容器的监控怎么办,其实也是使用定时任务,写一个脚本来监控容器里面的服务,从而定时发送相关的数据到告警系统中,告警系统进行响应规则的定义,然后决定是否告警。

图片

    

    容器启动的时候,我们总是使用一个启动脚本,或者叫做entrypoint,emmm,最简单的方式莫过于一个tail -f,反正也是一直持续的在运行中,然后在中间拉起服务,例如首先拉起nginx,然后拉起java程序。


    再谈谈容器的调度,容器是运行在物理机上的,为了实现容灾效果,从而必然需要将容器分散到docker的集群之中,根据什么来进行调度?这是个好问题。在虚拟机中存在将vm打散的概念,其实容器也是一样的,也需要打散,形神俱散。


    在虚拟机中存在一个overcommit也就是超卖的概念,在容器中其实一样存在,一个56核心的cpu上能运行多少个容器?指定运行容器的core是哪些?超卖比例是多少,emmm,相当复杂,所以当出现cpu的load告警的时候,哗啦啦,一片容器全部告警,一粒老鼠屎,坏了一锅粥,想找出来,略难,告警聚合了解一下。


    

图片

    这个锅我背定了,耶稣也拦不住,我说的。


    技术居然变成了舒适区,不可思议。


    你怕挨打吗?蒙着眼睛假装看不见问题,心不见眼不烦。


    认真而不较真也是很不错的。


标签:容器,从而,标签,label,使用,告警,闲聊
来源: https://blog.51cto.com/15060545/2651712