掌舵3 Kubernetes服务目录资源的部署顺序
我使用的是HelmV3.3.0和Kubernetes1.16 集群已经安装了,因此实现开放式ServiceBroker API规范的外部服务可以实例化为K8S资源-如掌舵3 Kubernetes服务目录资源的部署顺序,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我使用的是HelmV3.3.0和Kubernetes1.16 集群已经安装了,因此实现开放式ServiceBroker API规范的外部服务可以实例化为K8S资源-如ServiceInstances和ServiceBindings ServiceBindings反映为K8SSecrets,并包含所创建的外部服务的绑定信息。这些秘密通常作为环境变量或K8S部署中的卷映射到Docker容器中 现在我正在使用头盔部署我的库伯内特斯资源,我读到 Kubernetes类型的[Helm]安装顺序由中的枚举I
ServiceInstance
s和ServiceBinding
s
ServiceBinding
s反映为K8SSecret
s,并包含所创建的外部服务的绑定信息。这些秘密通常作为环境变量或K8S部署中的卷映射到Docker容器中
现在我正在使用头盔部署我的库伯内特斯资源,我读到
Kubernetes类型的[Helm]安装顺序由中的枚举InstallOrder给出
在该文件中,订单中既没有提到ServiceInstance
也没有提到ServiceBinding
作为资源,这意味着Helm在安装其任何InstallOrder列表后安装这些资源类型,尤其是Deployment
s。这似乎与我的图表上的helm install--dry run--debug
run的输出相匹配,其中的顺序指示K8S服务目录资源是最后应用的
问题:我不明白的是,为什么我的部署没有安装头盔失败。
毕竟,我的部署
资源似乎是在服务绑定
启动之前部署的。我的Deployment
引用的是从ServiceBinding
生成的Secret
。我预计它会失败,因为在安装部署
时,机密还不存在。但事实并非如此
这只是一个时间上的小故障/幸运的巧合,还是这是我可以信赖的,为什么
谢谢 请回答我自己的问题(感谢@dawid kruk和服务目录Sig on Slack上的人们):
- 事实上,我的
Pod
的初始启动(引用由ServiceBinding
创建的Secret
的启动)失败了!它失败了,因为K8S试图启动吊舱时,Secret
实际上不在那里
- Kubernetes有一种自愈机制,即它尝试(并重试)达到集群的目标状态,如各种部署的资源所述
- 通过Kubernetes尝试让吊舱运行,最终(当
秘密
最终存在时)所有条件都将得到满足,以使吊舱顺利启动。因此,最终,evth。正在正常运行
这是如何简化的?一种可能是Helm将自定义资源ServiceBinding
和ServiceInstance
包括在其可安装资源的有序列表中,并在安装阶段早期安装它们
但即使没有这一点,库伯内特斯实际上也处理得很好。安装顺序(在本例中)实际上并不重要。这是一件好事 请回答我自己的问题(感谢@dawid kruk和服务目录Sig on Slack上的人们):
- 事实上,我的
Pod
的初始启动(引用由ServiceBinding
创建的Secret
的启动)失败了!它失败了,因为K8S试图启动吊舱时,Secret
实际上不在那里
- Kubernetes有一种自愈机制,即它尝试(并重试)达到集群的目标状态,如各种部署的资源所述
- 通过Kubernetes尝试让吊舱运行,最终(当
秘密
最终存在时)所有条件都将得到满足,以使吊舱顺利启动。因此,最终,evth。正在正常运行
这是如何简化的?一种可能是Helm将自定义资源ServiceBinding
和ServiceInstance
包括在其可安装资源的有序列表中,并在安装阶段早期安装它们
但即使没有这一点,库伯内特斯实际上也处理得很好。安装顺序(在本例中)实际上并不重要。这是一件好事 正如我在评论中所说:
事实上,您的部署
一开始就失败了,状态为:CreateContainerConfigError
。您的部署
是在Secret
之前从ServiceBinding
创建的。只有当ServiceBinding
中的Secret
可用时,它才能正常工作
我想用一个例子来说明为什么部署没有失败
发生了什么(按顺序简化):
Deployment
->创建并生成了一个Pod
Pod
->Pod失败,状态为:CreateContainerConfigError
由于缺少Secret
ServiceBinding
->在后台创建的Secret
Pod
获取所需的Secret
并启动
前面提到的InstallOrder
将保留ServiceInstace
和ServiceBinding
作为最后一条评论
例子
假设:
- 有一个正在工作的Kubernetes集群
- Helm3已安装并可随时使用
以下指南:
templates/
目录中有一个舵图,其中包含以下文件:
ServiceInstance
ServiceBinding
部署
档案:
ServiceInstance.yaml
:
apiVersion:servicecatalog.k8s.io/v1beta1
种类:ServiceInstance
元数据:
名称:示例实例
规格:
集群服务
| Pod | Secret |
|-------------------------------------------|-------------------------------------------|
| creationTimestamp: "2020-08-23T19:54:47Z" | - |
| - | creationTimestamp: "2020-08-23T19:54:55Z" |
| startedAt: "2020-08-23T19:55:08Z" | - |
21:54:47:534823000 NAME READY STATUS RESTARTS AGE
21:54:47:542107000 ubuntu-65976bb789-l48wz 0/1 Pending 0 0s
21:54:47:553799000 ubuntu-65976bb789-l48wz 0/1 Pending 0 0s
21:54:47:655593000 ubuntu-65976bb789-l48wz 0/1 ContainerCreating 0 0s
-> 21:54:52:001347000 ubuntu-65976bb789-l48wz 0/1 CreateContainerConfigError 0 4s
21:55:09:205265000 ubuntu-65976bb789-l48wz 1/1 Running 0 22s
21:54:47:385714000 NAME TYPE DATA AGE
21:54:47:393145000 sh.helm.release.v1.example.v1 helm.sh/release.v1 1 0s
21:54:47:719864000 sh.helm.release.v1.example.v1 helm.sh/release.v1 1 0s
21:54:51:182609000 understood-squid-redis Opaque 1 0s
21:54:52:001031000 understood-squid-redis Opaque 1 0s
-> 21:54:55:686461000 example-binding Opaque 6 0s