K8S(二)—介绍

K8S的整体结构图
image-20231212235043151

k8s对象

在 Kubernetes 系统中,Kubernetes 对象是持久化的实体。 Kubernetes 使用这些实体去表示整个集群的状态。 具体而言,它们描述了如下信息:

  • 哪些容器化应用正在运行(以及在哪些节点上运行)
  • 可以被应用使用的资源
  • 关于应用运行时行为的策略,比如重启策略、升级策略以及容错策略

Kubernetes 对象是一种“意向表达(Record of Intent)”。一旦创建该对象, Kubernetes 系统将不断工作以确保该对象存在。通过创建对象,你本质上是在告知

Kubernetes 系统,你想要的集群工作负载状态看起来应是什么样子的, 这就是 Kubernetes 集群所谓的期望状态(Desired State)

操作 Kubernetes 对象 —— 无论是创建、修改或者删除 —— 需要使用 Kubernetes API。 比如,当使用 kubectl 命令行接口(CLI)时,CLI 会调用必要的 Kubernetes API; 也可以在程序中使用客户端库, 来直接调用 Kubernetes API。

对象规约(Spec)与状态(Status)

几乎每个 Kubernetes 对象包含两个嵌套的对象字段,它们负责管理对象的配置: 对象 spec(规约) 和对象 status(状态)。 对于具有 spec 的对象,你必须在创建对象时设置其内容,描述你希望对象所具有的特征: 期望状态(Desired State)

status 描述了对象的当前状态(Current State),它是由 Kubernetes 系统和组件设置并更新的。在任何时刻,Kubernetes 控制平面 都一直在积极地管理着对象的实际状态,以使之达成期望状态。

例如,Kubernetes 中的 Deployment 对象能够表示运行在集群中的应用。 当创建 Deployment 时,你可能会设置 Deployment 的 spec,指定该应用要有 3 个副本运行。 Kubernetes 系统读取 Deployment 的 spec, 并启动我们所期望的应用的 3 个实例 —— 更新状态以与规约相匹配。 如果这些实例中有的失败了(一种状态变更),Kubernetes 系统会通过执行修正操作来响应 specstatus 间的不一致 —— 意味着它会启动一个新的实例来替换。

描述 Kubernetes 对象

创建 Kubernetes 对象时,必须提供对象的 spec,用来描述该对象的期望状态, 以及关于对象的一些基本信息(例如名称)。 当使用 Kubernetes API 创建对象时(直接创建或经由 kubectl 创建), API 请求必须在请求主体中包含 JSON 格式的信息。 大多数情况下,你需要提供 .yaml 文件为 kubectl 提供这些信息kubectl 在发起 API 请求时,将这些信息转换成 JSON 格式。

这里有一个 .yaml 示例文件,展示了 Kubernetes Deployment 的必需字段和对象 spec

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # 告知 Deployment 运行 2 个与该模板匹配的 Pod
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

这是一个用于创建Deployment对象的Kubernetes配置文件。让我们逐个字段进行解析:

  1. apiVersion: apps/v1:
    这是指定使用的Kubernetes API版本。在这个配置中,使用了apps/v1版本,表示我们将使用apps API组中的v1版本来创建Deployment对象。

  2. kind: Deployment:
    这定义了要创建的Kubernetes对象的类型,这里是一个Deployment对象。

  3. metadata:
    这是Deployment对象的元数据部分,用于定义对象的名称等信息。

  • name: nginx-deployment:
    这是Deployment对象的名称,被设置为"nginx-deployment"。
  1. spec:
    这是Deployment对象的规约部分,描述了期望的状态和配置。
  • selector:
    该字段用于标记将由Deployment控制的Pod。在这里,使用matchLabels来选择拥有标签"app: nginx"的Pod。

  • replicas: 2:
    这指定Deployment所需的Pod副本数为2个。Deployment会确保集群中始终有两个与该模板匹配的Pod在运行,如果Pod数少于2,它会自动创建新的Pod以达到所需的数量。

  • template:
    这是Pod模板,描述了要创建的Pod的配置。

    • metadata:
      这里是Pod的元数据部分。

      • labels:
        这里定义了Pod的标签,标签"app: nginx"与上面的selector匹配,使得Deployment能够控制这些Pod。
    • spec:
      这是Pod的规约部分,描述了Pod的具体配置。

      • containers:
        这是Pod中的容器部分。

        • name: nginx:
          容器的名称被设置为"nginx"。

        • image: nginx:1.14.2:
          这是要使用的nginx镜像及其版本。

        • ports:
          这里定义了容器的端口配置。

          • containerPort: 80:
            容器将监听80端口,使得能够通过该端口访问nginx服务。

