Kubernetes

Kubernetes

Kubernetes 发音 /Koo-ber-nay-tace/ 或者 /Koo-ber-netties/

解决的问题

微服务部署和配置困难。

  • 简化应用程序的部署。开发者无须知道背后有多少台机器需要部署,也无需知道自己的 APP 运行在哪几台机器上。
  • 对于资源的更为高效的利用。K8S 可以在任意时刻将 APP 迁移到其他 worker 节点上,以便更好的利用资源。
  • 健康检查。node 挂掉后,自动将 APP 调度到其他节点上。
  • 自动伸缩。K8S 可以自己关注资源的利用率,动态调整 APP 的实例数量。

概念解释

VM 和容器

APP 运行在 VM 中

APP 运行在容器中

K8S 运行 APP

开发者告诉 K8S 的 master 节点,哪些 APP 必须部署在一起,每一个 APP 需要部署几个实例,K8S 就会自动按照要求将这些 APP 部署到 worker 节点上。

K8S 由 master 和 worker 节点构成,其中 K8S 管理控制台位于 master 节点上,可以通过此平台管理整个 K8S 系统;而 worker 节点用于实际运行 APP。

master 节点包含

  • K8S API Server
  • Scheduler: 调度 APP,分配 worker 节点等
  • Control Manager: 跟踪 worker 节点状态,处理节点失败等
  • etcd: 存储集群的配置信息

worker 节点包含

  • Docker: 或者其他容器
  • Kubelet: 调用 API Server,控制 Container
  • K8S Service Proxy: 流量的负载均衡

在 K8S 中运行程序,必须首先将其制作成容器的镜像,然后推送到镜像仓库,然后告诉 K8S 此 APP 的描述文件。

K8S Service

K8S Service 提供了对于一组提供相同服务的 Pod 的一个固定入口。

K8S 机制

K8S 调度器

默认调度算法:

  • 过滤出符合要求的能够被调度的节点。
  • 对这些节点进行排序,选择最佳的一个节点,如果多个节点具有相同的分数,那么会采用 round-robin 算法来选取一个节点。

K8S 水平伸缩

每一个 node 上的 Kubelet 里面都有一个 cAdvisor ,负责收集各种指标,然后通过位于集群级别的 Heapster 进行指标聚合。

根据一个或者多个指标计算 APP 所需要的 Pods 数量:

最后 Autoscaler Controller 更新副本数量:

K8S 高可用

高可用需要运行多个 master 节点:

参考