kubernetes Namespace Labels 详解

写在前面:如有问题,以你为准,

目前24年应届生,各位大佬轻喷,部分资料与图片来自网络

内容较长,页面右上角目录方便跳转

namespace 实现资源分组,label实现业务分组

Namespace

基础理论

最重要功能:资源分割,网络隔离(结合NNetworkPolicy)

  1. Namespace是kubernetes系统中一种非常重要的资源,它的主要作用是用来实现

多套系统的资源隔离或者多租户的资源隔离

  1. 默认情况下,kubernetes集群中的所有Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那么此时就可以将两个Pod划分到不同的Namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组”,以方便不同的组的资源进行隔离使用和管理
  2. 可以通过kubernetes的授权机制,将不同的Namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理

如下图中,dev交给开发组部门进行管理,test交给测试组部门进行管理

不同部门之间无法直接通信,分隔资源

label是将pod进行分组和打标签

名称空间在实际开发中如何划分?

  1. ① 基于环境隔离,如:dev(开发)、test(测试)、prod(生产)等。
  2. ② 基于产品线隔离,如:前端、后端、中间件、大数据、Android、iOS、小程序等。
  3. ③ 基于团队隔离,如:企业发展事业部、技术工程事业部、云平台事业部等。

命名规则

  1. ① 不能带小数点(.)。
  2. ② 不能带下划线(_)。
  3. ③ 使用数字、小写字母或减号(-)组成的字符串

自带命名空间

kubernetes在集群启动之后,会默认创建几个namespace

default:所有未指定的Namespace的对象都会被分配在default命名空间。

kube-node-lease:集群节点之间的心跳维护,v1.13开始引入。

kube-public:此命名空间的资源可以被所有人访问(包括未认证用户)。

kube-system:所有由kubernetes系统创建的资源都处于这个命名空间。

实操

命令行实操

查看

namespace=ns

# 查看所有namespace

kubectl get namespace

kubectl get ns

# 指定查看ns

kubectl get ns default

# 指定命名空间的输出格式

kubectl get ns default -o wide/json/yaml

# 查看命名空间的详情

kubectl describe ns default

#Active命名空间正在使用中 Terminating正在删除命名空间

#ResourceQuota针对namespace做的资源限制

#LimitRange针对namespacel中的每个组件做的资源限制

创建 删除
kubectl create ns dev

kubectl delete ns dev

# 注可以通过删除 namespace 来删除隶属于该命名空间的所有pod

yaml 方式

apiVersion: v1
kind: Namespace
metadata:
  name: dev

kubectl create -f ns-dev.yaml

Label

理论

例子:前台和后台程序需要进行通信哪就要再同一个namespace下,这样就没办法进行逻辑上的分组来区分前台和后台,就要使用label来进行逻辑上的分组,同一个组的Pod使用同一个label进行区分

  1. Label是kubernetes的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。
  2. Label的特点:
    1. 一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等。
    2. 一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去
    3. Label通常在资源对象定义时确定,当然也可以在对象创建后动态的添加或删除。
  3. 可以通过Label实现资源的多纬度分组,以便灵活、方便地进行资源分配、调度、配置和部署等管理工作

重点:namespace 实现资源分组,label实现业务分组

label也用于实现Pod调度,污点和容忍

Pod控制器与现有和未来Pod之间连接

Service 与现有和未来Pod之间连接

一些常用的Label标签示例如下:

  1. 版本标签:“version”:”release”,”version”:”stable”
  2. 环境标签:“environment”:”dev”,“environment”:”test”,“environment”:”pro”
  3. 架构标签:“tier”:”frontend”,”tier”:”backend”

标签语法

  1. 标签是一组键值对(key/value),标签的 key 有两个部分:可选的前缀和标签名,通过 / 分隔。
  2. 标签前缀:
    1. 标签前缀部分是可选的。
    2. 如果指定,必须是一个 DNS 的子域名,如:k8s.eip.work 。
    3. 不能多余 253 个字符。
    4. 使用 / 和标签名分隔。

如果省略标签前缀,则标签的 key 就被认为是专属于用户的。Kubernetes 的系统组件

(如:kube-scheduler、kube-controller-manager、kube-apiserver、kubectl

或其他第三方组件)向可以的 Kubernetes 对象添加标签的时候,必须指定一个前缀。

kubernetes.io/ 和 k8s.io/ 这两个前缀是 Kubernetes 核心组件预留的

  1. 标签名:
    1. 标签名部分是必须的。
    2. 不能多余 63 个字符。
    3. 必须由字母、数字开始和结尾。
    4. 可以包含字母、数字、减号(-)、下划线(_)、小数点(.)
  2.  标签的 value :
    1. 不能多于 63 个字符。
    2. 可以为空字符串。
    3. 如果不为空,则必须由字母、数字开始和结尾。
    4. 如果不为空,可以包含字母、数字、减号(-)、下划线(_)、小数点(.)。

