感觉还是不够灵活
关于环境变量
之前一直知道环境变量的重要性,特别是在容器的情况下,但是感觉还是使用不够灵活,比如最近项目中的某个场景,k8集群中启动起来的service要定期的向某一个作为数据中心的service上来发送请求,之前一直是通过dns来做的,k8集群的dns服务会把对应的servicename解析成service portal ip , dns的那个服务启动起来要4个容器,而且配置的参数比较琐碎,还很难确保稳定性。后来一次讨论中才发现原来每次新启动一个pod,这个namespace之下的所有的service的信息,就都被kubectl以环境变量的方式写入到了pod所启动的容器中,这样就可以省不少事,先把那个数据中心的服务以一个service的形式启动起来,之后再启动其他的服务,之后从环境变量中直接读这个service的ip和端口就可以了,真是可以省去不少麻烦事,这个感觉就像是之前听过的小故事:工厂里流水线上有bug有些产品盒子里面没有装上产品,让工人一个一个去检查显然太费事,工程师设置的方案需要对整个流水线重新进行修改,需要花很高的成本,后来一个老师傅想到了一个主意,直接在流水线的最后放一个电风扇,质量没有达标的盒子就全被吹了下去,这样的方式显然与工程师的那种”教科书“路线不是一套,所以有些时候还是要发散思维,需要经验与变通和折衷。
关于k8中rc的特性
k8中通常不会单独创建一个pod,而是通过一个(rc)replication controller来控制pod的数目。这个使用起来也比较灵活,慢慢就有了一些体会,比如要是向删除某个应用,可以先对rc的replica执行update操作,使其数目变为0这样,对应的容器就会被删除了。之后就可以把这个rc和service删除掉,没有影响。有的时候服务会出现以一些奇怪的问题,可以通过重启服务来解决,特别是对于运行在容器中的无状态的应用来说,于是可以在服务出现问题或者需要重启的时候,直接把pod kill掉,这样rc马上就新启动一个pod出来,这样的pod启动方式就比较方便了,也算是rc特性的一个应用。
关于compromise
有好多的时候写程序或者做事情的时候需要compromise,这一点最近有一个体会。开始的时候装k8的集群,要把各个组件都使用docker的方式启动起来,运行apiserver的那个服务的时候,单独二进制文件启动,都比较正常,切换到hyper kube中直接启动,总是各种各样的问题,集群搞不起来,后面的工作就没法进行,折腾了一天也没见效果。后来在老师的提示下,直接把apiserver单独启动了,利用一个busybox的镜像把apiserver的二进制源码放进去,之后启动,好歹把问题解决了。后来才发现,原来是hyper kube中的api server源码与之前的本地二进制代码不是一个版本,有些参数不一样。这种版本的问题遇到过好多次了,大体上还是经验的原因吧,有时这个处理不好会白白耗费许多时间进去。
源码即是说明书
想想好多时候自己做的事情都是挺简单的,按规定的要求设置好合适的参数,把服务启动起来,或者按规定的结构把参数传递过去,好多时候抱怨项目,文档不全,特别是一些开源项目,其实代码就是最好的文档了,比如使用k8的remote api启动pod或者rc的时候,要发送对应的json配置参数过去,每个结构有那些参数,每个参数的含义,在源码中还是写的比较清晰的,开始的时候总是从网上找对应的例子,很难找到合适的,并且由于版本问题,也并不一定适用,对于使用自己比较了解的语言构建的项目,直接找源码反而是比较高效的。
关于kube-in-docker怎么说,其实并没有什么高端的,就是把服务采用容器的方式启动起来而已,由于kubectl可以直接从配置文件中读取信息进来,有点高级的地方,就是以下两个方面:
1 、就是把宿主机中的docker sock挂载进容器中,之后在容器中使用kubectl进行操作,就相当于直接对宿主机进行操作。
2、启动两个docker deamon分别用于监听不同的unix sock 因为在配置的过程中,有一个dockerdeamon要添加一些flannel的参数进来,要重新启动服务,但是像etcd这种容器是不能挂掉的,所以就使用了两个docker deamon。
3、还有一个就是网络方面,关于flannel与docker bridge的配置,这个与之前感觉差不多。
安装路由器
安装路由器这种事总是很麻烦的,尤其是帮别人去安装,之前帮xz去弄一次,学校的网络是各种不方便,这钱这块也不怎么折腾,貌似要l2tp协议的路由器才行,之后弄了好久没弄好,xz还没死心,又换了一个l2tp的路由器,又过去弄,还是没整好,后来一想,恰巧台式机装了无线网卡,直接用那种无线wifi不就得了,还折腾来折腾去,非得搞路由,这个也是不灵活的地方,现在都是软件自定义了。。。