我最近开始学习kubernetes
。许多博客文章互换使用objects
和resources
一类的术语(我无法从上下文中区分出它们)。
此外,controllers
被描述为管理某些特定对象(例如,响应与该对象对应的create/delete/update events
)。那么,控制器只是另一个要管理其他对象的对象还是完全不同的构造?
任何解释表示赞赏。谢谢:)
答案 0 :(得分:3)
我同意许多人可以交替使用对象和资源。
Kubernetes资源
如果您在谈论Kubernetes resources
,则是在谈论可以在Kubernetes中使用/创建的所有事物的一般集合(Services
,Pods
,Deployments
,{{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。
该规范通常以Kubernetes
或YAML
格式创建。 Kubernetes对象必须必须分隔JSON
,apiVersion
,Kind
和metadata
。您还应该记住,YAML和JSON具有自己的语法。如果满足所有要求,spec
将创建Kubernetes
。
Kubernetes对象是Kubernetes资源,但具有特殊的object
和spec
。请检查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
和对象spec
。 status
也是对象,但具有不同的nginx-test
和spec
。如果您要检查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 resource
是Kubernetes object
,但具有特殊的规格和状态,可以确定/区别于其他资源。
Kubernetes控制器
根据docs
在Kubernetes中,控制器是控制环,它们监视集群的状态,然后在需要时进行更改或请求更改。每个控制器都试图将当前群集状态移到更接近所需状态。
如前所述,控制器监视特定资源。例如this artice格式。
部署控制器
部署为逻辑组Pod和 副本集。它创建新资源或替换现有资源 资源(如有必要)。可以更新,部署或部署 回滚。部署的实际用例是提出一个 副本集和Pod,然后更新部署以重新创建Pod (例如,使用新图像)。稍后,可以滚动部署 如果当前部署不稳定,请返回到较早的版本。
希望这会有所帮助。