概述
kubernetes中有个Label的概念,是用来给集群中的对象打标签的,比如Node, Pod, Service, ReplicationController, ReplicaSet。它采用key=value的形式,在实际运用中这一功能是很有用处的,下面我会着重从给Node打标签为例从各个不同的维度来说明它的神奇的用法。
区分环境
一个发展成熟的互联网公司的产品完整周期包含开发环境、测试环境、预发布环境、生产环境这几个阶段,你可以在你的容器平台中把这几个阶段都包含进去,那怎么区分哪些机器是属于哪种环境呢?这时就用到了Label,比如你可以给测试环境的node1打标签:
kubectl label node node1 zone=test
当然,在实际情况下,开发、测试、预发布、生产这几个环境互相都是不通的或者只是单向通,比如只有生产的机器才能向预发布的机器发送消息,以此类推。如果容器平台需要能操作所有环境,需要网络上打通防火墙。
区分机房
你的容器平台可能会跨多个不同的机房,这样为了把某个应用发布到指定机房就需要在发布的时候指定机房的标签了,比如:
kubectl label node node1 zone=A
区分业务
如果你想在容器平台中给不同的业务分别固定的资源池,就可以给Node打业务标签,比如给广告业务打标签:
kubectl label node node1 business=guanggao
区分Master和Node节点
在openshift中master节点可以是可以被Pod调度使用的,有些情况下你只想要某个应用被调度到master节点上,比如内部镜像库的Pod,再比如构建镜像的Pod。
想象一下,你的容器平台和公司的代码库地址是不通的,那么你怎么从代码库拉取代码来编译构建镜像呢?你肯定会说让网络部开通,那网络部会问你公司的代码库是很重要的,不能随便开,只能让你指定一台或几台机器来开通防火墙,那你要怎么做呢?
解决方法就是把构建镜像的Pod调度到指定节点,比如master节点上,然后开通从master节点到代码库端口443的网络。
具体方法如下:
给master节点打标签:
oc label node master1 region=infra
编辑master的/etc/origin/master/master-config.yaml
把:
projectConfig:
defaultNodeSelector: node-role.kubernetes.io/compute=true
改为:
projectConfig:
defaultNodeSelector: ''
然后重启master服务
在所有的buildconfig中添加:
spec:
nodeSelector:
region: infra
更多容器技术请关注公众号: