Kubernetes Service 深度剖析 - 標籤對於 Service 的影響
討論 Label 對於 Service 的影響
文章目錄
前篇文章介紹 Service 不同存取路徑間的差異,這次我們來討論 Service 和 Label 之間是如何互相影響的。
We encourage use of a unique collection of labels rather than a single unique label value since the additional attributes are generally needed — bgrant0607
在 Kubernetes 最佳實踐中,Pod 本身會帶著許多不同標籤 (Label) 來辨別其實際用途。透過賦予一組唯一的標籤組合 (a unique collection of labels),不僅能擁有更精確的粒度 (granularity) 以外,也能避免操作上出現異常。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: python-http-server
spec:
replicas: 1
selector:
matchLabels:
env: python
svc: http-server
template:
metadata:
labels:
env: python
svc: http-server
spec:
containers:
- name: http-server
image: trinitronx/python-simplehttpserver
command:
- python
args:
- -m
- SimpleHTTPServer
- "80"
ports:
- containerPort: 80
protocol: TCP
從上面 Deployment
範例可以看到,其所控管的 Pod 會帶有 env: python
及 svc: http-server
兩種標籤。更甚者會攜帶所屬的環境標籤進行更細緻的區分,比方說 stage: production
或 stage: canary
。
進到叢集內的流量會根據 Service 的 spec.selector
流至對應的 Pod 內。
apiVersion: v1
kind: Service
metadata:
name: service-example
namespace: default
spec:
selector:
svc: http-server
ports:
- name: https
port: 443
targetPort: 443
protocol: TCP
以上面例子作為舉例,流量會流向全部帶有 svc: http-server
標籤的 Pod (示意圖如下)。
若要提昇操控流量的粒度時,可以透過新增額外標籤的方式,改變其流向。
spec:
selector:
svc: http-server
env: python
...
此時流量便會導向有 svc: http-server
且 (AND) 擁有 env: python
標籤的 Pod 內。
- 在 Kubernetes 1.5 時,多個 Deployment 只攜帶一個標籤且彼此間重覆時,會觸發 selector overlapping 的檢測。解決辦法是增加唯一的標籤組合,此問題在 1.6+ 已透過
Ower Reference
的方式解決。
相關文章
- Kubernetes 兩步安裝一次上手
- Kubernetes Service 深度剖析 - 存取路徑差異
- Kubernetes Service 概念詳解
- 從 Google Kubernetes Engine 移除節點
- 透過 Kubernetes Deployments 實現滾動升級
文章內容的轉載、重製、發佈,請註明出處: https://tachingchen.com/tw/
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Pinterest
Email