文章目录
- 1、k8s概述
- 2、为什么要有k8s
- 2.1 回顾以往的应用部署方式
- 2.2 容器具有的优势
- 3、k8s能带来什么
1、k8s概述
kubernetes
是一个可移植、可扩展的开源平台,用于管理 容器化 的工作负载和服务,可促进申明式配置和自动化。kubernetes拥有一个庞大且快速增长的生态,其服务、支持和使用的范围相当广泛。
kubernetes是建立在Google大规模运行生产工作负载十几年的基础上,结合了社区中最优秀的想法和实践。
2、为什么要有k8s
2.1 回顾以往的应用部署方式
- 传统部署时代
早期,各个组织是在物理服务器上运行的应用程序。由于无法限制在物理服务器中运行的应用程序的 资源使用 ,因此会导致 资源分配问题。
例如:如果在同一台物理服务器上运行多个应用程序, 则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。
一种解决方案是将每个应用程序都运行在不同的物理服务器上, 但是当某个应用程序资源利用率不高时,剩余资源无法被分配给其他应用程序, 而且维护许多物理服务器的成本很高 - 虚拟化部署时代
鉴于传统部署的劣势,虚拟化技术得以引入。虚拟化技术允许在单个物理服务器的CPU 上运行多台虚拟机(VM)。虚拟化能使应用程序在不同VM之间 彼此隔离, 且提供一定程度的 安全性,因为一个应用程序的信息不能被另一个应用程序随意访问。
虚拟化技术能够更好的利用物理服务器的资源,并且因为可以轻松的添加或更新应用程序,因此具有更高级的可扩缩性,以及降低硬件成本等。
每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。 - 容器部署时代
容器类似于VM,但是他有更宽松的隔离特性,使容器之间能够共享操作系统(OS)。因此容器相比于VM是更轻量级的。
与VM类似,容器也有自己的文件系统、CPU、内存、进程空间等。由于他们与基础架构分离,因此可以跨云和OS系统发行版本进行移植。
2.2 容器具有的优势
- 敏捷应用程序的创建和部署
与VM相比,使用容器镜像的方式创建更加高效和便捷 - 持续开发、集成和部署
由于镜像的不可变性,可通过快速简单的回滚,提供可靠且频繁的容器镜像构建和部署 - 关注开发与运维的分离
在构建、发布时创建应用程序镜像,而不是在部署时,从而将应用程序与基础架构分离 - 可观察性
不仅可以显示OS级别的信息和指标,还可以显示应用程序的运行状况和其他信号指标 - 跨开发、测试和生产的环境一致性
在个人PC上也可以在云上运行一样的应用程序 - 跨云和操作系统发行版本的可移植性
可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行 - 以应用程序为中心的管理
提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序 - 松散耦合、分布式、弹性、解放的微服务
应用程序被分解成较小的独立部分, 并且可以动态部署和管理 , 而不是在一台大型单机上整体运行 - 资源隔离
可预测的应用程序性能 - 资源利用
高效率和高密度
3、k8s能带来什么
容器 是打包和运行应用程序的好方式。在生产环境中,我们需要管理运行 一批应用程序的容器,确保服务不会下线。如:一个容器发生故障,需要立即启动另一个容器来接替他的工作。此类行为我们人工维护那工作量大,难度高。因此我们需要一个系统,它能够合理高效的处理这类问题。
这个就是kubernetes
做的事情,kubernetes为我们提供了一个可以弹性运行分布式系统的框架,能够满足我们的扩展要求、在我们的应用出现问题是能够故障转移、提供部署模式等
具体来说,kubernetes能为我们提供以下支持:
- 服务发现和负载均衡
Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。 - 存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。 - 自动部署和回滚
你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。 - 自动完成装箱计算
你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你在告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)后, Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。 - 自我修复
Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端 - 秘钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。 - 批处理执行
除了服务外,Kubernetes 还可以管理你的批处理和 CI(持续集成)工作负载,如有需要,可以替换失败的容器 - 水平扩缩
使用简单的命令、用户界面或根据 CPU 使用率自动对你的应用进行扩缩 - IPv4 / IPv6双栈
为 Pod(容器组)和 Service(服务)分配 IPv4 和 IPv6 地址 - 可扩展性设计
在不改变上游源代码的前提下为你的k8s集群添加功能