Kubernetes API资源规范

news/2024/11/13 10:04:57/文章来源:https://www.cnblogs.com/Dxj01/p/18360625

1. 资源类型和资源对象

1.1 资源类型 (Resource Types)

1.1.1 核心资源类型

  • Kubernetes API Primitive
    • 用于描述在Kubernetes上运行应用程序的基本组件,即俗称的Kubernetes对象(Object)
    • 它们持久存储于API Server上,用于描述集群的状态
  • 依据资源的主要功能作为分类标准,Kubernetes的API对象大体可分为如下几个类别
    • 工作负载(Workload)
    • 服务发现和负载均衡(Discovery & LB)
    • 配置和存储(Config & Storage)
    • 集群(Cluster)
    • 元数据(Metadata)
  • “以应用为中心”
    • Kubernetes API Primitive基本都是围绕一个核心目的而设计:如何更好地运行和丰富Pod资源,从而为容器化
    • 应用提供更灵活和更完善的操作与管理组件

1.1.2 核心资源类型(2)

  • 工作负载型资源负责应用编排
  • 服务发现和负载均衡型资源完成服务注册、发现及流量调度
    image

资源类型是指 Kubernetes API 中定义的一类资源。这些资源类型描述了 Kubernetes 集群中可以管理的各种实体或对象。这些类型都是 Kubernetes 的核心构建块,并且通过 API 提供相应的管理操作。

常见的资源类型包括:

  • Pod:最小的可部署单元,通常包含一个或多个容器。
  • Service:定义了一组 Pod 的访问策略,并提供负载均衡功能。
  • Deployment:用于声明应用的期望状态,管理 Pod 的副本集和滚动更新。
  • ConfigMap:用于存储非敏感配置信息,以便 Pod 可以使用。
  • Secret:用于存储敏感数据(如密码、密钥等),并保证其安全性。
  • Namespace:用于将资源分组和隔离,以便不同的团队或项目在同一集群中独立工作。
  • Node:Kubernetes 集群中的一个工作节点,运行 Pod 并由 Kubernetes 管理。
  • Job:一次性任务的控制器,确保指定数量的 Pod 成功完成任务。

2.资源对象 (Resource Objects)

资源对象是特定的 Kubernetes 资源类型的实例。每个资源对象都是集群中一个实际存在的实体,具有唯一的标识符,并且包含具体的配置、状态和元数据。

举例说明:

  • Pod 是一种资源类型,而一个具体名为 nginx-pod 的 Pod 是一个资源对象。
  • Service 是一种资源类型,而一个名为 frontend-service 的 Service 是一个资源对象。

资源对象的组成:

  • Metadata:每个资源对象都有元数据,包括 name(资源对象的名称)、namespace(资源所属的命名空间)、labels(标签)、annotations(注解)等。
  • Spec:spec 字段定义了资源对象的期望状态。例如,Pod 的 spec 中定义了容器的镜像、端口等。
  • Status:status 字段反映了资源对象的实际运行状态,如 Pod 是否正在运行、Service 的端点列表等。

YAML 文件示例:

apiVersion: v1
kind: Pod
metadata:name: nginx-podnamespace: default
spec:containers:- name: nginx-containerimage: nginx:1.21.6ports:- containerPort: 80

在这个例子中:

  • Pod 是资源类型。
  • nginx-pod 是资源对象。

总结:

  • 资源类型:描述了 Kubernetes 中可以管理的一类实体,例如 Pod、Service、Deployment 等。它是一个通用的概念。
  • 资源对象:是具体的、实际存在的 Kubernetes 实体,基于某种资源类型定义。例如,一个具体的 Pod、Service 或 Deployment 实例。

3. API资源规范

资源规范

  • 绝大多数的Kubernetes对象都包含spec和status两个嵌套字段
    • spec字段存储对象的期望状态(或称为应有状态)
      • 由用户在创建时提供,随后也可按需进行更新(但有些属性并不支持就地更新机制)
      • 不同资源类型的spec格式不尽相同
    • status字段存储对象的实际状态(或称为当前状态)
      • 由Kubernetes系统控制平面相关的组件负责实时维护和更新
  • 对象元数据(metadata)
    • 名称、标签、注解和隶属的名称空间(不包括集群级别的资源)等
  • kind和apiVersion两个字段负责指明对象的类型(资源类型)元数据
    • 前者用于指定类型标识
    • 后者负责标明该类型所隶属的API群组(API Group)
     #显示 Kubernetes 集群支持的所有 API 版本~# kubectl api-versions#列出 Kubernetes 集群中可用的所有资源类型及其对应的 API 组、简写、命名空间范围等信息~# kubectl api-resources#查看指定 Kubernetes 资源类型(KIND)中 spec 字段的详细说明,例如 Pod、Deployment、Service,包括该字段的结构、可选项以及具体含义。~# kubectl explain KIND.spec 

