首页 文章 精选 留言 我的

精选列表

搜索[腾讯云认证],共10000篇文章
优秀的个人博客,低调大师

每日一博 | 云原生 Kubernetes(k8s)标签详解

文章目录 前言 一、什么是Kubernetes标签 二、设计标签的目的 三、标签的语法 四、标签选择运算符 五、标签的使用 前言 我们知道使用pod控制器创建的pod,在pod故障以后重建后的pod ip地址和名称是变化的,为了解决pod访问问题,我们特此创建了service,我们访问service的ip地址就可以正常访问到pod;那么问题来了,service是怎样去关联pod的呢?在k8s上如果使用pod控制创建的pod,在pod发生故障以后,对应pod会被对应的控制器重启或重建,一个pod重建以后,对应的ip地址和名称都是会发生变化的,所以靠ip地址和名称关联pod是不行的;那靠什么关联pod呢?在k8s上是使用的标签和标签选择器的机制实现资源和资源间相互关联的。 什么是标签?它的作用是干嘛用的? 所谓标签就是指一个键值数据,在k8s上任何资源都可以拥有标签;我们可以在创建资源时在配置清单中指定,也可以创建好资源以后再使用命令添加标签;有了标签以后,我们后续就可以根据标签来管理对应的资源;一个资源可以拥有多个标签,同时一个标签也可以附加给多个资源;我们可以理解为标签就是用来逻辑的对资源进行分组,拥有相同标签的资源为一组;标签的作用是方便用户管理资源;比如在k8s上运行了几百个pod,我们想要管理功能相同的pod,就可以把具有相似功能的pod附加同一个标签,然后要管理这些pod的时,直接指定拥有指定标签的pod即可。 一、什么是Kubernetes标签 要学习 k8s 标签,需要从以下几个方面来学习。 首先,我们需要知道什么是 k8s 标签。 在 k8s 中,标签(Labels)是附加到 k8s 对象(比如 Pods)上的键值对。 标签的一个示例如下所示: “metadata”:{ “labels”:{ “key1” : ”value1” “key2” : ”value2” } } 标签的作用主要有两点: 一是标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。 二是标签可以用于组织和选择对象的子集。 标签的特点主要有如下三点: 1、每个对象都可以定义一组键值标签。 2、每个键对于给定对象必须是唯一的。 3、标签能够支持高效的查询和监听操作,对于用户界面和命令行是很理想的。 二、设计标签的目的 设计标签的主要目的是使用户能够以松耦合的方式将他们自己的组织结构映射到系统对象,而无需客户端存储这些映射。 有如下几个示例标签,例如: 1、在区分发行版本的时候,可以指定: “release” : “canary” “release” : “dev” “release” : “beta” “release” : “stable” …… 2、在定义运行环境时,可以指定: “environment”: “dev” “environment”: “qa” “environment”: “production” …… 三、标签的语法 接着,我们来学习下标签的语法。 1、前缀: 1)前缀是可选的; 2)如果指定,前缀必须是DNS子域:由点“.”分割的一系列DNS标签,总共不超过253个字符,后跟斜杠“/”; 3)如果省略前缀,则假定标签键对用户是私有的。向最终用户对象添加标签的自动系统组件(例如:kube-scheduler、kube-controller-manager、kube-apiserver、kubctl或其他第三方自动化工具)必须指定前缀 2、名称: 1)名称段是必需的 2)必须小于等于63个字符,以字母数字字符“[a-z0-9A-Z]”开头和结尾,带有破折号“—”,下划线“_”,点“.”和之前的字母数字 3、小结:有效的标签值 1)必须为63个字符或更少(可以为空); 2)除非标签值为空,必须以字母数字字符“[a-z0-9A-Z]”开头和结尾; 3)包含破折号“—”,下划线“_”,点“.”和之前的字母数字 示例:是一个有 environment 为 qa,同时 app 为 nginx 标签的 pod 配置文件。 apiVersion:v1 kind:Pod metadata: name:label-demo labels: environment:production app:nginx spec: containers: -name:nginx Image:nginx:1.14.2 Ports: -containerPort:80 四、标签选择运算符 然后,我们来学习下标签选择运算符。 标签选择运算符分为两种: 一种是基于等值的需求: 基于等值或基于不等值的需求允许按标签键和值进行过滤。 可接受的运算符有“=”、“==”、“!=”。 一种是基于集合的需求: 基于集合的标签需求允许你通过一组值来过滤键。 持有三种操作符:“in”、“notin”、“exists”。 最后,我们来学习下如何使用 API 来使用标签。 前面提到的两种标签选择算符都可以通过 REST 客户端用于 list 或者 watch 资源。 基于等值的需求可以使用如下命令来获取 pods。 Kubectl get pods –l environment-production,tier=frontend 基于集合的需求可以使用如下命令来获取 pods。 Kubectl get pods –l ‘environment in (production),tier in (frontend)’ 五、标签的使用 K8S中资源标签label 1、说明 标签label: 资源标志 格式 key=value 可添加删除多个标签 标签选择器 label selector: 用于选择资源 name=name1 name!=name1 name in (name1,name2) name not in (name1,name2) 2、指令 1)帮助: kubectl label --help 2)打标签: pod:kubectl label pods busybox app=busybox node:kubectl label node k8s-node01 k8s-node02 env=test 3)查看: 查看pods为busybox的标签: kubectl get pods busybox --show-labels 查看默认名称空间下所有pod资源的标签: kubectl get pods --show-labels 查看指定名称空间: kubectl get pods -n kube-system --show-labels 4)更新: 加上–overwrite参数修改标签 kubectl label po busybox app=busybox2 -n kube-public --overwrite 5)通过标签筛选: 列出默认名称空间下标签key是app的pod,不显示标签: kubectl get pods -l app 列出默认名称空间下标签key是app、值是busybox的pod,不显示标签: kubectl get pods -l app=busybox 多个筛选条件: kubectl get po -l version!=v1,app=nginx 6)删除: pod:kubectl label po busybox app- -n kube-public node:kubectl label node k8s-node02 env- 3、配置 1)创建label-nginx.yaml apiVersion: v1 kind: Pod metadata: name: nginx namespace: dev labels: version: "1.0.0" env: "test" spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: pod ports: - name: nginx-port containerPort: 80 protocol: TCP 2)创建 kubectl create -f label-nginx.yaml 3)删除 kubectl delete -f label-nginx.yaml 以上就是K8s 标签的介绍。