以上配置文件描述了一个名为"nginx-deployment"的Deployment对象,它控制运行两个nginx容器副本,并通过标签"app: nginx"来选择这些Pod。每个Pod都包含一个名为"nginx"的容器,使用nginx:1.14.2镜像,并在容器内监听80端口。

相较于上面使用 .yaml 文件来创建 Deployment,另一种类似的方式是使用 kubectl 命令行接口(CLI)中的 kubectl apply 命令, 将 .yaml 文件作为参数。下面是一个示例:

kubectl apply -f https://k8s.io/examples/application/deployment.yaml

输出类似下面这样:

deployment.apps/nginx-deployment created

必需字段

在想要创建的 Kubernetes 对象所对应的 .yaml 文件中,需要配置的字段如下:

  • apiVersion - 创建该对象所使用的 Kubernetes API 的版本
  • kind - 想要创建的对象的类别
  • metadata - 帮助唯一标识对象的一些数据,包括一个 name 字符串、UID 和可选的 namespace
  • spec - 你所期望的该对象的状态

对每个 Kubernetes 对象而言,其 spec 之精确格式都是不同的,包含了特定于该对象的嵌套字段。 Kubernetes API 参考可以帮助你找到想要使用 Kubernetes 创建的所有对象的规约格式。

例如,参阅 Pod API 参考文档中 spec 字段。 对于每个 Pod,其 .spec 字段设置了 Pod 及其期望状态(例如 Pod 中每个容器的容器镜像名称)。 另一个对象规约的例子是 StatefulSet API 中的 spec 字段。 对于 StatefulSet 而言,其 .spec 字段设置了 StatefulSet 及其期望状态。 在 StatefulSet 的 .spec 内,有一个为 Pod 对象提供的模板。 该模板描述了 StatefulSet 控制器为了满足 StatefulSet 规约而要创建的 Pod。 不同类型的对象可以有不同的 .status 信息。API 参考页面给出了 .status 字段的详细结构, 以及针对不同类型 API 对象的具体内容。

label(标签)

在Kubernetes(K8s)中,label是用来附着到资源对象(如Pod、Node、Service等)上的键值对。它是一种元数据,允许您对资源进行更灵活的组织、查询和选择。下面是一些关于Kubernetes中label的详细解释:

    什么是Label:

    • Label是键值对(key-value pair)的元数据,附着在Kubernetes资源对象上。

    • Label不是唯一标识符,多个资源可以共享相同的label。

    Label的作用:

    • 组织和选择: Labels可以用来组织和选择资源对象。您可以使用label选择器(label selectors)来筛选出具有特定label的资源。

    • 路由和调度: Labels可以用于定义服务的路由规则,也可用于调度Pod到特定的Node。

    Label的语法:

    • Label的键和值都是字符串。

    • label键可以包含斜杠(/),但是一些工具可能不支持这种形式。

    Label的附着:

    • Label可以在资源创建时附着,也可以在后期修改。

    • 使用kubectl命令行工具或Kubernetes API可以对资源添加或删除label。

    Label选择器:

    • Label选择器是一种通过label对资源进行查询的机制。

    • 通过使用kubectl或在Pod定义中指定nodeSelector字段,您可以选择特定label的Pod或Node。

    使用Label的例子:

    • Pod调度: 使用Node的label和Pod的nodeSelector字段,可以实现将Pod调度到具有特定属性的Node上。

    • 服务路由: 使用Service的label和Ingress Controller,可以实现基于label的服务路由。

下面是一个Pod定义的示例,其中使用了label和nodeSelector字段:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
  labels:
    app: myapp
    tier: frontend
spec:
  containers:
  - name: mycontainer
    image: nginx
  nodeSelector:
    size: Large

在这个例子中,Pod有两个label:app: myapptier: frontend。它还通过nodeSelector字段指定,只能调度到拥有label size: Large 的Node上。

总体来说,Kubernetes中的label是一项非常有用的功能,使得资源的组织、查询和选择变得更加灵活。

nodeSelector

在 Kubernetes 中,nodeSelector 是一种用于将 Pod 调度到特定节点的机制。通过 nodeSelector,你可以根据节点上的标签进行选择,以确保 Pod 被调度到符合条件的节点上。

以下是 nodeSelector 的详解:

基本语法: nodeSelector 被定义在 Pod 的规范(spec)中,它是一个键值对的映射,其中键是节点标签的键,值是节点标签的值。

nodeSelector:
  key: value

示例: 假设你的节点上有一个标签 size,你可以使用 nodeSelector 将 Pod 调度到具有特定 size 值的节点上。

nodeSelector:
  size: Large

