当前位置: 首页 > 知识库问答 >
问题:

Kubernetes服务目录资源的Helm 3部署顺序

戚建白
2023-03-14

现在我正在使用Helm来部署我的Kubernetes资源,我在这里读到...

Kubernetes类型的[Helm]安装顺序由kind_sorter.go中的枚举InstallOrder给出

在该文件中,order既没有提到ServiceInstance也没有提到ServiceBinding作为资源,这意味着Helm在安装了其InstallOrder列表(特别是Deployment)之后安装这些资源类型。这似乎与helm install-dry-run-debugrun在我的图表上的输出相匹配,其中顺序指示K8S服务目录资源是最后应用的。

这只是一个时间上的小故障/幸运的巧合,还是我可以依赖的,为什么?

谢谢!

共有1个答案

甘学潞
2023-03-14

正如我发布的评论中所说:

事实上,您的部署从一开始就失败了,状态为:CreateContainerConfigerRorr。您的部署是在Secret之前从ServiceBinding创建的。它只能在ServiceBinding中的secret可用时重新创建时工作。

我想通过deployment为什么没有失败的例子来提供更多的见解。

    null

假设:

  • 有一个正在工作的Kubernetes群集
  • 已安装HELM3并准备使用

以下指南:

    null

templates/目录中有一个包含以下文件的舵图:

  • ServiceInstance
  • ServiceBinding
  • 部署

文件:

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceInstance
metadata:
  name: example-instance
spec:
  clusterServiceClassExternalName: redis
  clusterServicePlanExternalName: 5-0-4
apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceBinding
metadata:
  name: example-binding
spec:
  instanceRef:
    name: example-instance
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ubuntu
spec:
  selector:
    matchLabels:
      app: ubuntu
  replicas: 1
  template:
    metadata:
      labels:
        app: ubuntu
    spec:
      containers:
      - name: ubuntu
        image: ubuntu
        command:
        - sleep 
        - "infinity" 
        # part below responsible for getting secret as env variable
        env: 
        - name: DATA
          valueFrom: 
            secretKeyRef:
              name: example-binding
              key: host
  • 第一种方法是从$kubectl get RESOURCE-o YAML
  • 中使用 timestamp
  • 第二种方法是使用$kubectl get resource-watch-only=true

如前所述,部署中的pod无法启动,因为当pod尝试生成时,secret不可用。在secret可用后,pod启动。

POD的状态如下:

    null
|                  Pod                      |                Secret                     |
|-------------------------------------------|-------------------------------------------|
| creationTimestamp: "2020-08-23T19:54:47Z" |                   -                       |
|                   -                       | creationTimestamp: "2020-08-23T19:54:55Z" |
| startedAt: "2020-08-23T19:55:08Z"         |                   -                       |

您可以通过调用以下命令获得该时间戳:

  • $kubectl get pod pod_name-n namespace-o yaml
  • $kubectl get secret secret_name-n namespace-o yaml

您还可以通过以下方式获取其他信息:

    null
    null

免责声明

上面的命令将监视资源的变化,并用操作系统的时间戳显示它们。请记住,此命令仅用于示例目的。

pod的输出:

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
    null
 类似资料:
  • 我正试图将我的应用程序部署到运行在谷歌容器引擎中的Kubernetes。 该应用程序可以在https://github.com/industrial/docker-znc找到。 null

  • 在保持云不可知的情况下创建一些通用组件来部署入口是否重要? 其他公司如何将它们的入口资源部署到k8s集群?

  • 我在Google Container Engine上部署了一个容器,它运行良好。现在,我想公开它。 这个应用程序是一个侦听2个端口的服务。使用kubectl公开部署,我创建了2个负载均衡器,每个端口一个。 我制作了两个负载平衡器,因为kubectl expose命令似乎不允许使用多个端口。虽然我在kubectl上将其定义为type=LoadBalancer,但一旦在GKE上创建了它们,它们就被定义

  • 本质上,我想为每个包含一个或多个子域的服务设置一个入口,所有这些入口都指向同一个集群。现在,我通过每个入口获得不同的临时IP。我可以创建一些转发规则,将所有流量指向静态IP转到集群,然后可能创建一个通配符DNS条目,将所有子域指向静态IP吗? 这是一个类似于我正在使用的示例配置: 我在kube集群上创建这些资源,如下所示: 然后查看这样创建的入口: 现在,假设您复制了上面的yaml,并将服务、部署

  • 我是K8s的新手,所以仍然试图让我的头脑周围的事情。我一直在研究部署,并能够理解它们将有多有用。但是,我不明白为什么它们不支持服务(只支持副本集和豆荚)。