k8s源码学习- kubernetes API

网友投稿 334 2022-09-11

k8s源码学习- kubernetes API

kubernetes API 是什么?

是apiserver提供的一个api接口,可以被主控节点、工作节点或者原生的k8s应用直接调用,也可以被集群外的一些客户端调用,比如kubectl

kubernetes API 功能有哪些?

读取状态,例如获取单个对象、列出对象、获取变更信息

操作,创建、更新、删除对象

kubernetes API 接口调用

接口文档:​​API 命令行使用

使用kubectl调用kubernetes API

例如通过kubectl查看deployment coredns

➜➜ ~ kubectl get deployment coredns -n kube-system -o yamlapiVersion: apps/v1kind: Deploymentmetadata: annotations: deployment.kubernetes.io/revision: "1" creationTimestamp: "2022-03-08T13:58:03Z" generation: 4 labels: k8s-app: kube-dns name: coredns namespace: kube-system resourceVersion: "966292" uid: 9dc3a398-6b3c-42e7-954e-508520fb3c6dspec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: k8s-app: kube-dns .......

使用kubectl proxy代理kubernetes API

启动代理(自动处理了身份认证和授权)

➜ ~ kubectl proxy --port=8080Starting to serve on 127.0.0.1:8080

发送 ~ curl "kind": "APIGroupList", "apiVersion": "v1", "groups": [ { "name": "apiregistration.k8s.io", "versions": [ { "groupVersion": "apiregistration.k8s.io/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "apiregistration.k8s.io/v1", "version": "v1" } }, { "name": "apps", "versions": [ { "groupVersion": "apps/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "apps/v1", "version": "v1" } }, { "name": "events.k8s.io", "versions": [ { "groupVersion": "events.k8s.io/v1", "version": "v1" }, { "groupVersion": "events.k8s.io/v1beta1", "version": "v1beta1" } ], "preferredVersion": { "groupVersion": "events.k8s.io/v1", "version": "v1" } }, { "name": "authentication.k8s.io", "versions": [ { "groupVersion": "authentication.k8s.io/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "authentication.k8s.io/v1", "version": "v1" } }, { "name": "authorization.k8s.io", "versions": [ { "groupVersion": "authorization.k8s.io/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "authorization.k8s.io/v1", "version": "v1" } }, { "name": "autoscaling", "versions": [ { "groupVersion": "autoscaling/v2", "version": "v2" }, { "groupVersion": "autoscaling/v1", "version": "v1" }, { "groupVersion": "autoscaling/v2beta1", "version": "v2beta1" }, { "groupVersion": "autoscaling/v2beta2", "version": "v2beta2" } ], "preferredVersion": { "groupVersion": "autoscaling/v2", "version": "v2" } }, { "name": "batch", "versions": [ { "groupVersion": "batch/v1", "version": "v1" }, { "groupVersion": "batch/v1beta1", "version": "v1beta1" } ], "preferredVersion": { "groupVersion": "batch/v1", "version": "v1" } }, { "name": "certificates.k8s.io", "versions": [ { "groupVersion": "certificates.k8s.io/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "certificates.k8s.io/v1", "version": "v1" } }, { "name": "networking.k8s.io", "versions": [ { "groupVersion": "networking.k8s.io/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "networking.k8s.io/v1", "version": "v1" } }, { "name": "policy", "versions": [ { "groupVersion": "policy/v1", "version": "v1" }, { "groupVersion": "policy/v1beta1", "version": "v1beta1" } ], "preferredVersion": { "groupVersion": "policy/v1", "version": "v1" } }, { "name": "rbac.authorization.k8s.io", "versions": [ { "groupVersion": "rbac.authorization.k8s.io/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "rbac.authorization.k8s.io/v1", "version": "v1" } }, { "name": "storage.k8s.io", "versions": [ { "groupVersion": "storage.k8s.io/v1", "version": "v1" }, { "groupVersion": "storage.k8s.io/v1beta1", "version": "v1beta1" } ], "preferredVersion": { "groupVersion": "storage.k8s.io/v1", "version": "v1" } }, { "name": "admissionregistration.k8s.io", "versions": [ { "groupVersion": "admissionregistration.k8s.io/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "admissionregistration.k8s.io/v1", "version": "v1" } }, { "name": "apiextensions.k8s.io", "versions": [ { "groupVersion": "apiextensions.k8s.io/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "apiextensions.k8s.io/v1", "version": "v1" } }, { "name": "scheduling.k8s.io", "versions": [ { "groupVersion": "scheduling.k8s.io/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "scheduling.k8s.io/v1", "version": "v1" } }, { "name": "coordination.k8s.io", "versions": [ { "groupVersion": "coordination.k8s.io/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "coordination.k8s.io/v1", "version": "v1" } }, { "name": "node.k8s.io", "versions": [ { "groupVersion": "node.k8s.io/v1", "version": "v1" }, { "groupVersion": "node.k8s.io/v1beta1", "version": "v1beta1" } ], "preferredVersion": { "groupVersion": "node.k8s.io/v1", "version": "v1" } }, { "name": "discovery.k8s.io", "versions": [ { "groupVersion": "discovery.k8s.io/v1", "version": "v1" }, { "groupVersion": "discovery.k8s.io/v1beta1", "version": "v1beta1" } ], "preferredVersion": { "groupVersion": "discovery.k8s.io/v1", "version": "v1" } }, { "name": "flowcontrol.apiserver.k8s.io", "versions": [ { "groupVersion": "flowcontrol.apiserver.k8s.io/v1beta2", "version": "v1beta2" }, { "groupVersion": "flowcontrol.apiserver.k8s.io/v1beta1", "version": "v1beta1" } ], "preferredVersion": { "groupVersion": "flowcontrol.apiserver.k8s.io/v1beta2", "version": "v1beta2" } } ]}

访问apis/apps/v1

➜ ~ curl "kind": "APIGroup", "apiVersion": "v1", "name": "apps", "versions": [ { "groupVersion": "apps/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "apps/v1", "version": "v1" }}%➜ ~ curl "kind": "APIResourceList", "apiVersion": "v1", "groupVersion": "apps/v1", "resources": [ { "name": "controllerrevisions", "singularName": "", "namespaced": true, "kind": "ControllerRevision", "verbs": [ "create", "delete", "deletecollection", "get", "list", "patch", "update", "watch" ], "storageVersionHash": "85nkx63pcBU=" }, { "name": "daemonsets", "singularName": "", "namespaced": true, "kind": "DaemonSet", "verbs": [ "create", "delete", "deletecollection", "get", "list", "patch", "update", "watch" ], "shortNames": [ "ds" ], "categories": [ "all" ], "storageVersionHash": "dd7pWHUlMKQ=" }, { "name": "daemonsets/status", "singularName": "", "namespaced": true, "kind": "DaemonSet", "verbs": [ "get", "patch", "update" ] }, { "name": "deployments", "singularName": "", "namespaced": true, "kind": "Deployment", "verbs": [ "create", "delete", "deletecollection", "get", "list", "patch", "update", "watch" ], "shortNames": [ "deploy" ], "categories": [ "all" ], "storageVersionHash": "8aSe+NMegvE=" }, { "name": "deployments/scale", "singularName": "", "namespaced": true, "group": "autoscaling", "version": "v1", "kind": "Scale", "verbs": [ "get", "patch", "update" ] }, { "name": "deployments/status", "singularName": "", "namespaced": true, "kind": "Deployment", "verbs": [ "get", "patch", "update" ] }, { "name": "replicasets", "singularName": "", "namespaced": true, "kind": "ReplicaSet", "verbs": [ "create", "delete", "deletecollection", "get", "list", "patch", "update", "watch" ], "shortNames": [ "rs" ], "categories": [ "all" ], "storageVersionHash": "P1RzHs8/mWQ=" }, { "name": "replicasets/scale", "singularName": "", "namespaced": true, "group": "autoscaling", "version": "v1", "kind": "Scale", "verbs": [ "get", "patch", "update" ] }, { "name": "replicasets/status", "singularName": "", "namespaced": true, "kind": "ReplicaSet", "verbs": [ "get", "patch", "update" ] }, { "name": "statefulsets", "singularName": "", "namespaced": true, "kind": "StatefulSet", "verbs": [ "create", "delete", "deletecollection", "get", "list", "patch", "update", "watch" ], "shortNames": [ "sts" ], "categories": [ "all" ], "storageVersionHash": "H+vl74LkKdo=" }, { "name": "statefulsets/scale", "singularName": "", "namespaced": true, "group": "autoscaling", "version": "v1", "kind": "Scale", "verbs": [ "get", "patch", "update" ] }, { "name": "statefulsets/status", "singularName": "", "namespaced": true, "kind": "StatefulSet", "verbs": [ "get", "patch", "update" ] } ]}

访问/apis/batch/v1

➜ ~ curl "kind": "APIGroup", "apiVersion": "v1", "name": "batch", "versions": [ { "groupVersion": "batch/v1", "version": "v1" }, { "groupVersion": "batch/v1beta1", "version": "v1beta1" } ], "preferredVersion": { "groupVersion": "batch/v1", "version": "v1" }}%➜ ~ curl "kind": "APIResourceList", "apiVersion": "v1", "groupVersion": "batch/v1", "resources": [ { "name": "cronjobs", "singularName": "", "namespaced": true, "kind": "CronJob", "verbs": [ "create", "delete", "deletecollection", "get", "list", "patch", "update", "watch" ], "shortNames": [ "cj" ], "categories": [ "all" ], "storageVersionHash": "sd5LIXh4Fjs=" }, { "name": "cronjobs/status", "singularName": "", "namespaced": true, "kind": "CronJob", "verbs": [ "get", "patch", "update" ] }, { "name": "jobs", "singularName": "", "namespaced": true, "kind": "Job", "verbs": [ "create", "delete", "deletecollection", "get", "list", "patch", "update", "watch" ], "categories": [ "all" ], "storageVersionHash": "mudhfqk/qZY=" }, { "name": "jobs/status", "singularName": "", "namespaced": true, "kind": "Job", "verbs": [ "get", "patch", "update" ] } ]}

也可以使用 kubectl get --raw /apis/batch/v1 访问kubernetes 的HTTP API,结果与curl ~ kubectl get --raw /apis/batch/v1 |jq '.'{ "kind": "APIResourceList", "apiVersion": "v1", "groupVersion": "batch/v1", "resources": [ { "name": "cronjobs", "singularName": "", "namespaced": true, "kind": "CronJob", "verbs": [ "create", "delete", "deletecollection", "get", "list", "patch", "update", "watch" ], "shortNames": [ "cj" ], "categories": [ "all" ], "storageVersionHash": "sd5LIXh4Fjs=" }, { "name": "cronjobs/status", "singularName": "", "namespaced": true, "kind": "CronJob", "verbs": [ "get", "patch", "update" ] }, { "name": "jobs", "singularName": "", "namespaced": true, "kind": "Job", "verbs": [ "create", "delete", "deletecollection", "get", "list", "patch", "update", "watch" ], "categories": [ "all" ], "storageVersionHash": "mudhfqk/qZY=" }, { "name": "jobs/status", "singularName": "", "namespaced": true, "kind": "Job", "verbs": [ "get", "patch", "update" ] } ]}

查看集群提供的资源

➜ ~ kubectl api-resourcesNAME SHORTNAMES APIVERSION NAMESPACED KINDbindings v1 true Bindingcomponentstatuses cs v1 false ComponentStatusconfigmaps cm v1 true ConfigMapendpoints ep v1 true Endpointsevents ev v1 true Eventlimitranges limits v1 true LimitRangenamespaces ns v1 false Namespacenodes no v1 false Nodepersistentvolumeclaims pvc v1 true PersistentVolumeClaimpersistentvolumes pv v1 false PersistentVolumepods po v1 true Podpodtemplates v1 true PodTemplatereplicationcontrollers rc v1 true ReplicationControllerresourcequotas quota v1 true ResourceQuotasecrets v1 true Secretserviceaccounts sa v1 true ServiceAccountservices svc v1 true Servicemutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfigurationvalidatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfigurationcustomresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinitionapiservices apiregistration.k8s.io/v1 false APIServicecontrollerrevisions apps/v1 true ControllerRevisiondaemonsets ds apps/v1 true DaemonSetdeployments deploy apps/v1 true Deploymentreplicasets rs apps/v1 true ReplicaSetstatefulsets sts apps/v1 true StatefulSettokenreviews authentication.k8s.io/v1 false TokenReviewlocalsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReviewselfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReviewselfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReviewsubjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReviewhorizontalpodautoscalers hpa autoscaling/v2 true HorizontalPodAutoscalercronjobs cj batch/v1 true CronJobjobs batch/v1 true Jobcertificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequestleases coordination.k8s.io/v1 true Leaseendpointslices discovery.k8s.io/v1 true EndpointSliceevents ev events.k8s.io/v1 true Eventflowschemas flowcontrol.apiserver.k8s.io/v1beta2 false FlowSchemaprioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta2 false PriorityLevelConfigurationingressclasses networking.k8s.io/v1 false IngressClassingresses ing networking.k8s.io/v1 true Ingressnetworkpolicies netpol networking.k8s.io/v1 true NetworkPolicyruntimeclasses node.k8s.io/v1 false RuntimeClasspoddisruptionbudgets pdb policy/v1 true PodDisruptionBudgetpodsecuritypolicies psp policy/v1beta1 false PodSecurityPolicyclusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBindingclusterroles rbac.authorization.k8s.io/v1 false ClusterRolerolebindings rbac.authorization.k8s.io/v1 true RoleBindingroles rbac.authorization.k8s.io/v1 true Rolepriorityclasses pc scheduling.k8s.io/v1 false PriorityClasscsidrivers storage.k8s.io/v1 false CSIDrivercsinodes storage.k8s.io/v1 false CSINodecsistoragecapacities storage.k8s.io/v1beta1 true CSIStorageCapacitystorageclasses sc storage.k8s.io/v1 false StorageClassvolumeattachments storage.k8s.io/v1 false VolumeAttachment

查看集群支持的资源版本

➜ ~ kubectl api-versionsadmissionregistration.k8s.io/v1apiextensions.k8s.io/v1apiregistration.k8s.io/v1apps/v1authentication.k8s.io/v1authorization.k8s.io/v1autoscaling/v1autoscaling/v2autoscaling/v2beta1autoscaling/v2beta2batch/v1batch/v1beta1certificates.k8s.io/v1coordination.k8s.io/v1discovery.k8s.io/v1discovery.k8s.io/v1beta1events.k8s.io/v1events.k8s.io/v1beta1flowcontrol.apiserver.k8s.io/v1beta1flowcontrol.apiserver.k8s.io/v1beta2networking.k8s.io/v1node.k8s.io/v1node.k8s.io/v1beta1policy/v1policy/v1beta1rbac.authorization.k8s.io/v1scheduling.k8s.io/v1storage.k8s.io/v1storage.k8s.io/v1beta1v1

理解Kubernetes API请求处理实现机制

原理图

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:全媒派:100年过去了,为什么国外一些大报还热衷于搞填字游戏?
下一篇:什么是实时数据API?实时数据API有什么作用?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~