learning/k8s-bg/what-is-k8s.md
参考文档: What is Kubernetes
Kubernetes是一个可以移植、可扩展的开源平台,使用 声明式的配置 并依据配置信息自动地执行容器化应用程序的管理。在所有的容器编排工具中(类似的还有 docker swarm / mesos等),Kubernetes的生态系统更大、增长更快,有更多的支持、服务和工具可供用户选择。
Kubernetes的名字起源于希腊语,含义是 舵手、领航员、向导。Google于2014年将Brog系统开源为Kubernetes。Kubernetes构建在Google Brog 十五年运行大规模分布式系统的经验 基础之上,并结合了开源社区最好的想法和实践。
以下是使用 google trends 对比 kubernetes 、 docker swarm、 mesos 三个关键词的截图。
为了理解Kubernetes的用处,我们先回顾一下历史。
大致来说,在部署应用程序的方式上,我们主要经历了三个时代:
容器化越来越流行,主要原因是它带来的诸多好处:
容器是一个非常好的打包并运行应用程序的方式。在生产环境中,您需要管理容器化应用程序,并且确保其不停机地连续运行。例如:一个容器故障停机,另外一个容器需要立刻启动以替补停机的容器。类似的这种对容器的管理动作由系统来执行会更好更快速。
Kubernetes针对此类问题,提供了容器化编排解决方案,可以使你非常健壮地运行分布式系统。Kubernetes可以处理应用程序的伸缩、failover、部署模式等多种需求。例如,Kubernetes可以轻易地管理系统的金丝雀发布(灰度发布)。
Kubernetes提供的特性有:
服务发现和负载均衡
Kubernetes 可以通过 DNS 名称或 IP 地址暴露容器的访问方式。并且可以在同组容器内分发负载以实现负载均衡
存储编排
Kubernetes可以自动挂载指定的存储系统,例如 local stroage/nfs/云存储等
自动发布和回滚
您可以在 Kubernetes 中声明您期望应用程序容器应该达到的状态,Kubernetes将以合适的速率调整容器的实际状态,并逐步达到最终期望的结果。请参考 声明式的配置
自愈
Kubernetes提供如下自愈能力:
密钥及配置管理
Kubernetes可以存储和管理敏感信息(例如,密码、OAuth token、ssh密钥等)。您可以更新容器应用程序的密钥、配置等信息,而无需:
Kubernetes不是一个传统意义的、保罗万象的 PaaS(Platform as a Service)系统。Kubernetes在容器层面工作,而不是硬件层面,它提供了与 PaaS 平台相似的通用特性,例如:部署、伸缩、负载均衡、日志、监控等。然而,Kubernetes并不是一个单一整体,这些特性都是可选、可插拔的。Kubernetes提供用于搭建开发平台的基础模块,同时为用户提供了不同模块的选择性和多样性。
Kubernetes:
译者注:可选的有 Jenkins / Gitlab Runner / docker registry / harbor 等
译者注:可选的有 ELK / Prometheus / Graphana / Pinpoint / Skywalking / Metrics Server 等
译者注:可选的有 helm/kustomize/kubectl/kubernetes dashboard/kuboard/octant/k9s 等
译者注:在这个级别上,可选的组件有 puppet、ansible、salt stack 等
预定义流程的执行(先做A、再做B、然后做C)。与此相对应,Kubernetes构建了一系列相互独立、可预排的控制过程,以持续不断地将系统从当前状态调整到声明的目标状态。如何从 A 达到 C,并不重要。集中化的控制也就不需要了。这个设计思想使得Kubernetes使用更简单、更强大、稳健、反脆弱和可扩展。