【问题标题】:Kubernetes - can a Deployment contain a Service?Kubernetes - 部署可以包含服务吗?
【发布时间】:2023-04-03 11:45:02
【问题描述】:

刚读完 Nigel Poulton 的 The Kubernetes Book,但我对服务有点困惑。

可以以某种方式将服务添加到下面的部署清单中吗?或者服务是否必须自己发布?部署的全部目的不就是指定应用运行所需的一切吗?

apiVersion: apps/v1beta2
kind: Deployment
metadata: 
  name: hello-deploy
spec:
  replicas: 10
  selector:
    matchLabels:
      app: hello-world
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-pod
        image: nigelpoulton/k8sbook : latest
        ports:
        - containerPort: 8080

【问题讨论】:

    标签: kubernetes microservices


    【解决方案1】:

    它们是不同的对象,您必须分别提交它们(HTTP POST、kubectl apply、...)。

    您可以采取一些技巧来最大程度地减少这种影响:

    • 您可以使用 multi-document YAML file 并将其作为一个单独的东西提交,例如

      ---
      apiVersion: apps/v1
      kind: Deployment
      ...
      ---
      apiVersion: v1
      kind: Service
      ...
      
    • 有一个未记录的kind: List 可以嵌入多个对象

      apiVersion: v1
      kind: List
      items:
        - apiVersion: apps/v1
          kind: Deployment
          ...
        - apiVersion: v1
          kind: Service
          ...
      
    • 您可以使用更高级别的部署管理器,例如 Helm,它允许您将每个对象保存在单独的文件中,但在单个命令中部署它们。

    不幸的是,一些 Kubernetes 对象的名称与其简单的英语含义不同(部署并未涵盖部署整个应用程序的所有步骤或部分;服务只是一个 IP/DNS 指针而不是服务实现)但就是这样。在消除歧义时,我倾向于将 Kubernetes 对象名称大写。

    【讨论】:

      【解决方案2】:

      部署的全部目的不就是指定应用运行所需的一切吗?

      “部署”的全部目的是管理 pod/replicasets 的部署,包括复制、缩放、滚动更新、回滚。 DeploymentController 是主节点控制器管理器的一部分,它确保当前状态始终与所需状态匹配。

      服务必须自己发布吗?

      如果您熟悉负载均衡器的术语,则服务是前端,Pod 是其后端。由于是前端,Service 会将请求转发到其后端(Pod)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-26
        • 2019-07-09
        • 2022-01-23
        • 1970-01-01
        • 2012-10-01
        • 2023-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多