命名空间

namespace叫做命名空间,可以把k8s集群划分成多个名称空间,然后对不同的名称空间的资源做隔离,可以控制各个名称空间的入栈,出栈策略,是一种在多个用户之间划分群集资源的方法。(不多讲以后再说)

资源隔离:命名空间可以提供资源隔离,使得不同的团队或项目可以在同一个集群中独立地部署和管理自己的应用程序,而不会相互干扰。资源限制:可以为命名空间设置资源配额和限制,以控制命名空间中可以使用的资源量。权限控制:可以为命名空间设置 RBAC(基于角色的访问控制)策略,以限制对命名空间中资源的访问权限。环境隔离:可以在不同的命名空间中部署不同环境的应用程序,如开发、测试和生产环境。资源组织:可以根据团队、应用程序或者环境的不同,将资源组织在不同的命名空间中,以便更好地管理和监控资源。

查看k8s集群当前有哪些名称空间:kubectl get namespace

Pod的label(标签)

1、标签?

在 Kubernetes 中,标签(Labels)是一种键值对,用于为对象添加元数据。这些标签可以附加到几乎所有的 Kubernetes 资源对象的元数据中,如 Pod、Service、Deployment 等。标签是非常灵活的,它们可以根据你的需求自定义,用于描述对象的特征、属性或环境。参考资料:https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/

键值对格式:标签是以键值对的形式存在的,key值必须是唯一的。例如 web:nginx-tomcat,其中web是键,nginx-tomcat是值。多标签支持:一个对象可以有多个标签,每个标签都由一个键值对组成。灵活性:标签的名称和值可以根据需要自由定义,以适应不同的场景和要求。用途:标签可以用于组织和分类资源,选择器和服务发现,资源调度,监控和日志记录等方面。选择器和关联:标签可以用作选择器,用于定义Kubernetes对象之间的关系。例如,可以使用标签选择器来定义Service 选择哪些 Pod 以提供服务。动态更新:标签可以随时添加、修改或删除,并且对资源的影响是即时生效的。

2、标签的操作命令

查看所有pod资源对象的标签:

kubectl get pods --show-labels

查看带有指定标签(key)web的Pod:

kubectl get pods -L web

显示所有资源对象下(key)web这个标签的标签值

kubectl get pods -l web --show-labels

修改资源的标签

给资源对象打标签要使用label命令,指定给某个类型下的某个资源打标签,资源中的key/value可以是多个。如在nginx-tomcat(pod名字)这个资源下再打个标签env:

kubectl label pods nginx-tomcat env=dev

删除不需要的标签

kubectl label pod nginx-tomcat env-("-"减号)

标签选择器

在 Kubernetes 中,标签选择器(Label Selectors)是一种用于选择具有特定标签的 Kubernetes 对象的机制。标签选择器允许你按照指定的标签条件来筛选出满足条件的对象。与name和UID不同,label不提供唯一性。通常,我们会看到很多对象有着一样的label。通过标签选择器,客户端/用户能方便辨识出一组对象。一个空的label选择器(即有0个必须条件的选择器)会选择集合中的每一个对象。一个null型label选择器(仅对于可选的选择器字段才可能)不会返回任何对象

服务发现:在Service对象中,可以使用标签选择器来指定哪些 Pod 将包含在服务的负载均衡器中,以便于服务发现。Pod 的控制器:诸如 ReplicaSet、Deployment、StatefulSet 等控制器可以使用标签选择器来确定其要管理的 Pod 的集合。资源监控:在监控和日志记录系统中,可以使用标签选择器来选择特定的资源以进行监控和日志记录。

标签选择器有两种类型:Equality-Based(等式选择器)和Set-Based(集合选择器。一个标签选择器可以由多个必须条件组成,由逗号分隔。在多个必须条件指定的情况下,所有的条件都必须满足,因而逗号起着AND逻辑运算符的作用。

Equality-Based(等式选择器)

基于等值关系的标签选择器:=,==,!=

基于相等性或者不相等性的条件允许用label的键或者值进行过滤。匹配的对象必须满足所有指定的label约束,尽管他们可能也有额外的label。有三种运算符是允许的,“=”,“==”和“!=”。前两种代表相等性(他们是同义运算符),后一种代表非相等性。

例如:evn = dev,web != nginx-tomcat

选择器选择标签(key)为evn、web的所有Pod,但evn的标签(value)值包含dev,web的标签(value)值不包含nginx-tomcat

Set-Based(集合选择器)

基于集合的label条件允许用一组值来过滤键。支持三种操作符: in,notin 和 exists(仅针对于key符号)

例如:web in (nginx-tomcat,X1,x2)

env notin (dev,XX1,XX2)

第一个例子表示标签(key)为web并且值(value)等于nginx-tomcat,X1,x2的资源。第二个例子表示标签(key)为env并且值(value)不是dev,XX1,XX2的资源。

标签选择器的混合使用

例如: web in (nginx-tomcat,X1,x2) , env=dev(标签选择器可以由多个必须条件组成,由逗号分隔)

表示标签是web和env并且web标签值是nginx-tomcat,X1,x2,env标签值是dev的资源对象

节点标签Node Labels

在Kubernetes中,可以为节点(Node)添加标签(Labels),这样可以通过标签选择器将特定的Pod调度到具有相应标签的节点上,或者在资源分配和管理中使用这些标签。

查看nodes节点的标签

kubectl get nodes --show-labels

给Node节点打标签

kubectl label nodes node01 env=dev

删除Node节点标签

kubectl label nodes node01 env-

节点选择器nodeSelector

nodeSelector是Kubernetes 中用于 Pod 调度的一种机制,它允许你指定一个标签选择器,以确保 Pod 只会被调度到具有特定标签的节点上。他是一个键值对的集合字符串类型(nodeSelector )参考资料:https://kubernetes.io/docs/concepts/configuration/assign-pod-node/具体使用,请查看下面yaml文件。

简单的yaml文件

apiVersion: v1

kind: Namespace

metadata:

name: nginx-tomcat

---

apiVersion: v1

kind: Pod

metadata:

name: nginx-tomcat

namespace: nginx-tomcat

labels:

web: nginx-tomcat

spec:

hostname: nginx-tom

#nodeName: node02

nodeSelector:

app: to

env: dev

containers:

- name: nginx-test

image: nginx:latest

imagePullPolicy: IfNotPresent

ports:

- name: nginx-post

containerPort: 80

hostPort: 8080

- name: tomcat

image: tomcat

imagePullPolicy: IfNotPresent

ports:

- name: tomcat-post

containerPort: 8080

hostPort: 8081

restartPolicy: Always

#container中的restartPolicy只能在ini容器中设置

#在node01节点打标签为app=to,node02节点app=ng。两个节点均打标签env=dev

#nodeName和nodeSelector不可同时使用,当有nodeName的时候k8s会忽略nodeSelector

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。