Label Selector

  1. 通常来讲,会有多个 Kubernetes 对象包含相同的标签。通过使用标签选择器(label selector),用户/客户端可以选择一组对象。标签选择器是 Kubernetes 中最主要的分类和筛选手段
  2. Kubernetes 的 api-server 支持两种形式的标签选择器,equality-based 基于等式的 和 set-based 基于集合的 。标签选择器可以包含多个条件,并使用逗号进行分隔,此时只要满足所有条件的 Kubernetes对象才会被选中。
  3. 基于等式的标签选择器,可以使用三种操作符 = 、== 、!=。前两个操作符含义是一样的,都代表相等;后一个操作符代表不相等。

标签定义完毕之后,还要考虑到标签的选择,这就要用到Label Selector,即:

    1. Label用于给某个资源对象定义标识。
    2. Label Selector用于查询和筛选拥有某些标签的资源对象

当前有两种Label Selector:

  1. 基于等式的Label Selector。
    1. name=slave:选择所有包含Label中的key=“name”并且value=“slave”的对象。
    2. env!=production:选择所有包含Label中的key=“env”并且value!=“production”的对象。
  2. 基于集合的Label Selector。
    1. name in (master,slave):选择所有包含Label中的key=“name”并且value=“master”或value=“slave”的对象。
    2. name not in (master,slave):选择所有包含Label中的key=“name”并且value!=“master”和value!=“slave”的对象。
  3. 标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号(,)进行分隔即可。
    1. name=salve,env!=production。
    2. name not in (master,slave),env!=production

注解 annotations

注解(annotation) 可以用来向 Kubernetes 对象的 meta.annotations 字段添加任意的信息。Kubernetes 的客户端或者自动化工具可以存取这些信息以实现自定义的逻辑

label 实操

命令行

创建与查看
[root@master k8s]# kubectl get pod -n snj-test --show-labels

NAME             READY   STATUS    RESTARTS   AGE   LABELS

snj-nginx-test   1/1     Running   0          47s   <none>

[root@master k8s]# kubectl label pod -n snj-test snj-nginx-test  version=1.0

pod/snj-nginx-test labeled

[root@master k8s]# kubectl get pod -n snj-test --show-labels

NAME             READY   STATUS    RESTARTS   AGE    LABELS

snj-nginx-test   1/1     Running   0          4m6s   version=1.0
更新与删除

更新关键字段:--overwrite

删除:key-

[root@master k8s]# kubectl label pod -n snj-test snj-nginx-test  version=2.0

error: 'version' already has a value (1.0), and --overwrite is false

[root@master k8s]# kubectl label pod -n snj-test snj-nginx-test  version=2.0 --overwrite

pod/snj-nginx-test labeled

[root@master k8s]# kubectl get pod -n snj-test --show-labels

NAME             READY   STATUS    RESTARTS   AGE     LABELS

snj-nginx-test   1/1     Running   0          5m16s   version=2.0



[root@master k8s]# kubectl label pod -n snj-test snj-nginx-test version-

pod/snj-nginx-test unlabeled

[root@master k8s]# kubectl get pod -n snj-test --show-labels

NAME             READY   STATUS    RESTARTS   AGE     LABELS

snj-nginx-test   1/1     Running   0          8m33s   <none>

yaml

apiVersion: v1

kind: Pod

metadata:

  name: nginx-pod

  labels: # 标签

    app: nginx

    environment: prod

spec:

  containers:

  - name: nginx

    image: nginx

label selector 实操

命令行

key=标签

value=标签值

# 选择了标签名为 `environment` 且 标签值为 `production` 的Kubernetes对象

kubectl get pods -l environment=production,tier=frontend



# 选择了标签名为 `tier` 且标签值不等于 `frontend` 的对象,以及不包含标签 `tier` 的对象

kubectl get pods -l tier != frontend



# 选择所有包含 `partition` 标签的对象

kubectl get pods -l partition



# 选择所有不包含 `partition` 标签的对象

kubectl get pods -l !partition

基于集合标签选择器,可以根据标签名的一组值进行筛选。支持的操作符有三种:

in、notin、exists

# 选择所有的包含 `environment` 标签且值为 `production` 或 `qa` 的对象

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



# 选择所有的 `tier` 标签不为 `frontend` 和 `backend`的对象,或不含 `tier` 标签的对象

kubectl get pods -l tier notin (frontend, backend)



# 选择包含 `partition` 标签(不检查标签值)且 `environment` 不是 `qa` 的对象

