V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
Tenxcloud10
V2EX  ›  云计算

《Kubernetes 集成外部服务实践》- 第三期 Docker 技术沙龙主题剖析系列 [第一篇]

  •  
  •   Tenxcloud10 · 2016-03-16 15:50:21 +08:00 · 1776 次点击
    这是一个创建于 2976 天前的主题,其中的信息可能已经有所发展或是发生改变。

    分享嘉宾:柴宗三,亚信大数据云平台部高级研发工程师。目前负责亚信 DataFoundry 大数据 PaaS 云平台。本文源自于 3 月 12 号《第三期 Kubernetes 沙龙》四个 Topic 之一,是《第三期 kubernetes 沙龙主题剖析系列·第一篇》。本文对如何将后端服务( backend service )接入kubernetes进行了比较详尽的介绍。

    Part I. Kubernetes 简介

    Kubernetes 不同组件的交互是异步的,不同组件负责不同的功能模块。 Kubernetes 集群目前为单 master 结构,一般情况下 master 节点上运行 APIServer 、 kube-controller-manager 、 kube-scheduler 、 etcd , node 节点上运行 kubelet 、 kube-proxy 、 flannel 。 Etcd 和 flannel 用于网络管理,不是 kubernetes 本身的组件,这里不做介绍。虽然 k8s 是单 master 结构,但是 master 的宕机并不会导致导致集群应用 service unavailable ,只是暂时无法从管理层面对容器应用进行操作。

    • APIServer ( master 组件)的功能是作为集群的 Master ,提供集群管理的 API ,接收客户端的 REST 请求,读写 etcd 中的数据。
    • kube-controller-manager ( master 组件)监听 Replication Controller 的变化,并创建对应的 Pod ,使其达到期望的运行状态。
    • kube-scheduler ( master 组件)根据节点的资源和限制条件将 pod 分配给特定 slave 节点的 kubelet 。
    • Kubelet ( node 组件)作为 daemon 运行在每个 slave 节点上,用来维持节点上的容器,保持与 APIServer 、 etcd 的数据同步。 Kubelet 默认集成 cadvisor 组件,用于搜集主机和容器的监控数据。
    • kube-proxy ( node 组件)用于接收打给 service 的流量,根据 podSelector 分发给特定的 backend pods 。如果配置了 service 的 external endpoint ,则会将请求分发给外部服务。

    Part II. 将外部服务接入 kubernetes

    backend service ,即后台服务,具有持久化、插件化、服务化的特点。对于 PaaS 平台,其 backend service 还要满足四个需求:需求多样、服务共享、按需分配、开箱即用。为了满足 PaaS 平台的这些需求,必须对 backend service 做一些规范规范。对此,亚信的 PaaS 平台采用了 CloudFoundry 的规范(如下)。每个 backend service 都会暴露自己的 REST API 供其它服务调用。通过 REST API 的方式,极大方便了 Resource Register 、 Controller Handler 、 Api Router 、 CLI 的实现。

    alt 文本

    Backend service(后台服务)与 kubernetes 通过两种方式集成。第一种,每个 backend service 作为 Pod 中的一个 container 运行在 kubernetes 中,不同的后端服务可以使用 Pod 级别的编排相互串联起来。 Backend service 的 REST API 通过 service 映射到外部,对外提供服务。为了保持服务的持久性,不能采用本地存储,建议将分布式文件系统的块挂载到后端服务对应的 Pod 上。第二种方式, backend service 作为一个独立的服务,与 kubernetes 集群分开。在 kubernetes 集群中创建 service ,将后台服务的访问方式设置到 service 的 external endpoint 中。

    Part III. 访问 REST API

    无论后端服务在 kubernetes 集群中作为 Container 运行,或者处于 kubernetes 集群之外,都通过 kubernetes 的 service 做请求分发。 Kubernetes 的 Service 本身非常灵活,可以选择暴露到外网,或者只是在内网访问。同时 Service 具备 load balance 功能,如果后端服务独立于 kubernetes 集群,那么可以充当简化版的 haproxy 使用。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1027 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:05 · PVG 06:05 · LAX 15:05 · JFK 18:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.