k8s资源与对象-Label资源和Deployment资源
一、Label资源
Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。
Label的特点:
-
不同Label间的应用是可以互相通信的(而不同Namespace之间的应用无法直接通信)
-
一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等等
-
一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去
-
Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除
可以通过Label实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作。
对已有资源添加Label
一些常用的Label 示例如下: 版本标签:“version”:“release”, “version”:“stable” 环境标签:“environment”:“dev”,“environment”:“test”,“environment”:“prod” 架构标签:“tier”:“frontend”,“tier”:“backend”
Label的选择
标签定义完毕之后,还要考虑到标签的选择,这就要使用到Label Selector,即:
-
Label用于给某个资源对象定义标识
-
Label Selector用于查询和筛选拥有某些标签的资源对象
当前有两种Label Selector:
-
基于等式的Label Selector
-
name = slave: 选择所有包含Label中key="name"且value="slave"的对象
-
env != prod: 选择所有包括Label中的key="env"且value不等于"prod"的对象
-
基于集合的Label Selector
-
name in (master, slave): 选择所有包含Label中的key="name"且value="master"或"slave"的对象
-
name not in (frontend): 选择所有包含Label中的key="name"且value不等于"frontend"的对象
标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号","进行分隔即可。例如:
-
name=slave,env!=prod
-
name not in (frontend),env!=prod
命令方式
#先创建3个nginx的pod(连带各自创建一些pod控制器) kubectl run nginxpod1 --image=nginx --port=80 -n test kubectl run nginxpod2 --image=nginx --port=80 -n test kubectl run nginxpod3 --image=nginx --port=80 -n test # 为pod资源打标签 [root@master ~]# kubectl label pod nginxpod名 version=1.0 -n test pod/nginx-pod labeled # 为pod资源更新标签--overwrite [root@master ~]# kubectl label pod nginxpod名 version=2.0 -n test --overwrite pod/nginx-pod labeled # 为pod资源更新标签,可以用空格分割多个标签 [root@master ~]# kubectl label pod nginxpod名 tier=backend version=3.0 -n test --overwrite pod/nginx-pod labeled # 查看标签 [root@master ~]# kubectl get pod nginxpod名 -n test --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx-pod 1/1 Running 0 10m version=2.0 # 筛选标签 [root@master ~]# kubectl get pod -n test -l version=2.0 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx-pod 1/1 Running 0 17m version=2.0 [root@master ~]# kubectl get pod -n test -l version!=2.0 --show-labels No resources found in dev namespace. #删除标签 [root@master ~]# kubectl label pod nginxpod名 version- -n test pod/nginx-pod labeled
配置方式
创建一个yaml配置文件nginxpod-withlabel.yaml
apiVersion: v1 kind: Namespace metadata: name: prod --- apiVersion: v1 kind: Pod metadata: name: nginxpod namespace: prod labels: version: "3.0" env: "prod" spec: containers: - image: nginx name: pod ports: - name: nginx-port containerPort: 80 protocol: TCP
然后就可以执行对应的更新命令了:kubectl apply -f nginxpod-withlabel.yaml
二、Deployment资源
Pod控制器是什么
在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。
Pod控制器的作用
Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。
Pod控制器的分类
-
deployments
-
replicasets
-
daemonsets
-
jobs
-
cronjobs
-
horizontalpodautoscalers
-
statefulsets
在kubernetes中Pod控制器的种类有很多,本章节只介绍一种:Deployment

命令操作
# 命令格式: kubectl run deployment名称 [参数] # --image 指定pod的镜像 # --port 指定端口 # --replicas 指定创建pod数量 # --namespace 指定namespace # 前置执行kubectl delete namespace test kubectl create namespace test [root@master ~]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3 -n test deployment.apps/nginx created # 查看创建的Pod [root@master ~]# kubectl get pods -n test NAME READY STATUS RESTARTS AGE nginx-5ff7956ff6-6k8cb 1/1 Running 0 19s nginx-5ff7956ff6-jxfjt 1/1 Running 0 19s nginx-5ff7956ff6-v6jqw 1/1 Running 0 19s # 查看deployment的信息 [root@master ~]# kubectl get deploy -n test NAME READY UP-TO-DATE AVAILABLE AGE nginx 3/3 3 3 2m42s # UP-TO-DATE:成功升级的副本数量 # AVAILABLE:可用副本的数量 [root@master ~]# kubectl get deploy -n test -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx 3/3 3 3 2m51s nginx nginx run=nginx # 查看deployment的详细信息 [root@master ~]# kubectl describe deploy nginx -n test Name: nginx Namespace: test CreationTimestamp: Wed, 08 Apr 2023 11:14:14 +0800 Labels: run=nginx Annotations: deployment.kubernetes.io/revision: 1 Selector: run=nginx Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: run=nginx Containers: nginx: Image: nginx:1.14-alpine Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-5ff7956ff6 (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 5m43s deployment-controller Scaled up replicaset nginx-5ff7956ff6 to 3 # 删除 [root@master ~]# kubectl delete deploy nginx -n test deployment.apps "nginx" deleted
配置操作
创建一个nginx-deploy.yaml,内容如下:
其中selector需要与template中的labels有且需要一个标签相关联,不然会报错。而 deployment会给pod生成
apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: test spec: replicas: 3 selector: matchLabels: #与template的labels建立关系 run: nginx template: #创建pod的模板,就类似于上面的container metadata: labels: run: nginx spec: containers: - image: nginx name: nginx ports: - containerPort: 80 protocol: TCP
然后就可以执行对应的创建和删除命令了:
创建:kubectl create -f nginx-deploy.yaml
删除:kubectl delete -f nginx-deploy.yaml
下一篇文章,我们将对Kubernetes中的Service资源进行介绍
更多推荐

所有评论(0)