「Kubernetes」- 浏览k8s API和关键元数据

  CREATED BY JENKINSBOT

与「k8s对象」以及「API」进行基本交互。

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

k8s API服务器管理的spec描述的对象应有的状态,而status保存了真实的状态。

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/

6.2. Understanding the Structure of a Kubernetes Manifest

kubectl可以非常简单的部署一个对象,但是更多的细节需要通过清单文件控制。

kind: Pod
apiVersion: v1
metadata:
  name: mypod
# 还可以包含spec字段
# spec:
#   ...

6.3. Creating Namespaces to Avoid Name Collisions

通过命名空间解决应用冲突:

	kubectl create namespace my-app
	kubectl get namespace

默认由一个default命名空间,已经另外的两个自带的命名空间kube-system、kube-pulic,也可以使用清单文件创建:

kind: Namespace
apiVersion: v1
metadata:
  name: my-app

不同命名空间的对象不会冲突。kube-system是系统管理员的命名空间,kube-public命名空间则用于保存集群上用户公开的对象。

6.4. Setting Quotas Within a Namespace

操作,在命名空间下创建配额:

# foo.yaml
kind: ResourceQuota
apiVersion: v1
metadata:
  name: podquota
  namespace: my-app
spec
  hard:
    pods: "10"

kubectl create namespace my-app
kubectl create -f foo.yaml –namespace=my-app
kubectl describe resourcequota podquota –namespace=my-app

可以对一系列的对象进行配额限制,包括但不限于Pod、Secret、ConfigMap。

参考文献:「Configure Quotas for API Objects

6.5. Labeling an Object

为对象创建标签:

	kubectl label pods foobar demo=mark

可以快速的更新和处理对象。

标签和“随意”命名,但是不能和系统中的冲突。命名要符合规范:「Labels and Selectors

6.6. Using Labels for Queries

使用命令:kubectl get pods –show-labels

获取POD的标签:kubectl get pods –show-labels

根据指定标签获取:kubectl get pods –selector app=cockroachdb

标签是元数据的一部分,任何对象可以被标记,在Deployment和Service中可以使用标签选择Pod。

除了使用kubectl label命令,还可以在清单文件中指定:

kind: Pod
apiVersion: v1
metadaa:
  name; foobar
  labels:
    tier: frontend

选项-l和–selector是等价的:kubectl get pods -l run=foobar

选项–show-labels显示所有的标签:kubectl get pods –show-labels

选项-L将额外添加一个列,用以返回指定标签的值:kubectl get pods -L run

很多对象都支持以集合方式查询。例如:kubectl get pods -l ‘env in (production, development)’

6.7. Annotating a Resource with One Command

注解的内容通常是通用的,非识别性的键值,而且可以是人类不可读的数据。

kubectl annotate pods foobar description=’something’

一般注解用于增加k8s的自动化。

例如,当使用kubectl run创建部署时,没有使用–record参数,那么历史记录里的change-cause一列为空。从1.6.0开始,可以使用kubectl annotate deployment foobar kubernetes.io/change-cause=’Reason foo’