当大家都完成第一步往k8s部署
,第二步就是要来好好管理这些container,k8s提供了一个简单又好记的东西,方便大家管理container,那就是label
。
没有透过label管理的pod长的像下图
图片来源
透过定义label的方式来管理pod就像下图
图片来源
使用label看起来是不是比较潮呢
label主要是对pod提供一个可识别的资料,而label是采用key-value的方式储存,在一个pod上面定义的label的key值是要唯一的喔,ex
#正确
"metadata": {
"labels": {
"key1" : "value1",
"key2" : "value2"
}
}
#错误
"metadata": {
"labels": {
"key" : "value1",
"key" : "value2"
}
}
-
、_
与.
因为label的key值不是唯一值(同个pod底下是唯一值),所以多个pod可能会有相同的label,所以就可以使用selector把相同label的pod捞出来,如果有写过jquery的话,跟jquery selector 87分像的东西。
Label selector有二种类型
=
、==
(都是同於)、!=
(不等於)in
、notin
和 exists
部署二个redis,一个是for前端用,一个是for後端用
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-redis-backend
labels:
app.kubernetes.io/name: my-redis
env: dev
user: backend
spec:
serviceName: my-redis-backend
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: my-redis
template:
metadata:
labels:
app.kubernetes.io/name: my-redis
env: dev
user: backend
spec:
containers:
- name: my-redis-backend
image: "redis:latest"
imagePullPolicy: IfNotPresent
args: ["--appendonly", "yes", "--save", "600", "1"]
ports:
- name: redis
containerPort: 6379
protocol: TCP
volumeMounts:
- name: data
mountPath: /data
resources: {}
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-redis-frontend
labels:
app.kubernetes.io/name: my-redis
env: dev
user: frontend
spec:
serviceName: my-redis-frontend
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: my-redis
template:
metadata:
labels:
app.kubernetes.io/name: my-redis
env: dev
user: frontend
spec:
containers:
- name: my-redis-frontend
image: "redis:latest"
imagePullPolicy: IfNotPresent
args: ["--appendonly", "yes", "--save", "600", "1"]
ports:
- name: redis
containerPort: 6379
protocol: TCP
volumeMounts:
- name: data
mountPath: /data
resources: {}
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
部署完成後来看一下pod的资料是否跟预期的一样
kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
dashboard-metrics-scraper-778b77d469-v85pw 1/1 Running 11 11d k8s-app=dashboard-metrics-scraper,pod-template-hash=778b77d469
k0s-nginx-585449566-4nhvn 1/1 Running 0 9h app=nginx,pod-template-hash=585449566
kubernetes-dashboard-5cd89984f5-9vtsm 1/1 Running 11 11d k8s-app=kubernetes-dashboard,pod-template-hash=5cd89984f5
my-redis-0 1/1 Running 0 3m23s app.kubernetes.io/name=my-redis,controller-revision-hash=my-redis-55cc9bcb54,env=dev,statefulset.kubernetes.io/pod-name=my-redis-0,user=frontend
my-redis-backend-0 1/1 Running 0 100s app.kubernetes.io/name=my-redis,controller-revision-hash=my-redis-backend-8d4cc9789,env=dev,statefulset.kubernetes.io/pod-name=my-redis-backend-0,user=backend
my-redis-frontend-0 1/1 Running 0 105s app.kubernetes.io/name=my-redis,controller-revision-hash=my-redis-frontend-dfdc9dc7c,env=dev,statefulset.kubernetes.io/pod-name=my-redis-frontend-0,user=frontend
这时候就可以透过Label Selector进行查询
kubectl get pod -l env=dev
NAME READY STATUS RESTARTS AGE
my-redis-0 1/1 Running 0 4m11s
my-redis-backend-0 1/1 Running 0 2m28s
my-redis-frontend-0 1/1 Running 0 2m33s
除了在yaml里面宣告label外,也可以透过kubectl语法进行设定
#新增label
kubectl label pods my-redis-backend-0 iamrich=true
pod/my-redis-backend-0 labeled
kubectl get pod -l iamrich=true
NAME READY STATUS RESTARTS AGE
my-redis-backend-0 1/1 Running 0 5m23s
#删除label
kubectl label pods my-redis-backend-0 iamrich-
pod/my-redis-backend-0 labeled
kubectl get pod -l iamrich=true
No resources found in kubernetes-dashboard namespace.
以上大致上就是label的动手做罗
<<: Day7 跟着官方文件学习Laravel-开始学习Command用法
昨天讲了怎麽将阵列的东西叫出来,那今天讲要怎麽知道阵列里面有多少笔资料 其实用 length 就好了...
└第九章、绩效评估 9.1监视、量测、分析与评估 • 监视>通常主管会盯啦,每周进度报告这样。...
Heap Heap(堆积)是一个阵列,可以把它看作类似完全二元树(也就是按照顺序排放的树)。 p.s...
强型闯入DenoLand[34] - 浅谈跨来源资源共用(CORS)与解决办法 在谈完 Web A...
昨天讲完Convolution,接着今天要介绍的就是Max Pooling。 CNN - Max P...