API Server

  • 基于HTTP(S)协议暴露了一个RESTful风格的API
  • kubectl命令或其它UI通过该API查询或请求变更API对象的状态
    • 施加于对象之上的基本操作包括增、删、改、查等
    • 通过HTTP协议的GET、POST、DELETE和PUT等方法完成,而对应于kubectl命令,它们则是create、get、describe、delete、patch和edit等子命令
  • 资源对象管理的基本操作:CRUD
    • Create: kubectl create
    • Read: kubectl get/describe
    • Update: kubectl edit/patch/replace/set
    • Delete: kubectl delete

API对象管理

  • 创建对象时,必须向API Server提供描述其所需状态的对象规范、对象元数据及类型元数据
  • 需要在请求报文的body中以JSON格式提供
    • 用户也能够以YAML格式定义对象,提交给API Server后由其自行完成格式转换

资源规范的具体格式

  • https://kubernetes.io/zh-cn/docs/reference/kubernetes-api
  • 内建文档:kubectl explain 命令获取
  • 参考现有资源对象:kubectl get TYPE/NAME -o

4. API资源对象管理

使用客户端程序,对API Server的REST服务端点发请求,请求的body部分要遵循API资源规范

kubectl命令提供了三种类型的对象管理机制

  • 指令式命令(Imperative commands)
    • 直接作用于集群上的活动对象(Live objects)
    • 适合在开发环境中完成一次性的操作任务
  • 指令式对象配置(Imperative object configuration)
    • 基于资源配置文件执行对象管理操作,但只能独立引用每个配置清单文件
    • 可用于生产环境的管理任务
  • 声明式对象配置(Declarative object configuration)
    • 基于配置文件执行对象管理操作
    • 可直接引用目录下的所有配置清单文件,也可直接作用于单个配置文件

4.1 指令式命令 (Imperative Commands)

特点:

  • 直接通过命令行操作来创建、更新或删除资源。
  • 不需要配置文件,操作更快捷和简单,适用于快速操作和实验场景。

适用场景:

  • 快速创建或更新单个资源,或者执行简单的管理任务。
  • 常用于临时性的操作或者当你不需要保存操作的历史记录时。

示例:
创建一个 Pod:

#指定nginx镜像创建一个名为nginx的pod
kubectl run nginx --image=nginx

暴露一个 Pod 作为 Service:

kubectl expose pod nginx --port=80 --target-port=80
#expose 是一个指令式命令,用于为现有的 Pod、Deployment 或 ReplicaSet 创建一个 Service。
#pod nginx 表示要暴露的对象是名称为 nginx 的 Pod。
#--port=80 指定 Service 应该监听的端口号(Service 的端口)。
#--target-port=80 指定 Service 将流量转发到 Pod 内部容器的端口号(容器的端口)。

更新一个 Deployment 的镜像:

kubectl set image deployment/my-deployment nginx=nginx:1.21.6
#更新 my-deployment Deployment 中 nginx 容器的镜像版本为 nginx:1.21.6

4.2 指令式对象配置 (Imperative Object Configuration)

特点:

  • 使用配置文件创建或更新资源,但通过命令行执行命令以立即应用这些更改。
  • 需要配置文件,但执行的方式仍然是指令式的。

适用场景:

  • 当你希望保留资源的配置文件,但仍然想要通过命令行的方式来控制操作时。

示例:
创建或更新资源:

kubectl create -f pod.yaml
#指定从pod.yaml文件中创建资源对象

替换现有资源的配置:

kubectl replace -f pod.yaml
#replace 是一个指令式命令,用于替换现有资源的配置。使用 pod.yaml 文件中的配置替换已有的资源对象(如 Pod),旧资源对象将被删除并重新创建。

4.3 声明式对象配置 (Declarative Object Configuration)

