K8S是什么
    K8S是一个可移植、可扩展、开源的平台,用于管理容器化的工作负载和应用,它助力于声明式配置和自动化运维。它有一个庞大的、迅速增长的生态系统。K8S结合了谷歌公司超过15年大规模容器运行管理经验和开源社区的先进思想和实践。

    回顾过去
    让我们回顾历史,来追寻K8S的价值所在。
    image.png
    传统部署方式:在早期,应用都部署在物理服务器上,没有办法定义应用的资源边界,这会导致应用之间资源占用,一个应用可能耗尽资源,导致其他应用也不能提供服务。简单粗暴的解决办法是为每个应用分配一台物理服务器,但这样成本太高,资源利用率太低。
    虚拟机部署方式:为了解决传统部署方式带来的问题,出现了基于虚拟机的部署。在一台物理主机上运行多个虚拟主机,应用跑在虚拟机中,实现资源的隔离和安全性(不同虚拟机上的应用不能随意相互访问)。每一个虚机都是跑在虚拟硬件上的完整系统,包括操作系统。
    容器部署模式:容器部署类似于虚拟机,它提供了更为宽松的隔离特性,应用之间共享操作系统,是轻量级的解决方案。类似于虚机,容器有自己的文件系统、CPU、内存和进程空间等,它跟底层基础设施解耦,可以跨越云和操作系统迁移。
    容器这么流行是因为:
    敏捷的应用创建和部署:比较虚拟机,容器镜像的创建更快、更高效。
    持续的开发、集成和部署:提供可靠、频繁的容器镜像构建和部署,提供快速和有效的回滚。
    区分开发团队和维护团队的不同职责:在构建和发布时就创建容器镜像,而不是在部署时才创建,实现了应用和基础设施的解耦。
    不但能监测操作系统层面的信息和指标,还能监测应用健康等其他指标。
    跨越开发、测试和生产等场景的环境一致性:在桌面电脑上运行和在云上运行效果一样。
    跨越云和操作系统的可移植性:支持主流操作系统、一线公有云以及私有数据中心。
    以应用为中心的管理:把抽象层次从在虚拟硬件上运行操作系统,提升至使用逻辑资源在操作系统上运行应用。
    松散耦合、分布式、弹性扩容、完美契合微服务:在微服务体系中,应用被分成多个小的相互独立的部分,需要动态的部署和管理,而不像单体应用部署在单一服务器上。
    资源隔离:可预测的应用性能
    资源利用率:更高效、密度更大

    为什么你需要K8S?它能做什么?
    容器是打包和运行应用的好方法。在生产环境中,你需要管理容器并保证它们始终运行,当容器宕机时,需要启动另外一个容器替代它,如果没有K8S,这会是一件很困难的事情。
    K8S能让你弹性运行分布式系统,它为应用解决伸缩和故障转移的问题,提供部署模式、健康监测等功能,它提供如下功能:
    服务发现和负载均衡:支持使用IP地址或者域名暴露容器,支持按流量负载均衡。
    存储编排:允许自动挂载存储,支持本地存储、云存储等。
    自动扩展和回滚:声明容器的既定状态,K8S会在实际运行过程中尽力保持既定状态。
    自动装箱:告诉K8S每个容器需要的CPU和内存,它就会选择最合适的节点自动创建容器、运行容器、监控容器。
    健康监测:K8S重启失败的容器、必要时替代已运行容器、停止对定义的健康监测没有响应的容器。
    安全和配置管理:K8S支持管理密码、token等敏感信息,不需要重新打包容器镜像,不需要暴露配置栈的敏感信息,就能部署和更新敏感信息和配置信息。