优秀的个人博客,低调大师

bali 3.2.0 发布:云原生 Python 框架带来的重大变化

更新内容: 新增 引入manager概念🥂 新的优雅的 API 定义🥂PR#122 增加db.Basedeclarative_base 应用增加__clear__方法,方便单元测试 为注册的 Resource 生成 gRPC 服务类🍕PR#125 引入pytest-grpc作为 gRPC 单元测试组件 调整 移除connection.retry_on_deadlock_decorator 移除connection.close_connection 移除bali.schema, 用bali.schemas替代 标识GRPCTestBase废弃, 并将于 v3.5 移除 增加更多的单元测试保证软件质量 🏄‍ 修复 修复请求及项目的初始问题 修复 ModelResource 在注册模式下的问题 -- 让我们来详解一下几个比较大的变化点吧: Model 新增 manager 概念 相信 Django 是很多 Pythonista 的入门框架,Django 的 Model 里面的文档 advanced 部分有关于 manager 的介绍,https://docs.djangoproject.com/en/4.0/topics/db/managers/。Bali 3.2 引入的 manager 概念与 Django 里面的 manager 概念非常相似,只不过调用方式不同。 # Sync user = User.io.first() # Async user = await User.aio.first() Model 新增优雅的异步 API 方案 近些年大部分的语言都拥有了完善的异步 IO 方案,从早期的 JavaScript 里面的 defer、 promise,到 Java 里面的 Netty,Go 里面的 Goroutine。不管哪个方案,都没有 Python 里面这么纠结的就是同步和异步是同时需要提供的。像 JavaScript 的 promise,内置的网络请求返回的总是 promise 对象,你只能用异步 IO 的思维去处理。 还未发布的 Django 4.1 已经在 Model 层增加了异步方法,API 如下: Person.objects.acreate(first_name="Bruce", last_name="Springsteen") Person.objects.afirst(first_name="Bruce", last_name="Springsteen") 可以看到,Django 的 QuerySet 及 Manager 对异步的支持是在原有的单词上增加了 `a`,个人觉得这样让代码可读性及语义化受到了干扰,create 一眼就知道是创建的意思,`acreate`是什么,如果我熟悉 Django,我会猜到这是异步的调用方式,是一个 awatable 的函数。如果业务里面需要自定义一个函数呢,比如 choose_best,这时按 Django 的方案就是 achoose_best 表示异步 IO 的方式。可以看出,choose 并不像 get、create 这么常见的时候,achoose 让我们产生了疑问,单词拼写错误?看 PyCharm 已经用波浪线提示拼写错误了。 Bali 里采用的 API 方案是 Query 使用 io/aio 来区分同步和异步,而对于 Model,自动根据当前的上下文来自适应,看一下使用示例: 使用 Manager 时 # sync user = User.io.create(username=username) # async user = await User.aio.create(username=username) 使用 Model 的实例时 异步示例: async with db.async_session() as session: result = await session.execute( select(User).where(User.username == username) ) user = result.scalars().first() # 由于 user 是在 async_session 的 context 里面查询出来的 # 所以 user 的自带的实例方法(save, delete 等)都自动转换成了异步方法 await user.save() 同步示例: user = User(username=username) user.save() 简化的注册 Resource 的方式 3.2 版本引入了 Resource 的注册使用方式,为了配合这个方式,Bali 将 Application 进行了大量重构及优化。这样一来,main.py 启动入口的代码得到了极大程度的精简。我们看一下对比: 之前版本需要将 HTTP 服务的 routers 及 RPC 服务的 service 分别传入,3.2 的版本只需要指定 title 及注册 Resource 就可以了。对应的 routers 及 service 会在启动时自动去动态生成。 我们再来看一下 Resource 转成 HTTP 服务的方式变化: 之前需要手动在 urls.py 里面手动注册,3.2 将 resource 注册到 app 后,路由相关的文件全部可以移除,是一个可选项。当然旧项目升级时,完全不受影响,因为原来的方案也注册的方式兼容,同时使用原来的定义方案及注册的方式也是可以正常的。 gRPC 的服务文件的极度简化 为什么说是极度简化呢,因为原来的 gRPC 的文件 services/rpc/service.py 这个文件直接可以移除了。 gRPC 的服务文件的极度简化 项目结构 layout structure 的变化对比: 除了 core、logic、biz 等概念,services 也从固定的结构被成了灵活结构,关键是整个 services 都是可选的。如果所有的业务都使用 Resource 开发,将没有 services 文件夹。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册