上述配置表示 Pod 将只会被调度到具有标签 size=Large 的节点上。

多个条件: 你可以使用多个键值对来定义多个条件,这样 Pod 将仅在节点满足所有条件时被调度。

nodeSelector:
  size: Large
  environment: production

上述配置表示 Pod 将只会被调度到同时具有标签 size=Largeenvironment=production 的节点上。

查看所有节点及其标签:

这个命令将列出所有节点以及它们的标签

kubectl get nodes --show-labels

查看特定节点的标签:

kubectl get node <node-name> --show-labels

节点选择器和标签的设置: 在将 Pod 调度到节点上之前,确保节点上已经设置了相应的标签。你可以使用 kubectl label nodes <node-name> <label-key>=<label-value> 命令为节点设置标签。

kubectl label nodes node-1 size=Large

删除标签:

kubectl label nodes k8snode1 size-

更改标签值:

kubectl label nodes k8snode1 size=Large --overwrite

如果更改 size 这个标签的值,可以使用 kubectl label 命令,并指定 --overwrite=true 参数

存在性检查: 你还可以使用 exists 来检查节点是否具有某个标签。

nodeSelector:
  size: Exists

上述配置表示 Pod 将只会被调度到具有任何 size 标签的节点上。

nodeSelector 提供了一种简单而有效的方式,通过标签条件将 Pod 调度到特定节点。这对于在节点上部署特定类型的工作负载或应用程序非常有用。

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

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

相关文章

10进制和16进制数据互相翻译(windos版本)

window按winR键出现运行窗口&#xff0c;输入clac回车&#xff0c;进入计算器。 点击左上角&#xff0c;点击程序员&#xff0c;计算器就会变成可以进行进制转化的模式 鼠标点击DEC代表输入10进制&#xff0c;当我输入10时HEX变成A,A就是10转化16进制的数据&#xff0c; 反之如…

如何实现填表后分配序列号、活动抢票抽奖、自助分配座位号?

&#x1f4f1;发布者想要实现让用户在填表后自动分配序列号、座位号&#xff0c;或制作活动抢票抽奖系统&#xff0c;该如何实现&#xff1f; &#x1f4cc;使用教程 &#x1f4d6;案例1&#xff1a;制作活动抽奖系统 使用预置数据分配的随机分配功能&#xff0c;以活动抽奖为例…

实操Nginx(七层代理)+Tomcat多实例部署,实现负载均衡和动静分离

目录 Tomcat多实例部署&#xff08;192.168.17.27&#xff09; 1.安装jdk&#xff0c;设置jdk的环境变量 2.安装tomcat在一台已经部署了tomcat的机器上复制tomcat的配置文件取名tomcat1 ​编辑 编辑配置文件更改端口号&#xff0c;将端口号改为8081 启动 tomcat&#xff…

前端自定义验证码,校验验证码,验证码时效

最近做的项目&#xff0c;不需要后端接口&#xff0c;只需要前端验证&#xff0c;如图 初始页面 获取验证码 验证码的文件&#xff0c;直接复制就行 <template><div class"s-canvas"><canvasid"s-canvas":width"contentWidth":…

【Axure RP9】的详细安装及Axure入门应用

目录 一 Axure入门安装 1.1 Axure是什么? 1.2 Axure应用场景 1.3 Axure安装 1.3.1 汉化 1.3.2 授权 二, Axure应用 1.1 Axure软件界面概述 1.2 Axure的应用 1.2.1备份 1.2.2 视图显示及网格设置 1.2.3 生成HTML文件 1.2.4 备注说明 一 Axure入门安装 1.1 Axure…

吉林省文旅厅联合高德地图上线自驾游精品线路指南

12月15日消息&#xff0c;今日&#xff0c;吉林省文化和旅游厅联合高德地图推出“吉林省自驾游精品线路指南”&#xff0c;依托全省冬夏两季特色资源&#xff0c;推出了基于位置的8条自驾游品牌路线、百余个吉林省重点旅游场景&#xff0c;游客可以根据季节、地理位置、资源类型…

SoC中跨时钟域的信号同步设计(单比特同步设计)

一、 亚稳态 在数字电路中&#xff0c;触发器是一种很常用的器件。对于任意一个触发器&#xff0c;都由其参数库文件规定了能正常使用的“建立时间”&#xff08;Setup time&#xff09;和“保持时间”&#xff08;Hold time &#xff09;两个参数。“建立时间”是指在时钟…

【C语言】C的面向对象

