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

时间:2018-11-10 22:28:45

标签: kubernetes microservices

刚读完Nigel Poulton的 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

2 个答案:

答案 0 :(得分:5)

它们是不同的对象,您必须分别提交它们(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对象名称。

答案 1 :(得分:0)

  

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

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

  

该服务是否必须单独发布?

如果您熟悉负载均衡器术语,则“服务”是前端,而“ Pods”是其后端。由于它是前端,因此Service会将请求转发到其后端(pod)。