①. 什么是k8s对象
①. k8s里面操作的资源实体,就是k8s的对象,可以使用yaml来声明对象。然后让k8s根据yaml的声明创建出这个对象(kubectl create/run /expose…)
②. 操作Kubernetes对象—无论是创建、修改,或者删除—需要使用Kubernetes API。比如,当使用kubectl命令行接口时,CLI 会执行必要的Kubernetes API调用
③. Kubernetes对象指的是Kubernetes系统的持久化实体,所有这些对象合起来,代表了你集群的实际情况。常规的应用里,我们把应用程序的数据存储在数据库中,Kubernetes将其数据以Kubernetes对象的形式通过api server存储在etcd中。(集群中所有的资源都是etc中,k8s只依赖一个储存就是etcd)。具体来说,这些数据(Kubernetes对象)描述了:
集群中运行了哪些容器化应用程序(以及在哪个节点上运行)
集群中对应用程序可用的资源(网络,存储等)
应用程序相关的策略定义,例如,重启策略、升级策略、容错策略
其他Kubernetes管理应用程序时所需要的信息
scheduler先计算应该去哪个节点部署
④. 对象的spec和status,每一个Kubernetes对象都包含了两个重要的字段:
spec必须由您来提供,描述了您对该对象所期望的目标状态
status只能由Kubernetes系统来修改,描述了该对象在Kubernetes系统中的实际状态
Kubernetes通过对应的 控制器,不断地使实际状态趋向于您期望的目标状态
# kubectl create deployment my-nginx --image=nginx apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "1" creationTimestamp: "2022-01-03T09:18:20Z" generation: 1 labels: app: my-nginx managedFields: - apiVersion: apps/v1 fieldsType: FieldsV1 manager: kubectl-create operation: Update time: "2022-01-03T09:18:20Z" - apiVersion: apps/v1 fieldsType: FieldsV1 manager: kube-controller-manager operation: Update time: "2022-01-03T09:18:39Z" name: my-nginx namespace: default resourceVersion: "99511" uid: 270afb1b-f4df-4b10-b708-53313027a805 spec: # 期望状态 progressDeadlineSeconds: 600 replicas: 1 # 副本数量 revisionHistoryLimit: 10 selector: matchLabels: app: my-nginx strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: creationTimestamp: null labels: app: my-nginx spec: containers: - image: nginx # 使用这个镜像创建容器 imagePullPolicy: Always name: nginx resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 status: # 当前状态 availableReplicas: 1 # 当前集群可用的 conditions: - lastTransitionTime: "2022-01-03T09:18:39Z" lastUpdateTime: "2022-01-03T09:18:39Z" message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: "True" type: Available - lastTransitionTime: "2022-01-03T09:18:20Z" lastUpdateTime: "2022-01-03T09:18:39Z" message: ReplicaSet "my-nginx-6b74b79f57" has successfully progressed. reason: NewReplicaSetAvailable status: "True" type: Progressing observedGeneration: 1 readyReplicas: 1 replicas: 1 updatedReplicas: 1 # 最终一致 # etcd保存的创建资源期望的状态和最终这个资源的状态要是一致的;spec和status要最终一致 # 1. kubectl create deployment my-nginx --image=nginx # 2. pi-server保存etcd,controller-manager最终解析数据,知道集群要my-nginx一份,保存到etcd # 3. kubelet就做一件事情,spec状态和最终状态一致 while(true){ if(my-nginx.replicas != spec.replicas) { kubelet.startPod(); } }