k8s API对象 和 YAML

213 阅读1分钟

k8s 中的声明式和命令式

  • 命令式:亲自指挥到目的地 - docker
  • 声明式:直接告诉目的地,司机自己搞定 - k8s

YAML 和 api对象

yaml 是json的超级

k8s 中API和yaml的关系

使用yaml的形式,声明式的描述系统需要达到的状态,内容是k8s对集群管理抽象的对象

类似,但是去掉了很多多余的元素,引号、括号等

下面是数组的例子

OS:
  - linux
  - macOS
  - Windows
{
  "OS": ["linux", "macOS", "Windows"]
}

为什么叫api 对象,因为这些对象通过restful接口访问api server创建,所以叫 api 对象

查看多有已知的对象

kubectl api-resources
[root@localhost ~]# kubectl api-resources
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
bindings                                       v1                                     true         Binding
componentstatuses                 cs           v1                                     false        ComponentStatus
configmaps                        cm           v1                                     true         ConfigMap
endpoints                         ep           v1                                     true         Endpoints
events                            ev           v1                                     true         Event
                       storage.k8s.io/v1                      false        VolumeAttachment
....

查看对象字段说明

kubectl explain pod
kubectl explain pod.metadata
kubectl explain pod.spec
kubectl explain pod.spec.containers

创建k8s api对象 yaml 模板

注意--dry-run=client -o yaml

kubectl run ngx --image=nginx --dry-run=client -o yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: ngx
  name: ngx
spec:
  containers:
  - image: nginx
    name: ngx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

解下来就可以在上线的基础上修改

最终使用kubectl apply 和 create -f 创建Pod等资源

提示

可以是用 --v=9 参数了解kubectl和api server的交互

kubectl get pod --v=9