Kubernetes-部署可以包含服务吗?

Kubernetes-部署可以包含服务吗?,kubernetes,microservices,Kubernetes,Microservices,刚读完奈杰尔·波尔顿的《库伯内特的书》,但我对服务有点困惑 是否可以以某种方式将服务添加到下面的部署清单中?或者该服务是否必须自己发布?部署的全部目的不是指定应用程序运行所需的一切吗 apiVersion: apps/v1beta2 kind: Deployment metadata: name: hello-deploy spec: replicas: 10 selector: matchLabels: app: hello-world minReadyS

刚读完奈杰尔·波尔顿的《库伯内特的书》,但我对服务有点困惑

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

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

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

您可以使用以下两种技巧来最小化此操作的影响:

  • 您可以使用并将其作为单个内容提交,如

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

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


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

它们是不同的对象,您必须单独提交它们(HTTP POST,
kubectl apply,
,…)

您可以使用以下两种技巧来最小化此操作的影响:

  • 您可以使用并将其作为单个内容提交,如

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

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

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

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

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
“部署”的全部目的是管理POD/ReplicaSet的部署,包括复制、扩展、滚动更新和回滚。DeploymentController是主节点控制器管理器的一部分,它确保当前状态始终与所需状态匹配

该服务是否必须单独发布

如果您熟悉负载平衡器的术语,那么服务是前端,POD是后端。因为它是前端,所以服务将请求转发到后端(pods)

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

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
“部署”的全部目的是管理POD/ReplicaSet的部署,包括复制、扩展、滚动更新和回滚。DeploymentController是主节点控制器管理器的一部分,它确保当前状态始终与所需状态匹配

该服务是否必须单独发布

如果您熟悉负载平衡器的术语,那么服务是前端,POD是后端。因为它是前端,所以服务将请求转发到后端(pods)