K8S(二)—介绍

news2024/12/22 10:00:11

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 调度到特定节点。这对于在节点上部署特定类型的工作负载或应用程序非常有用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java 进阶篇】Jedis 操作 Hash:Redis中的散列类型

在Redis中&#xff0c;Hash是一种存储键值对的数据结构&#xff0c;它适用于存储对象的多个属性。Jedis作为Java开发者与Redis交互的工具&#xff0c;提供了丰富的API来操作Hash类型。本文将深入介绍Jedis如何操作Redis中的Hash类型数据&#xff0c;通过生动的代码示例和详细的…

Github仓库远程操作——简单版

Github远程操作 github仓库简单的远程操作&#xff0c;更多复杂的功能请参考github官方文档 标题 Github远程操作添加公钥到githubGithub仓库远程操作 远程操作之前&#xff0c;先添加本地的公钥到github 添加公钥到github 创建本地ssh公私钥&#xff1a;使用powershell或者gi…

Kubernetes实战(十三)-使用kube-bench检测Kubernetes集群安全

1 概述 在当今云原生应用的开发中&#xff0c;Kubernetes已经成为标准&#xff0c;然而&#xff0c;随着其使用的普及&#xff0c;也带来了安全问题的挑战。本文将介绍如何使用kube-bench工具来评估和增强Kubernetes集群的安全性。 2 CIS (Center for Internet Security)简介…

DNSLog漏洞探测(三)之XSS漏洞实战

DNSLog漏洞探测(三)之XSS漏洞实战 通过前面的学习&#xff0c;我们已经明白了什么是DNSLog平台&#xff0c;那么DNSLog平台到底能为我们做些什么呢&#xff1f; DNSLog的平台实际使用很长见的一种情况就是针对漏洞无回显的情况&#xff0c;我们通过让受害者的服务器主动发起对…

数据结构之----数组、链表、列表

数据结构之----数组、链表、列表 什么是数组&#xff1f; 数组是一种线性数据结构&#xff0c;它将相同类型的元素存储在连续的内存空间中。 我们将元素在数组中的位置称为该元素的索引。 数组常用操作 1. 初始化数组 我们可以根据需求选用数组的两种初始化方式&#xff…

Docker容器:Centos7搭建Docker镜像私服harbor

目录 1、安装docker 1.1、前置条件 1.2、查看当前操作系统的内核版本 1.3、卸载旧版本(可选) 1.4、安装需要的软件包 1.5、设置yum安装源 1.6、查看docker可用版本 1.7、安装docker 1.8、开启docker服务 1.9、安装阿里云镜像加速器 1.10、设置docker开机自启 2、安…

【Hadoop_05】NN、2NN以及DataNode的工作机制

1、NameNode和SecondaryNameNode1.1 NN和2NN工作机制1.2 Fsimage和Edits解析1.3 CheckPoint时间设置 2、DataNode2.1 DataNode工作机制2.2 数据完整性2.3 掉线时限参数设置 1、NameNode和SecondaryNameNode 1.1 NN和2NN工作机制 思考&#xff1a;NameNode中的元数据是存储在哪…

css选择器介绍