kubectl get pods -l partition,environment notin (qa)

yaml

  1. 示例:Job、Deployment、ReplicaSet 和 DaemonSet 同时支持基于等式的选择方式和基于集合的选择方式。

具体的可以看pod和pod 控制器解析笔记

apiVersion: apps/v1

kind: Deployment

metadata:

  name:  nginx

  namespace: default

  labels:

    app:  nginx

spec:

  selector:

    matchLabels:

    # matchLabels 是一个 {key,value} 组成的 map。

    # map 中的一个 {key,value} 条目相当于 matchExpressions 中的一个元素,

    # 其 key 为 map 的 key,operator 为 In, values 数组则只包含 value 一个元素。

    # matchExpression 等价于基于集合的选择方式

      # 支持的 operator 有 In、NotIn、Exists 和 DoesNotExist。

      # 当 operator 为 In 或 NotIn 时,values 数组不能为空。

      # 所有的选择条件都以 AND 的形式合并计算,即所有的条件都满足才可以算是匹配

      app: nginx

    matchExpressions:

      - {key: tier, operator: In, values: [cache]}

      - {key: environment, operator: NotIn, values: [dev]}

  replicas: 1

  template:

    metadata:

      labels:

        app:  nginx

    spec:

      containers:

      - name:  nginx

        image:  nginx:latest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/304500.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring AOP(详解)

目录 1.AOP概述 2.AOP相关术语 3.Spring AOP的原理机制 3.1JDK动态代理 3.2 CGLIB动态代理 3.3简单代码展示 3.3.1JDK动态代理 3.3.2CGLIB动态代理 4.Spring的AOP配置 4.1pom.xml 4.2增强方法 4.3切点 4.4切面 5.基于注解的AOP配置 5.1.创建工程 5.2.增强 5.3AOP…

使用flet创建todo应用

使用 Flet 在 Python 中创建待办事项应用 Create To-Do app in Python with Flet 翻译官网教程https://flet.dev/docs/tutorials/python-todo&#xff0c;对一些地方进行了注释和修改。 安装flet Python版本需要3.8及以上&#xff0c;使用pip安装&#xff1a; pip install…

YY9706.102-2021 医疗设备EMC检测知识-RE

一&#xff1a;RE&#xff08;辐射发射试验&#xff09; 按照GB 4824 6.2.2电磁辐射骚扰限值描述&#xff0c;在相对应的实验室和距离测量时&#xff0c;选择不同的限值进行测量。 以上只列出了1组的A、B类限值&#xff0c;2组设备的限值在6.3章节有介绍&#xff0c;对于我们的…

Backtrader 文档学习-Strategy(下)

Backtrader 文档学习-Strategy&#xff08;下&#xff09; 1. notify_cashvalue # 测试 #notify_cashvalue 方法特点 class Test_Strategy(bt.Strategy): # 策略通用初始参数params ((maperiod1, 5),(maperiod2, 20),(printlog, True), # 写入日志标志(logfilename, Test_…

Vue-8、Vue事件处理

1、点击事件 <!DOCTYPE html> <html lang"en" xmlns:v-model"http://www.w3.org/1999/xhtml" xmlns:v-bind"http://www.w3.org/1999/xhtml"xmlns:v-on"http://www.w3.org/1999/xhtml"> <head><meta charset&quo…

计算机网络—— 概述

概述 1.1 因特网概述 网络、互联网和因特网 网络由若干结点和连接这些结点的链路组成多个网络还可以通过路由器互联起来&#xff0c;这样就构成了一个覆盖范围更大的网络&#xff0c;即互联网&#xff08;或互连网&#xff09;。因特网&#xff08;Internet&#xff09;是世…

react输入框检索树形(tree)结构

input搜索框搜索树形子级内容1. input框输入搜索内容2. 获取tree结构数据3. 与tree匹配输入的内容&#xff0c;tree是多维数组&#xff0c;一级一级的对比输入的内容是否匹配&#xff0c;用forEach循环遍历数据&#xff0c;匹配不到在往下找&#xff0c;直到找到为null &#x…

求求你,别再乱用@Transactional了

求求你&#xff0c;别再乱用Transactional了 文章目录 &#x1f50a;先看个问题&#x1f4d5;情况1情况1结果 &#x1f5a5;️情况2情况2结果 &#x1f4dc; 情况三情况3结果 &#x1f4d8;情况4情况4结果 &#x1f516;先说结论情况1结果情况2结果情况3结果情况4结果&#x1f…

oracle 12c pdb expdp/impdp 数据导入导出

