首页 > 其他分享 >Kubernetes API相关知识

Kubernetes API相关知识

时间:2023-04-15 18:58:24浏览次数:36  
标签:kubectl Kubernetes deploy 知识 apps nginx v1 API

Kubernetes集群中,所有组件需要操作集群资源时都通过调用kube-apiserver提供的RESTful接口来实现。kube-apiserver进一步和etcd交互,完成资源信息的更新。
Kubernetes中的资源本质上是一个API对象,这个对象的期望状态被APIServer保存在etcd中,然后提供RESTful接口用于更新这些对象。
与kube-apiserver的交互方式可以是直接交互,也可以是通过kubectl或client-go的方式。

准备工作

使用kind准备一个Kubernetes集群

Curl方式访问API

准备工作

kube-apiserver提供的是双向TLS认证的HTTPS服务,所以这里xshell开启一个命令行窗口,通过kubectl代理暴露API Server服务

[root@test ~]# kubectl proxy --port=8080
Starting to serve on 127.0.0.1:8080

在另一个命令行窗口进行测试

[root@test ~]# curl localhost:8080/version
{
  "major": "1",
  "minor": "21",
  "gitVersion": "v1.21.14",
  "gitCommit": "0f77da5bd4809927e15d1658fb4aa8f13ad890a5",
  "gitTreeState": "clean",
  "buildDate": "2022-10-26T15:31:07Z",
  "goVersion": "go1.16.15",
  "compiler": "gc",
  "platform": "linux/amd64"
}

创建nginx-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.14.2
          ports:
            - containerPort: 80

资源创建

curl执行命令

curl -X POST -H \
'Content-Type: application/yaml' \
--data-binary '@nginx-deploy.yaml' \
http://localhost:8080/apis/apps/v1/namespaces/default/deployments

返回参数

{
  "kind": "Deployment",
  "apiVersion": "apps/v1",
  "metadata": {
    "name": "nginx-deploy",
    "namespace": "default",
    "uid": "d6cf96bb-c831-4efd-9e30-3983edb4ceb4",
    "resourceVersion": "1347583",
    "generation": 1,
    "creationTimestamp": "2023-04-15T10:00:41Z",
    "managedFields": [
      {
        "manager": "curl",
        "operation": "Update",
        "apiVersion": "apps/v1",
        "time": "2023-04-15T10:00:41Z",
        "fieldsType": "FieldsV1",
        "fieldsV1": {"f:spec":{"f:progressDeadlineSeconds":{},"f:replicas":{},"f:revisionHistoryLimit":{},"f:selector":{},"f:strategy":{"f:rollingUpdate":{".":{},"f:maxSurge":{},"f:maxUnavailable":{}},"f:type":{}},"f:template":{"f:metadata":{"f:labels":{".":{},"f:app":{}}},"f:spec":{"f:containers":{"k:{\"name\":\"nginx\"}":{".":{},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:ports":{".":{},"k:{\"containerPort\":80,\"protocol\":\"TCP\"}":{".":{},"f:containerPort":{},"f:protocol":{}}},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{}}},"f:dnsPolicy":{},"f:restartPolicy":{},"f:schedulerName":{},"f:securityContext":{},"f:terminationGracePeriodSeconds":{}}}}}
      }
    ]
  },
  "spec": {
    "replicas": 3,
    "selector": {
      "matchLabels": {
        "app": "nginx"
      }
    },
    "template": {
      "metadata": {
        "creationTimestamp": null,
        "labels": {
          "app": "nginx"
        }
      },
      "spec": {
        "containers": [
          {
            "name": "nginx",
            "image": "nginx:1.14.2",
            "ports": [
              {
                "containerPort": 80,
                "protocol": "TCP"
              }
            ],
            "resources": {
              
            },
            "terminationMessagePath": "/dev/termination-log",
            "terminationMessagePolicy": "File",
            "imagePullPolicy": "IfNotPresent"
          }
        ],
        "restartPolicy": "Always",
        "terminationGracePeriodSeconds": 30,
        "dnsPolicy": "ClusterFirst",
        "securityContext": {
          
        },
        "schedulerName": "default-scheduler"
      }
    },
    "strategy": {
      "type": "RollingUpdate",
      "rollingUpdate": {
        "maxUnavailable": "25%",
        "maxSurge": "25%"
      }
    },
    "revisionHistoryLimit": 10,
    "progressDeadlineSeconds": 600
  },
  "status": {
    
  }
}

查看资源对象,已成功创建

[root@test ch3]# kubectl get deploy
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   3/3     3            3           2m15s

资源删除

curl执行命令

curl -X DELETE -H 'Content-Type: application/yaml' \
--data 'gracePeriodSeconds:0 orphanDependents: false' \
http://localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deploy

返回参数

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
    
  },
  "status": "Success",
  "details": {
    "name": "nginx-deploy",
    "group": "apps",
    "kind": "deployments",
    "uid": "d6cf96bb-c831-4efd-9e30-3983edb4ceb4"
  }
}

查看资源对象,已成功删除

[root@test ch3]# kubectl get deploy
No resources found in default namespace.

kubectl raw方式访问API