一、BREW接口实现 高通的BREW&#xff08;Binary Runtime Environment for Wireless&#xff09;是一个早期为手机设备开发的应用程序平台&#xff0c;用于开发在CDMA手机上运行的软件。尽管这个平台目前已经不太流行&#xff0c;但是在其使用高峰时期&#xff0c;开发者需要使…

【深度学习目标检测】七、基于深度学习的火灾烟雾识别(python,目标检测,yolov8)

YOLOv8是一种物体检测算法&#xff0c;是YOLO系列算法的最新版本。 YOLO&#xff08;You Only Look Once&#xff09;是一种实时物体检测算法&#xff0c;其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化&#xff0c;提高了检测速度和准确性。…

C/C++ STL提供的序列式容器之deque

deque是双向开口的连续内存空间&#xff08;动态将多个连续空间通过指针数组接合在一起&#xff09;&#xff0c;随时可以增加一段新的空间。 deque 的最大任务就是在这些分段的连续空间上&#xff0c;维护其整体连续的假象&#xff0c;并提供随机存取的接口。 特点 1. 一…

v-show和v-if有什么区别?使用场景分别是什么?

一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else)&#xff0c;都能控制元素在页面是否显示 在用法上也是相同的 <Model v-show"isShow" /> <Model v-if"isShow" />1 2 当表达式为true的时候&…

RK3588安装TVM-CPU版本

1.背景 TVM是一个开源的机器学习编译器栈&#xff0c;用于优化和编译深度学习模型&#xff0c;以在各种硬件平台上实现高效性能。以下是关于TVM的详细介绍&#xff1a; TVM的目标是将深度学习模型的优化和编译过程自动化&#xff0c;以便开发人员可以轻松地将其模型部署到各种…

HACON error #2453:

问题&#xff1a;HALCON handle is NULL in operator grab_image_async" 分析&#xff1a;句柄为空&#xff0c;因为提前hv_AcqHandle.Dispose();将句柄释放掉了 解决方案&#xff1a;屏蔽此语句

【Spring】06 生命周期之销毁回调

文章目录 1. 回调是什么2. 销毁回调2.1 实现 DisposableBean 接口2.2 配置 destroy-method 3. 执行顺序4. 应用场景总结 在 Spring 框架中&#xff0c;生命周期回调&#xff08;Lifecycle Callbacks&#xff09;是一种强大的机制&#xff0c;它允许我们在 Spring 容器中的 Bean…

【Vue】日期格式化(全局)

系列文章 【Vue】vue增加导航标签 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/134965353 【Vue】Element开发笔记 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/133947977 【Vue】vue&#xff0c;在Windows IIS平台…

基于若依搭建微服务nacos版本(ruoyi-Cloud前后端分离)

说明&#xff1a;本文介绍基于Ruoyi-Cloud前后端分离nacos版本的微服务从0到1的搭建过程&#xff0c;同时新增一个新的微服务模块。是基于官方文档的补充说明&#xff0c;需要结合Ruoyi-Cloud的官方文档 https://doc.ruoyi.vip/ruoyi-cloud/ 如果直接查看官方文档便可成功部署&…

Linux Conda 安装 Jupyter

在Linux服务器Conda环境上安装Jupyter过程中遇到了无数的报错&#xff0c;特此记录。 目录 步骤一&#xff1a;安装Anaconda3 步骤二&#xff1a;配置Conda源 步骤三&#xff1a;安装Jupyter 安装报错&#xff1a;simplejson.errors.JSONDecodeError 安装报错&#xff1a;…

Linux---重定向命令

1. 重定向命令的介绍 重定向也称为输出重定向&#xff0c;把在终端执行命令的结果保存到目标文件。 2. 重定向命令的使用 命令说明>如果文件存在会覆盖原有文件内容&#xff0c;相当于文件操作中的‘w’模式>>如果文件存在会追加写入文件末尾&#xff0c;相当于文件…

DevOps云原生创建devops流水线(微服务项目上传git,打包镜像,部署k8s)

开发和运维人员的解决方案 一、中间件的部署&#xff08;Sentinel/MongoDB/MySQL&#xff09; 二、创建DevOps工程 邀请成员 三、创建流水线 四、编辑流水线 ①、拉取代码&#xff08;若失败&#xff0c;则将制定容器改为maven&#xff09; 若失败&#xff0c;则将命令改…

P1789 【Mc生存】插火把

题目描述 话说有一天 linyorson 在“我的世界”开了一个 nn 的方阵&#xff0c;现在他有 m 个火把和 k 个萤石&#xff0c;分别放在 (x1​,y1​)∼(xm​,ym​) 和 (o1​,p1​)∼(ok​,pk​) 的位置&#xff0c;没有光并且没放东西的地方会生成怪物。请问在这个方阵中有几个点会…