程式狂想筆記

一個攻城師奮鬥史

0%

Kubernetes 的 Label 和 Annotation 小記

Kubernetes 的 Label 和 Annotation 小記

Label

實作

1
2
3
4
kubectl run alpaca-prod \
--image=gcr.io/kuar-demo/kuard-amd64:blue \
--replicas=2 \ # 這個已經廢棄
--labels="ver=1,app=alpaca,env=prod"
1
2
3
4
kubectl run alpaca-test \
--image=gcr.io/kuar-demo/kuard-amd64:green \
--replicas=1 \ # 這個已經廢棄
--labels="ver=2,app=alpaca,env=test"
1
2
3
4
kubectl run bandicoot-prod \
--image=gcr.io/kuar-demo/kuard-amd64:green \
--replicas=2 \ # 這個已經廢棄
--labels="ver=2,app=bandicoot,env=prod"
1
2
3
4
kubectl run bandicoot-staging \
--image=gcr.io/kuar-demo/kuard-amd64:green \
--replicas=1 \
--labels="ver=2,app=bandicoot,env=prod"

Flag --replicas has been deprecated, has no effect and will be removed in the future.

在K8S v1.18.0 以後,–replicas已棄用 ,推薦用 deployment 創建 pods
解决k8s 1.18.0版本 replicas 被弃用问题 - 菜鸟bai - 博客园

1
2
3
4
5
6
 kubectl get pods --show-labels 
# NAME READY STATUS RESTARTS AGE LABELS
# alaca-prod 1/1 Running 0 2m46s app=alpaca,env=prod,ver=1
# alpaca-test 1/1 Running 0 2m11s app=alpaca,env=test,ver=2
# bandicoot-prod 1/1 Running 0 2m4s app=bandicoot,env=prod,ver=2
# bandicoot-staging 1/1 Running 0 117s app=bandicoot,env=prod,ver=2

Remove all the generators from kubectl run. It will now only create pods.
minikube - How to start a pod in command line without deployment in kubernetes? - Stack Overflow

這邊我書上都寫 deployments 想說怎麼跟我電腦跑的結果不一樣

1
2
3
4
5
6
7
kubectl label pods alpaca-test "canary=true"                                                                ✔  22  22:27:42 
# pod/alpaca-test labeled
kubectl get pods alpaca-test -L canary  ✔  23  22:28:03
# NAME READY STATUS RESTARTS AGE CANARY
# alpaca-test 1/1 Running 0 12m true
kubectl label podsalpaca-test "canary-"
# pod/alpaca-test labeled

Label 選擇器

1
2
3
4
5
6
kubectl get pods --show-labels
# NAME READY STATUS RESTARTS AGE LABELS
# alaca-prod 1/1 Running 0 16m app=alpaca,env=prod,ver=1
# alpaca-test 1/1 Running 0 15m app=alpaca,env=test,ver=2
# bandicoot-prod 1/1 Running 0 15m app=bandicoot,env=prod,ver=2
# bandicoot-staging 1/1 Running 0 15m app=bandicoot,env=prod,ver=2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
kubectl get pods --selector="ver=2"
# NAME READY STATUS RESTARTS AGE
# alpaca-test 1/1 Running 0 22m
# bandicoot-prod 1/1 Running 0 22m
# bandicoot-staging 1/1 Running 0 22m
kubectl get pods --selector="app=bandicoot,ver=2"
# NAME READY STATUS RESTARTS AGE
# bandicoot-prod 1/1 Running 0 23m
# bandicoot-staging 1/1 Running 0 23m
kubectl get pods --selector="app in (alpaca,bandicoot)"
# NAME READY STATUS RESTARTS AGE
# alpaca-prod 1/1 Running 0 4m35s
# alpaca-test 1/1 Running 0 26m
# bandicoot-prod 1/1 Running 0 26m
# bandicoot-staging 1/1 Running 0 26m
kubectl get pods --selector="canary"
# No resources found in default namespace.
kubectl get pods --selector='!canary'
# NAME READY STATUS RESTARTS AGE
# alpaca-prod 1/1 Running 0 7m19s
# alpaca-test 1/1 Running 0 29m
# bandicoot-prod 1/1 Running 0 29m
# bandicoot-staging 1/1 Running 0 29m
kubectl get pods -l 'ver=2,!canary'
# NAME READY STATUS RESTARTS AGE
# alpaca-test 1/1 Running 0 30m
# bandicoot-prod 1/1 Running 0 30m
# bandicoot-staging 1/1 Running 0 30m

Yaml 寫 IN 方法

kubectl get pods -l ‘environment in (production, qa)’

1
2
3
4
5
6
selector:
matchLabels:
component: redis
matchExpressions:
- {key: tier, operator: In, values: [cache]}
- {key: environment, operator: NotIn, values: [dev]}

可參考:Labels and Selectors | Kubernetes

舊版寫法(因為相容還是可以跑)

1
2
3
selector:
app: alpaca
ver: 1

Annotation

我看書沒特別介紹
感覺他就是Java HashMap 可以任意存任何key value 值

1
2
3
4
...
metadata:
anotations:
xxxx.com/url: "http://xxxx"

移除範例 pods

1
kubectl delete pods --all

delete 也可以搭配篩選器selector