环境 (源)rac 环境 byoradbrac 系统版本&#xff1a;Red Hat Enterprise Linux Server release 6.5 软件版本&#xff1a;Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit byoradb1&#xff1a;172.17.38.44 byoradb2&#xff1a;172.17.38.45 (目的&am…

2024年中职网络安全——Windows操作系统渗透测试(Server2105)

Windows操作系统渗透测试 任务环境说明&#xff1a; 服务器场景&#xff1a;Server2105服务器场景操作系统&#xff1a;Windows&#xff08;版本不详&#xff09;&#xff08;封闭靶机&#xff09;需要环境加Q 目录 1.通过本地PC中渗透测试平台Kali对服务器场景进行系统服务…

区块链金融科技:技术融合与挑战应对【文末送书-16】

文章目录 前言一.区块链与金融科技的融合&#xff1a;革新金融格局的技术之光1.1区块链技术简介1.2 区块链在金融科技中的应用 二.智能合约2.1 去中心化金融&#xff08;DeFi&#xff09;2.2区块链对金融科技的影响2.3数据安全性 三.区块链与金融科技【文末送书-16】3.1 粉丝福…

spring Security源码讲解-Sevlet过滤器调用springSecurty过滤器的流程

承接上文 上一节 http://t.csdnimg.cn/ueSAl 最后讲到了过滤器收集完成注入容器&#xff0c;这节我们来讲Security的Filter是怎么被Spring调用的。 我们先看webSecurity的performBuild方法(), ![在这里插入图片描述](https://img-b 也就是说&#xff0c;最终返回的过滤器对象…

如何利用大语言模型(LLM)打造定制化的Embedding模型

一、前言 在探索大语言模型&#xff08;LLM&#xff09;应用的新架构时&#xff0c;知名投资公司 Andreessen Horowitz 提出了一个观点&#xff1a;向量数据库是预处理流程中系统层面上最关键的部分。它能够高效地存储、比较和检索高达数十亿个嵌入&#xff08;也就是向量&…

解码 Elasticsearch 查询 DSL:利用 Elasticsearch 中的 has_child 和 has_parent 查询进行父子文档搜索

今天&#xff0c;让我们深入研究 has_child 查询和 has_parent 查询&#xff0c;这将帮助我们将 2 个不同的文档组合到一个索引中&#xff0c;从而使我们能够将它们与关系关联起来。 这样做会对我们搜索相关文档时有很大帮助。 在使用 has_child 及 has_parent 这种关系时&…

解决 rasa 中 slot 不能为中文的问题

解决 rasa 中 slot 不能为中文的问题 定位问题解决办法 定位问题 slots:姓名:type: textmappings:- type: custom如上的 slot 配置&#xff0c;在 rasa train 时会报以下错误&#xff1a; YamlValidationException: Failed to validate D:\project\python\rasa_test\y\domain…

Ansys Zemax | 如何使用 ZPL 创建用户自定义求解

附件下载 联系工作人员获取附件 本文使用两个示例演示了如何使用 ZPL 创建用户自定义解。第一个示例介绍了如何创建 ZPL 解以确保序列文件中像面的曲率半径等于系统的 Petzval 曲率。第二个示例介绍了如何在非序列元件编辑器 ( Non-Sequential Component Editor ) 中基于其他…

实战:使用docker容器化服务与文件挂载-2

接着上文&#xff0c;演示Elasticsearch 和 Kibana 的安装&#xff0c;并讲解文件挂载 Elasticsearch of Docker &#xff08;Kibana&#xff09; 1、Elasticsearch 安装 ElasticSearch 使用 Docker 安装&#xff1a;https://www.yuque.com/zhangshuaiyin/guli-mall/dwrp5b 1.…

C++ 实现十大排序算法

教你手撕排序&#xff0c;这里有一个概念就是稳定排序。假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;这些记录的相对次序保持不变&#xff0c;即在原序列中&#xff0c;r[i]r[j]&#xff0c;且r[i]在r[j]之前&#…

vue2 +Html + css 实现房间状态图,酒店前台入住管理系统的设计与开发

一、需求分析 酒店管理系统是指一种可以提高酒店管理效率的软件或平台。其面向酒店前台工作人员和酒店管理员&#xff0c;界面美观大方、操作方便。系统强化以客源为中心的信息完整性、长久性、可操作性&#xff0c;突出以预订、房源、房价等对营销具有影响力的信息处理。 系统…

微服务-sentinel-基本案例,持久化

sentinel 功能 限流 限流文档 直接拒绝&#xff1a;触发阀值直接抛弃。冷启动&#xff1a;在一段时间内针对突发流量缓慢增长处理数量。 3&#xff09;匀速器&#xff1a;请求以均匀的速度通过。 降级降级文档 1&#xff09;RT 统计时间内&#xff0c;大于预设请求数量&…