特点:

  • 通过配置文件定义资源的期望状态,并使用 kubectl apply 命令将配置文件应用到集群中。
  • 配置文件成为唯一的真实来源(source of truth),适合持续交付和集成 (CI/CD) 流程。
  • 支持资源的部分更新 (Patch),即只修改配置文件中变化的部分,而保留其他部分不变。

适用场景:

  • 更复杂的部署场景,尤其是在需要版本控制和持续集成的环境中。
  • 保留资源的历史记录,并能够轻松进行版本回滚。

示例:
声明式地创建或更新资源:

kubectl apply -f pod.yaml
#这个命令会将pod文件中的配置与集群中的现有资源进行对比,只应用文件中不同的部分(即支持部分更新)

更新多个资源:

kubectl apply -f ./configs/
#这种方式常用于一次性应用多个资源配置,特别是在 CI/CD 流程中。-f ./configs/ 指定了包含多个配置文件的目录。Kubernetes 将递归读取该目录下的所有 YAML 文件,并根据文件中的定义创建或更新相应的资源。这种方式常用于一次性应用多个资源配置,特别是在 CI/CD 流程中。

总结

  • 指令式命令:适合临时的、简单的管理操作。操作较为简单和快捷,但不适合复杂的场景。
  • 指令式对象配置:适合需要通过配置文件管理但又希望通过命令行快速操作的场景。
  • 声明式对象配置:最适合需要版本控制、持续交付、复杂环境中的场景。操作更为规范和稳定,适合生产环境。

5. 部署并访问应用

部署应用

  • 依照编排需求,选定合适类型的工作负载型控制器
  • 创建工作负载型控制器对象,由其确保运行合适数量的Pod对象
  • 创建Service对象,为该组Pod对象提供固定的访问入口
    image

6.指令式命令

6.1编排应用

image

仅打印资源清单

kubectl create deployment demoapp --image=ikubernetes/demoapp:v1.0 --port=80 --dry-run=client --replicas=3 -o yaml
#--dry-run=client: 表示在客户端执行“模拟运行”,即生成配置文件而不提交到 API 服务器,确保不会实际创建任何资源。
#-o yaml: 指定输出格式为 YAML,方便用户查看或进一步修改。

创建deployment对象,Deployment控制器确保deployment/demoapp中定义

kubectl create deployment demoapp --image=ikubernetes/demoapp:v1.0 --port=80 --replicas=3
#Deployment: 是一种 Kubernetes 控制器,用于管理一组 Pod 的部署和生命周期。它提供滚动更新、回滚、扩缩容等功能。
#replicas=3: 指定该 Deployment 将维护三个运行中的 Pod 副本。
#image=ikubernetes/demoapp:v1.0: 定义容器使用的镜像版本。
#port=80: 指定容器将监听的端口号。

了解完整的资源规范及状态
kubectl get deployments [-o yaml|json]
了解Pod对象的相关信息
kubectl get pods -l app=demoapp -o wide

6.2 创建Service对象

image

#仅打印资源清单
kubectl create service clusterip demoapp --tcp=80:80 --dry-run=client -o yaml
#创建Service对象
kubectl create service clusterip demoapp --tcp=80:80
#了解Service的相关信息
kubectl get services demoapp -o wide
#访问Service
demoappIP=$(kubectl get services demoapp -o jsonpath={.spec.clusterIP})
curl $demoappIP

kubectl常用命令

显示资源

kubectl get TYPE [NAME ...] -o {wide|yaml|json}
kubectl get TYPE/NAME ... -o {wide|yaml|json}

删除资源:

kubectl delete TYPE [NAME ...] 
kubectl delete TYPE/NAME ...

详细的状态描述:

kubectl describe TYPE [NAME ...]
kubectl describe TYPE/NAME ...  

在Pod的某容器内部执行命令:

kubectl exec [-it] POD [-c CONTAINER]  -- COMMAND [args...] [options]

查看容器日志:

kubectl logs [-it] POD [-c CONTAINER]  

命令总结:

kubectl scale deployment, replicaset, or statefulsetkubectl scale TYPE/NAME ... --replicas=COUNT

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一本通信奥解题: 1251:仙岛求药

1251:仙岛求药 时间限制: 1000 ms 内存限制: 65536 KB提交数:31087 通过数: 13638 【题目描述】少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处…

TwinCAT3 - 实现CiA402