css选择器介绍 01 css概念介绍 用于更改标签的视觉效果 02 css格式 选择器 {属性1&#xff1a;值1&#xff1b;属性2&#xff1a;值2} 03 三种样式 1.内联样式 直接写在标签的style属性中。 优点&#xff1a;简单明显缺点&#xff1a;无法重复使用代码 <img src&quo…

【Amis Low Code 结合FastAPI进行前端框架开发】

官方文档 封装思想 直接复制官网json数据即可开发每个json中的接口由fastapi 转发&#xff08;透传&#xff09;使其开发模式与前端思维一致 基础组件 from amis import Page, Service, App from pydantic import BaseModel, Field from fastapi import FastAPI, Request, …

Node.js 事件循环简单介绍

1.简介 Node.js 事件循环是 Node.js 运行时环境中的一个核心机制&#xff0c;用于管理异步操作和回调函数的执行顺序。它基于事件驱动模型&#xff0c;通过事件循环来处理和派发事件&#xff0c;以及执行相应的回调函数。 Node.js 是单进程单线程应用程序&#xff0c;但是因为…

java版Spring Cloud+Spring Boot+Mybatis之隐私计算 FATE - 多分类神经网络算法测试

一、说明 本文分享基于 Fate 使用 横向联邦 神经网络算法 对 多分类 的数据进行 模型训练&#xff0c;并使用该模型对数据进行 多分类预测。 二分类算法&#xff1a;是指待预测的 label 标签的取值只有两种&#xff1b;直白来讲就是每个实例的可能类别只有两种 (0 或者 1)&…

SpringBoot系列之基于Jedis实现分布式锁

Redis系列之基于Jedis实现分布式锁 1、为什么需要分布式锁 在单机环境&#xff0c;我们使用最多的是juc包里的单机锁&#xff0c;但是随着微服务分布式项目的普及&#xff0c;juc里的锁是不能控制分布锁环境的线程安全的&#xff0c;因为单机锁只能控制同个进程里的线程安全&…

独立完成软件的功能的测试(3)

独立完成软件的功能的测试&#xff08;3&#xff09; &#xff08;12.13&#xff09; 执行测试用例 缺陷相关知识 缺陷的定义&#xff1a;软件再使用过程中出现的错误&#xff0c;Bug 评判标准 少功能&#xff0c;需求规格说明书中明确要求的功能功能错误多功能隐性功能错误…

【1.计算机组成与体系结构】流水线技术

目录 1.流水线的定义2.相关参数计算2.1 流水线计算公式2.2 流水线的吞吐率2.3 流水线加速比计算 3.超标量流水线 1.流水线的定义 流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的&#xff0c;它们可同时为多条指令…

【FPGA/verilog -入门学习9】verilog基于查找表的8位格雷码转换

本文参考&#xff1a;FPGA杂记5——格雷码转换设计-CSDN博客 1&#xff0c;什么是查表法&#xff0c;做什么用&#xff0c;有什么好处 查找表&#xff08;Look-Up-Table&#xff09; 查找表&#xff0c;简单说&#xff0c;就是一个预先存储好结果的数据表 通过访问这张预先存储…

解决:WARNING: Ignoring invalid distribution -ip (d:\python37\lib\site-packages)

解决&#xff1a;WARNING: Ignoring invalid distribution -ip (d:\python37\lib\site-packages) 文章目录 解决&#xff1a;WARNING: Ignoring invalid distribution -ip (d:\python37\lib\site-packages)背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结…

CentOS 7 离线安装MySQL审计插件

命令行 cd /data/toolssz mariadb-10.2.38-linux-x86_64.tar.gztar -zxvf mariadb-10.2.38-linux-x86_64.tar.gzinstall lib/plugin/server_audit.so /usr/lib64/mysql/plugin/mysql -uroot -prootinstall plugin server_audit SONAME server_audit.so;show variables like &q…

【图论-匈牙利算法】Hungary Algorithm完整代码(一) 之 matlab实现

学习参考链接 博客 分配问题与匈牙利算法 带你入门多目标跟踪&#xff08;三&#xff09;匈牙利算法&KM算法 视频 运筹学 | 例题详解指派问题 前言 图论-匈牙利算法原理参见上述参考连接中的博客与BiliBili博主的学习视屏&#xff0c;讲的很好很透彻。强烈建议看完&#…

Idea maven打包时 报错 illegalArgumentException: Malformed \uxxxx encoding 解决方法

1 改变打包命令重新打包 在maven打包命令上加入 -e -X 2 找到报错类和方法 可以看到是 java.util.Properties#loadConvert类方法中有个throw new IllegalArgumentException( "Malformed \\uxxxx encoding.")&#xff0c;在此打断点 3 以Debug方式重新运行maven…

原创改进|多策略融合的改进蜣螂优化算法

作者在前段时间的一篇文章中介绍过了蜣螂优化算法(dung beetle optimizer&#xff0c;DBO)的原理及实现&#xff0c;该算法是由东华大学沈波教授团队在2022年提出[1]&#xff0c;其灵感来自蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为这5种习性&#xff0c;其不同的子种群执行了不…