Kubernetes 学习5 kubernetes资源清单定义入门

一、kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理。并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通过相应的命令反馈在kubectl 之上,如kubectl run,get,edit,...。

二、k8s常用的资源实例化后我们称之为对象。k8s相关的核心资源如下。

  1、workload(工作负载型资源对象):Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob...

  2、Service,Ingress 服务发现和负载均衡有关 ....

  3、Volume 配置与存储。 现在的k8s版本还支持基于CSI,容器存储接口来支持各种各样的存储卷。我们还有另外两种特殊类型的存储卷。

    a、ConfigMap :用来当配置中心使用的资源

    b、Secret:和ConfigMap 功能相同但是用来保存敏感数据。

    c、DownwardAPI:把外部环境中的信息输出给容器

  4、集群级的资源

    a、Namespace,Node,Role(名称空间级的资源),ClusterRole,RoleBinding,ClusterRoleBinding

  5、元数据型资源

    a、HPA

    b、PodTemplate用于pod控制器创建pod时使用的模板。

    c、LimitRange 定义资源限制

  6、包括但不仅限于上述资源

三、yaml详解

  1、将pod信息以yaml格式输出

[root@k8smaster ~]# kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
myapp-848b5b879b-5k4s4        1/1       Running   0          22h
myapp-848b5b879b-bzblz        1/1       Running   0          22h
myapp-848b5b879b-hzbf5        1/1       Running   0          22h
nginx-deploy-5b595999-d9lv5   1/1       Running   0          1d
[root@k8smaster ~]# kubectl get pod myapp-848b5b879b-5k4s4 -o yaml  #以yaml格式输出
apiVersion: v1 #定义对象属于k8s哪一个对应的api群组的名称和版本,给定api版本时由两个部分组成,group/version,group如果省略,表示core定义(核心组,最根本的资源)
kind: Pod   #定义资源类别。用来指明这是每一种资源用来实例化成一个具体的资源对象时使用。
metadata:  #元数据,内部嵌套很多二级字段和三级字段来定义
  creationTimestamp: 2019-05-09T09:10:00Z
  generateName: myapp-848b5b879b-
  labels:
    pod-template-hash: "4046164356"
    run: myapp
  name: myapp-848b5b879b-5k4s4
  namespace: default
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet
    name: myapp-848b5b879b
    uid: 8f3f5833-7232-11e9-be24-000c29d142be
  resourceVersion: "48605"
  selfLink: /api/v1/namespaces/default/pods/myapp-848b5b879b-5k4s4
  uid: 3977b5e7-723a-11e9-be24-000c29d142be
spec:  #specifications,规格。定义接下来需要创建的资源对象应该具有什么样的特性,应该满足什么样的规范。确保控制器能够被满足。
  containers:
  - image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    name: myapp
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-jvtl7
      readOnly: true
  dnsPolicy: ClusterFirst
  nodeName: k8snode2
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:  #容忍度,能容忍哪些污点
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: default-token-jvtl7
    secret:
      defaultMode: 420
      secretName: default-token-jvtl7
status: #显示当前资源的当前的状态,只读,由系统维护,而spec由用户定义。如果当前状态和目标状态不一样,k8s就是为了确保每一个资源定义完以后其当前状态无限向目标状态靠近。从而能满足用户期望。
  conditions:
  - lastProbeTime: null
    lastTransitionTime: 2019-05-08T15:36:44Z
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: 2019-05-08T15:36:46Z
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: null
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: 2019-05-09T09:10:00Z
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: docker://0eccbcf513dc608277089bfe2a7b92e1639b1d63ec5d76212a65b30fffa78774
    image: ikubernetes/myapp:v1
    imageID: docker-pullable://ikubernetes/myapp@sha256:9c3dc30b5219788b2b8a4b065f548b922a34479577befb54b03330999d30d513
    lastState: {}
    name: myapp
    ready: true
    restartCount: 0
    state:
      running:
        startedAt: 2019-05-08T15:36:45Z
  hostIP: 192.168.10.12
  phase: Running
  podIP: 10.244.2.14
  qosClass: BestEffort
  startTime: 2019-05-08T15:36:44Z

  2、创建资源的方法

    a、apiserver在定义资源时仅接收json格式的资源定义,因此,像我们以前使用的run来创建deployment时,run命令会自动将给定的命令转成json格式。

    b、yaml格式提供配置清单,apiserver可自动将其转为json,而后再提交;

  3、大部分资源的配置清单都由五个组成:

    a、apiVersion:用来指明我们要创建的资源属于哪个资源群组 及版本  

猜你喜欢

转载自www.cnblogs.com/Presley-lpc/p/10845531.html