Kubernetes中的对象,资源和控制器

时间:2020-01-28 13:59:52

标签: kubernetes

我最近开始学习kubernetes。许多博客文章互换使用objectsresources一类的术语(我无法从上下文中区分出它们)。

此外,controllers被描述为管理某些特定对象(例如,响应与该对象对应的create/delete/update events)。那么,控制器只是另一个要管理其他对象的对象还是完全不同的构造?

任何解释表示赞赏。谢谢:)

1 个答案:

答案 0 :(得分:3)

我同意许多人可以交替使用对象和资源。

Kubernetes资源

如果您在谈论Kubernetes resources,则是在谈论可以在Kubernetes中使用/创建的所有事物的一般集合(ServicesPodsDeployments,{{1 }},events等)。 您可以在Kubernetes中输入集群以检查资源列表:

quotas

还有更多,但没有意义将它们全部发布。

每个$ kubectl api-resources NAME SHORTNAMES APIGROUP NAMESPACED KIND bindings true Binding componentstatuses cs false ComponentStatus configmaps cm true ConfigMap endpoints ep true Endpoints events ev true Event limitranges limits true LimitRange namespaces ns false Namespace nodes no false Node persistentvolumeclaims pvc true PersistentVolumeClaim ... 对象都需要适当的规范。更多详细信息,请参见here

该规范通常以KubernetesYAML格式创建。 Kubernetes对象必须必须分隔JSONapiVersionKindmetadata。您还应该记住,YAML和JSON具有自己的语法。如果满足所有要求,spec将创建Kubernetes

Kubernetes对象是Kubernetes资源,但具有特殊的objectspec。请检查this docs

每个Kubernetes对象都包含两个嵌套的对象字段,这些字段控制对象的配置:对象规格和对象状态。您必须提供的规范描述了对象的所需状态-您希望对象具有的特征。状态描述了对象的实际状态,并由Kubernetes系统提供和更新。在任何给定时间,Kubernetes控制平面都会主动管理对象的实际状态以匹配您提供的所需状态。

例如,如果要进行3次部署。

status

$ kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE httpd 1/1 1 1 114s nginx-test 1/1 1 1 90s ngxin 1/1 1 1 3m46s 是一个对象,因为它已定义了对象nginx和对象specstatus也是对象,但具有不同的nginx-testspec。如果您要检查yaml格式的部署,它将更加明显。

status

简而言之,apiVersion: extensions/v1beta1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "1" creationTimestamp: "2020-01-28T15:21:18Z" generation: 1 labels: run: ngxin name: ngxin namespace: default resourceVersion: "11169617" selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/ngxin uid: d51d4dd8-41e1-11ea-bfb3-42010aa40078 spec: ########### Here you have spec of this deployment - first requirement progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: run: ngxin strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: creationTimestamp: null labels: run: ngxin spec: #### this is container spec, its specific for deployment containers: - image: nginx imagePullPolicy: Always name: ngxin resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 status: ########### Status of deployment - second requirement availableReplicas: 1 conditions: - lastTransitionTime: "2020-01-28T15:21:20Z" lastUpdateTime: "2020-01-28T15:21:20Z" message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: "True" type: Available - lastTransitionTime: "2020-01-28T15:21:18Z" lastUpdateTime: "2020-01-28T15:21:20Z" message: ReplicaSet "ngxin-6b9746db7f" has successfully progressed. reason: NewReplicaSetAvailable status: "True" type: Progressing observedGeneration: 1 readyReplicas: 1 replicas: 1 updatedReplicas: 1 是可在Cluster中创建/使用的所有内容的集合。 Kubernetes resourceKubernetes object,但具有特殊的规格和状态,可以确定/区别于其他资源。

Kubernetes控制器

根据docs

在Kubernetes中,控制器是控制环,它们监视集群的状态,然后在需要时进行更改或请求更改。每个控制器都试图将当前群集状态移到更接近所需状态。

如前所述,控制器监视特定资源。例如this artice格式。

部署控制器

部署为逻辑组Pod和 副本集。它创建新资源或替换现有资源 资源(如有必要)。可以更新,部署或部署 回滚。部署的实际用例是提出一个 副本集和Pod,然后更新部署以重新创建Pod (例如,使用新图像)。稍后,可以滚动部署 如果当前部署不稳定,请返回到较早的版本。

希望这会有所帮助。