在看kubernetes的例子時,出現了一個疑問。
Pod、RC、Service的yaml文件里,都出現了labels,還有labelSelector。有些不太清楚,因此就這點來學習下。
接上文:
3.啟動服務器
即使只有一個pod,也要使用service。service起到負載均衡器的作用,通過proxy和selector決定服務請求傳遞給后端的哪個pod。然后對外提供固定的IP和port,所以即使redis master pod遷移變化也沒有影響。
(1)redis master service
附件略。
注釋里的,和redis-master的label對應,是指哪個labels?
現在出現labels的地方:
redis-master-controller.yaml

redis-master-service.yaml

所以究竟是和誰的labels對應?
RC中的label:
參看書《kubernetes的權威指南》的p58.
被RC管控的所有pod實例,都是通過RC里定義的pod模板創建的。
改模板包含pod的標簽屬性,同時RC里包含一個標簽選擇器label selector,它的值表明了該RC所關聯的pod。
RC會保證每個由它創建的pod都包含與它的selector label匹配的label。
所以說,RC里的selector與模板里的label是一致的咯?是的。
可是RC自己的label又是什么?
同樣是p58,例子顯示RC自己的label不與selector與template下的label相同。
service中的label:
參看書《kubernetes權威指南》的p65.
service.yaml文件和RC.yaml文件一樣,都有兩個和label相關的東西。
一個是自己的label,一個是selector。
selector中的標簽和某些pod的label相同,表示service將這些pod納入了集合。對他們進行一些port的設置。
所以這段話的意思是:

service將所有標簽為redis-master(selector的值)的pod作為一個集合來處理。將這個集合里的所有pod的6379端口(port)映射到節點本地的6379端口(targetport)。
並且service還會獲得一個clusterIP。
其實service可以看做pod的一個小組,這個小組里的所有pod有共同的標簽。
綜上所述:
有三個值。
(1)RC的label,與他人無關。
(2)service的label,與他人無關。
(3)pod的label,將會出現三次。RC的template里有個label,以及RC的selector值,Service的selector值。
template里的label=redis,表示rc創建的pod標簽為redis。
RC和service里的selector=redis,表示rc和service將會管理標簽為redis的pod。