K8s中所有的内容都抽象为资源(Resources),资源实例化之后叫做对象

资源分类

名称空间:

工作负载型资源(workload):Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob(ReplicationController在v1.11版本被废弃)
服务发现及负载均衡型资源(ServiceDiscoveryLoadBalance):Service、Ingress、…
配置与存储型资源:Volume(存储卷)、CSI(容器存储接口,可以扩展各种各样的第三方存储卷)
特殊类型的存储卷:ConfigMap(当配置中心来使用的资源类型)、Secret(保存敏感数据)、DownwardAPI(把外部环境中的信息输出给容器)

集群资源:

Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding

元数据型资源:

HPA、PodTemplate、LimitRange

通过命令 kubectl api-resources 来获取 K8S 支持的 resource 类

  1. $ kubectl api-resources
  2. NAME SHORTNAMES APIGROUP NAMESPACED KIND
  3. bindings true Binding
  4. componentstatuses cs false ComponentStatus
  5. configmaps cm true ConfigMap
  6. endpoints ep true Endpoints
  7. events ev true Event
  8. limitranges limits true LimitRange
  9. namespaces ns false Namespace
  10. nodes no false Node
  11. persistentvolumeclaims pvc true PersistentVolumeClaim
  12. persistentvolumes pv false PersistentVolume
  13. pods po true Pod
  14. podtemplates true PodTemplate
  15. replicationcontrollers rc true ReplicationController
  16. ....
  • SHORTNAMES - kubectl 可以使用的缩写,比如 namepace -> ns,当然不是每种 resource 都有缩写的
  • APIGROUP - 在 yaml 文件中可以看到其使用 <APIGROUP>/v1
  • KIND - resource 的 name,同样也是在 yaml 中常见的字段

通过输入一些 options 给 kubectl 来获取更多的信息

  1. $ kubectl api-resources --api-group apps -o wide
  2. NAME SHORTNAMES APIGROUP NAMESPACED KIND VERBS
  3. controllerrevisions apps true ControllerRevision [create delete deletecollection get list patch update watch]
  4. daemonsets ds apps true DaemonSet [create delete deletecollection get list patch update watch]
  5. deployments deploy apps true Deployment [create delete deletecollection get list patch update watch]
  6. replicasets rs apps true ReplicaSet [create delete deletecollection get list patch update watch]
  7. statefulsets sts apps true StatefulSet [create delete deletecollection get list patch update watch]

yaml基本语法

