一、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:用来指明我们要创建的资源属于哪个资源群组 及版本