「KUBERNETES-OBJECTS」- 使用 kubernetes 对象

问题描述

与 Kubernetes Object 以及 API 进行基本交互;

每个对象都有各自的字段;

Kubernetes API Server 管理的 spec 描述的对象应有的状态,而 status 保存了真实的状态;

该笔记将记录:与 Kubernetes Object(比如 Service、Pod、Deployment 等等)相关的内容;

6.1. Discovering API Endpoints of the Kubernetes API Server

找出 API 服务器上的各个访问点:

(1)代理访问:kubectl proxy –port=8001 –api-prefix=/
(2)直接访问:直接访问 api server 服务;

使用curl localhost:8001/foobar可以查看所有该 API 上的访问点;

查看 API 是会看到不同的「访问点」,例如:

/api/v1

/apis/apps

/apis/authentication.k8s.io

/apis/authorization.k8s.io

/apis/autoscaling

/apis/batch

每个「访问点」都对应一个「APIGroup」。通过一个「APIGroup」内,包含很多「Object」,比如 Pod、Service、Ingress 等等。「Object」通过「版本控制」(比如,v1beta1、v1beta2 等等)来显示对象的成熟度;

「Object」所属的「APIGroup」是「apiVersion」的一部分;

https://kubernetes.io/docs/reference/

如何查看所有可以使用的对象?

方法一、kubectl api-resoureces

# 查看全部资源对象
kubectl api-resources

# 查看属于命名空间的资源
kubectl api-resources --namespaced=true

# 查看属于非命名空间的资源
kubectl api-resources --namespaced=false

方法二、the API Reference guide

Kubernetes/Reference

Kubernetes API v1.18/API OVERVIEW
Kubernetes API v1.12/API OVERVIEW

如何指定 apiVerison 属性?

简单的方法

我们以 1.18 为例,我们需要定义 Deployment 资源,按如下步骤进行操作:
1)找到官方文档(Kubernetes API v1.18/API OVERVIEW
2)找到 Deployment 对象,并查看 example 部分;

复杂的方法

每个对象的定义都要指定apiVerison字段,但是这个字段到底应该写什么呢?
1)第一步,执行 kubectl api-resources 命令,查看所有的对象及所属的「API 组」,即「APIGROUP」列的值;
2)第二步,执行 kubectl api-versions 命令,查看 APIGROUP 所拥有的版本。列表项目的结构通常是:<APIGROUP>/<APIVERSION>
3)第三步,实际到第二步骤,我们就已经找到对象可用的 apiVersion 了。第三步是为了查看对应 apiVersion 的信息,比如:kubectl explain configmap --api-version="<APIGROUP>/<APIVERSION>"

如下操作,查看 clusterroles 的 apiVerion 值:

#!/bin/sh

# kubectl api-resources | grep clusterroles
clusterroles                                   rbac.authorization.k8s.io      false        ClusterRole

# kubectl api-versions | grep -i 'rbac.authorization.k8s.io'
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1

# kubectl explain clusterroles --api-version='rbac.authorization.k8s.io/v1'
# kubectl explain clusterroles --api-version='rbac.authorization.k8s.io/v1beta1'

获取特定版本的已定义对象,可以执行kubectl get <API_RESOURCE_NAME>.<API_VERSION>.<API_GROUP>命令;

例如:kubectl get deployments.v1.apps -n kube-system

资源分类

Workload
1)CronJobs
2)DaemonSets
3)Deployments
4)Jobs
5)StatefulSets
6)Pods

Storage
1)PersistentVolumes
2)PersistentVolumeClaims
3)StorageClasses
4)ConfigMaps
5)Secrets

Service Discovery
1)HorizontalPodAutoscalers
2)Ingresses
3)NetworkPolicies
4)Services

Cluster
1)Node
2)Namespace

参考文献

Where is the complete list of kubernetes objects?
Kubernetes API Resources: Which Group and Version to Use?
Not All Objects are in a Namespace