缩进不允许使用Tab键,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
表示注释使用井号(#)
字符后缩进一个空格,比如冒号

yaml 数据类型

对象 对象的一组键值对,使用冒号结构表示

  1. name: xiaoming
  2. age: 20

数组 一组连词线开头的行,构成一个数组

  1. animal
  2. - Cat
  3. - Dog

yam资源清单字段

在k8s中,一般使用yaml 格式的文件创建符合我们预期期望的pod,这样的yaml 文件我们称为资源清单。

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx
  5. spec:
  6. replicas: 2
  7. selector:
  8. matchLabels:
  9. app: nginx
  10. template:
  11. metadata:
  12. labels:
  13. app: nginx
  14. spec:
  15. containers:
  16. - name: nginx
  17. image: nginx:stable
  18. resources:
  19. limits:
  20. memory: "128Mi"
  21. cpu: "500m"
  22. ports:
  23. - containerPort: 80

查看资源配置

查看一个配置文件的信息:

  1. kubectl get cm cluster-info -n kube-public -o yaml

查看节点信息

  1. kubectl get node kube-master -o yaml

命令解释

  • get: 查看某个资源
  • -o yaml: 输出格式为 yaml, 也可以选择 json
  • node/cm: 想要查看的资源的类型, node 表示节点, cm(configmap) 表示配置文件
  • -n : 查看某个 namespace 下的资源,后续会详细介绍

    必须存在的属性

参数名 字段类型 说明
apiVersion String k8s API的版本,目前基本是v1,使用kubectl api-version命令查询
kind String yaml文件定义的资源类型和角色
metadata Object 元数据对象
metadata.name String
metadata.namespace String
Spec Object 定义对象
spec.containers[] list
spec.containers[].name String
spec.containers[].image String

apiVersion

apiVersion字段标记Kubernetes资源版本。Kubernetes API服务器的特定版本(例如V1.13.0)可以与不同资源的不同版本一起使用。资源版本包括两部分:API组(在本例中为apps)和版本号(v1),版本号可能包含alpha或beta字样:
使用 kubectl api-versions 查看当前集群支持的版本

  1. $ kubectl api-versions
  2. admissionregistration.k8s.io/v1beta1
  3. apiextensions.k8s.io/v1beta1
  4. apiregistration.k8s.io/v1
  5. apiregistration.k8s.io/v1beta1
  6. apps/v1
  7. apps/v1beta1
  8. apps/v1beta2
  9. authentication.k8s.io/v1
  10. authentication.k8s.io/v1beta1
  11. authorization.k8s.io/v1
  12. authorization.k8s.io/v1beta1
  13. autoscaling/v1
  14. autoscaling/v2beta1
  15. autoscaling/v2beta2
  16. batch/v1
  17. batch/v1beta1
  18. certificates.k8s.io/v1beta1
  19. compose.docker.com/v1alpha3
  20. compose.docker.com/v1beta1
  21. compose.docker.com/v1beta2
  22. coordination.k8s.io/v1
  23. coordination.k8s.io/v1beta1
  24. events.k8s.io/v1beta1
  25. extensions/v1beta1
  26. networking.k8s.io/v1
  27. networking.k8s.io/v1beta1
  28. node.k8s.io/v1beta1
  29. policy/v1beta1
  30. rbac.authorization.k8s.io/v1
  31. rbac.authorization.k8s.io/v1beta1
  32. scheduling.k8s.io/v1
  33. scheduling.k8s.io/v1beta1
  34. storage.k8s.io/v1
  35. storage.k8s.io/v1beta1
  36. v1

resource 可以有多个 apiVersion,explain 可能会输出旧的 group/version,可以通过显示的添加 --api-version 来控制输出哪个版本的信息

  1. kubectl explain replicaset --api-version apps/v1
  2. KIND: ReplicaSet
  3. VERSION: apps/v1
  4. DESCRIPTION:
  5. ReplicaSet ensures that a specified number of pod replicas are running at
  6. any given time.
  7. FIELDS:
  8. apiVersion <string>
  9. APIVersion defines the versioned schema of this representation of an
  10. object. Servers should convert recognized schemas to the latest internal
  11. value, and may reject unrecognized values. More info:
  12. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
  13. kind <string>
  14. Kind is a string value representing the REST resource this object
  15. represents. Servers may infer this from the endpoint the client submits
  16. requests to. Cannot be updated. In CamelCase. More info:
  17. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
  18. metadata <Object>
  19. If the Labels of a ReplicaSet are empty, they are defaulted to be the same
  20. as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More
  21. info:
  22. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
  23. spec <Object>
  24. Spec defines the specification of the desired behavior of the ReplicaSet.
  25. More info:
  26. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
  27. status <Object>
  28. Status is the most recently observed status of the ReplicaSet. This data
  29. may be out of date by some window of time. Populated by the system.
  30. Read-only. More info:
  31. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

某个 group/version 是否可用于某个 resource。可以通过下面这个命令来检查。deployments.v1.apps 分别对应 <API_RESOURCE_NAME>.<API_VERSION>.<API_GROUP>

  1. kubectl get deployments.v1.apps -n kube-system
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. coredns 2/2 2 2 2d18h

kind

kind: 表示类型,指定我们要处理的资源或API对象,比如节点是 Node , 配置文件是 ConfigMap

metadata

  • metadata: 基本信息,所有的 resource 都会有这个字段,且结构一样
    • name: 这个 resource 的名称
    • resourceVersion: 版本,修改此 resource 后会向上增加
    • selfLink: 通过 http api 访问此 resource 的路径
    • uid: uuid,唯一标示
    • creationTimestamp: 创建时间
    • labels: 这个 resource 的标签,我们可以用这些标签来做过滤匹配等等
    • annotations:类似于 labels, 记录一些附加信息。但 annotaitons 记录的信息不能用来做过滤匹配等等。
    • namespace: 资源所属的命名空间。有的资源有,有的资源没有。

spec

spec: 一般都是这个 resource 自己的特定信息,比如如果是节点的话会记录自己的 ip、内存等等信息,配置文件的话会记录具体的配置信息。有的资源可能没这个字段(可能叫别的名字)。
资源限制

pod

resources

图片.png

requests

limits

参考

https://www.runoob.com/w3cnote/yaml-intro.html