目录1,起缘2,想办法3,开搞3.1,CANOpen通信3.1.1 对象字典3.1.2 通信建立3.2,CiA402伺服状态机3.3,伺服运行3.3.1 操作模式3.3.2 轮廓位置模式3.3.3 轮廓速度模式3.3.4 其他4,用起来 1,起缘 在TwinCAT3项目中涉及到轴运动时,通常做法都是在PLC中安装TC1250或者TF5000,…

地理:美国各州首府系列

America1.botson文化重镇波士顿 2.annapolis 3.弗吉尼亚州首府里士满 4.罗得岛州的普罗维登斯 5.加利福尼亚州的萨克拉门托 6.纽约州奥尔巴尼市 7.阿拉巴马州蒙哥马利市 8.alascap 9.arizona 10.little阿肯色州首府小石城 11.康涅狄格州哈特福德市 12.特拉华州多佛市 13.印第安…

利用kafka和kafka connect插件debezium实现oracle表同步

1.kafka安装 1.1.java安装 openjdk下载,建议使用17,至少应该高于版本11 # 进入家目录,解压下载的java包,配置环境变量 tar vxf openjdk-20.0.1_linux-x64_bin.tar.gz -C /usr/local/ vi .bash_profile # 注意要把JAVA的目录放到$PATH之前 export JAVA_HOME=/usr/local/jdk-…

WPF中如何根据数据类型使用不同的数据模板

我们在将一个数据集合绑定到列表控件时,有时候想根据不同的数据类型,显示为不同的效果。 例如将一个文件夹集合绑定到ListBox时,系统文件夹显示为不同的效果,就可以使用模板选择器功能。 WPF提供了一个模板选择器类型DataTemplateSelector,它可以根据数据对象和数据绑定元…

Typecho Joe 导航菜单目录以及搜索关键字回显主题优化版

Joe 是 Typecho 博客中一款开源免费且非常精美的主题,但是这款主题很早就停止维护了,有些功能作者并没有开发,并且在 Typecho 更新到 1.2.1 版本后还出现了一个小 BUG Joe 主题的知名度很高,所以在原作者停止维护后很多大佬发布过自己魔改的版本,不可否认魔改后的主题 BUG…

gdb学习记录

目录如何查看地址值查看当前函数参数多线程调试只暂停指定线程,其他线程不影响总结如何查看地址值 查看下一个地址:x/x 0x12345679 以八进制显示:x/o 0x12345678 以十进制显示:x/d 0x12345678 显示更多的地址和值:x/8xw 0x12345678(显示从该地址开始的8个字(word),每个…

UE4 CharacterMovementComponent

之前在学习网络通信时,经常需要对客户端上的行为进行预测,来降低延迟带来的比较差的体验。而UE4为角色移动提供了CharacterMovementComponent这个组件,其在移动时可以发现已经实现了客户端预测。 现在可以通过对CharacterMovementComponent进行扩展,实现我们自定义的运动模…

抖音coze接入网站实现智能在线客服

在coze.cn上创建好机器人并且可以发布为API,方便接入自己的系统 一定要先创建新令牌,再点发布,并且必须勾选,发布到API 在客服系统gofly.v1kf.com中配置 【菜单】【团队设置】【大模型设置】接口地址部分,请填写扣子的机器人ID 接口密钥部分,请填写扣子的API令牌然后…

centos9(linux): 安装clamav

一,官方网站 https://www.clamav.net/ 如图:二,安装 1,开启epel仓库 [root@blog ~]# yum install -y epel-release 2,安装clamav [root@blog ~]# yum install clamav 说明:病毒库数据较大,200多M,安装时需要等待较长时间 安装完成后查看clamav的版本: [root@blog ~]# clam…

pygame手搓五子棋

代码:#coding=utf-8import os,sys,re,time import pygame import random from win32api import GetSystemMetricspygame.init() pygame.display.set_caption("五子棋")percent = 0.6 screen_width = GetSystemMetrics(0) screen_height = GetSystemMetrics(1) windo…

网站提示404错误:页面未找到怎么办

当网站提示 404 Error 或 “页面未找到” 时,这意味着客户端尝试访问的资源在服务器上不存在或无法找到。这种情况很常见,可以通过以下几个步骤来诊断和解决问题: 常见原因URL 输入错误:这是最常见的原因之一。由于人为疏忽或输入错误,导致请求的 URL 与服务器上实际存在的…