kubectl raw方式默认使用kubeconfig中的连接信息

[root@test ch3]# kubectl get --raw /version
{
  "major": "1",
  "minor": "21",
  "gitVersion": "v1.21.14",
  "gitCommit": "0f77da5bd4809927e15d1658fb4aa8f13ad890a5",
  "gitTreeState": "clean",
  "buildDate": "2022-10-26T15:31:07Z",
  "goVersion": "go1.16.15",
  "compiler": "gc",
  "platform": "linux/amd64"
}

资源查询

查询Pod信息

kubectl get --raw /apis/apps/v1/namespaces/default/deployments/nginx-deploy

GV & GVK & GVR

  • GV: API Group & Version
    • API Group 是相关 API 功能的集合
    • 每个 Group 拥有一或多个 Versions
  • GVK: Group Version Kind
    • 每个 GV 都包含 N 个 api 类型,称之为 Kinds,不同 Version 同一个 Kinds 可能不同
  • GVR: Group Version Resource
    • Resource 是 Kind 的对象标识,一般来 Kind 和 Resource 是 1:1 的,但是有时候存在 1:n 的关系,不过对于 Operator 来说都是 1:1 的关系

举例说明:

apiVersion: apps/v1 # 这个是 GV,G 是 apps,V 是 v1
kind: Deployment    # 这个就是 Kind
sepc:               # 加上下放的 spec 就是 Resource了
  ...

根据 GVK K8s 就能找到你到底要创建什么类型的资源,根据你定义的 Spec 创建好资源之后就成为了 Resource,也就是 GVR。GVK/GVR 就是 K8s 资源的坐标,是创建/删除/修改/读取资源的基础

标签:kubectl,Kubernetes,deploy,知识,apps,nginx,v1,API
From: https://www.cnblogs.com/ltaodream/p/17321627.html

相关文章

  • API接口的要素以及API的作用说明
    对于很多刚接触的产品小白而言,API接口它是一个产品和研发领域的专业术语,大家可能在一些文章中都已经有接触过API接口的概念。实际上,API接口的应用现如今已经非常广泛和成熟,这个概念主要活跃在公司内部的各系统之间的衔接和对接以及公司间合作的场景。接下来我会从三个方面说明,相信......
  • 浅谈-api项目设计(上)
    从事api后端接口开发也有五六年时间了,都没有好好的整理下api项目架构模板以及如何从零开始设计。抽空写个文章记录下,顺便检查下自己对这块的理解,如有不正确的地方,欢迎底下友好交流。本文的目的是检查自己对架构设计的理解,思考架构设计的意义和常用的设计思想按照软件工程流程。......
  • Vue3组合API自动引入插件
    插件名:unplugin-auto-importurl:https://github.com/antfu/unplugin-auto-import安装1、下载插件npmiunplugin-auto-import-D2、配置vite.config.tsimportvuefrom'@vitejs/plugin-vue'import{defineConfig}from'vite'//引入插件,因为我使用的vite+ts,所以这里引......
  • C指针——知识点集锦
    CPU访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块......
  • 虾皮API接口根据关键词取商品列表(商品详情,库存,排序,价格...)返回值及说明
    参数说明通用参数说明version:API版本key:调用key,测试key:test_api_keyapi_name:API类型[item_search,item_get]cache:[yes,no]默认yes,将调用缓存的数据,速度比较快result_type:[json,xml,serialize,var_export]返回数据格式,默认为jsonlang:[cn,en,ru]翻译语言,默认cn简体中......
  • 【编程工具__收录】知识点及疑难杂症
    GitIDEA如何将Git回退到某个版本springMvcxxxxx......
  • C++基础知识系列-1
    C++基础知识1git基础SVN(集中式版本控制器)和git(分布式版本控制器)区别​ SVN本地没有仓库信息存储代码,代码信息全部存储到云端。本地代码全部push到云端。​ git好处:版本库对提交的代码保存其版本提交记录;每次提交代码push之前先拉取代码pull,再次push时只会push经过改动的地方......
  • C++基础知识系列-3
    设计模式GoF设计模式清单工厂模式和抽象工厂模式在实际开发中使用较少;单例模式是重点,针对一个类的唯一实例;单例模式:通过设计的接口getInstance()获得对象,在接口内部设计只能有一个对象。将类的构造函数定义为私有属性【外部不能创建对象】;定义一个私有的类的静态私有成员变量......
  • C++基础知识系列-2
    C++11新特性C++11易用性改进静态断言使用范围几乎不受限制static_assert断言对象必须是常量表达式,编译期给出断言警告。用于ERROR提示强枚举类型//enum关键字enum class HighSchool: unsigned int {    student,    teacher,    principal};使用强......
  • 虾皮API接口根据关键词取商品列表(商品详情,库存,排序,价格...)返回值及说明
    参数说明通用参数说明version:API版本key:调用key,测试key:test_api_keyapi_name:API类型[item_search,item_get]cache:[yes,no]默认yes,将调用缓存的数据,速度比较快result_type:[json,xml,serialize,var_export]返回数据格式,默认为jsonlang:[cn,en,ru]翻译语言,默认cn简体中文API:i......