持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
Kubernetes (K8S) 是什么?
它是一个为 容器化 应用提供集群部署和管理的开源工具,由 Google 开发。
Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。
主要特性:
- 快速创建/部署应用: 与VM虚拟机相比,容器镜像的创建更加容易。
- 持续开发、集成和部署: 提供可靠且频繁的容器镜像构建/部署,并使用快速和简单的回滚(由于镜像不可变性)。
- 开发和运行相分离: 在build或者release阶段创建容器镜像,使得应用和基础设施解耦。
- 开发,测试和生产环境一致性: 在本地或外网(生产环境)运行的一致性。
- 云平台或其他操作系统: 可以在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何环境中运行。
- Loosely coupled,分布式,弹性,微服务化: 应用程序分为更小的、独立的部件,可以动态部署和管理。
- 资源隔离
- 资源利用: 更高效
应用的部署
1、 传统的物理机部署
直接部署在物理机上面。机器资源分配不好控制。一旦某一个应用出现BUG,导致某个资源被占用,比如说CPU,可能导致其他应用无法正常运行。
2、虚拟机部署
目前很多中小公司,有自建机房的很多还在采取虚拟机部署的方案。通过Jenkins发布应用到不同的虚拟机上。
在单个物理机上运行多个虚拟机,每个虚拟机都是完整独立的系统,性能损耗大。这种方案其实也存在弊端,比如我们公司前端时间,应用在早高峰的时候出现了不可用的情况,大量的api调用超时,运维机器也没有什么大量的异常告警,后面咨询运维同学具体的原因,也没有完全定位出来,猜测的原因是物理机上面,虚拟机机器资源快满了,接近80%资源使用率。在增加应用或者机器的部署可能导致不可预知的风险。
3、 容器化部署
容器共享主机的系统,轻量级的虚拟机,性能损耗小,资源隔离,CPU和内存可按需分配
K8S使用场景
最开始工作做电信项目的时候,大部分还是C的应用,基本上采取的第一种方式,传统的物理机部署,到后来做电商互联网项目,微服务发展,如何做大促支撑?秒杀场景如何支撑?会员基础服务如何支持10wqps的查询。 横向扩展,如何和传统项目一样,你需要单独去配置部署,运维开发的工作量巨大。
做过互联网电商项目的同学都知道,这种支持高并发的场景,除了极致的性能优化,(当然现在依靠单机也很难达到很高的性能)我们最开始考虑的方案就是横向扩展,比如要求10wqps,单机处理的能力1000qps,那么我10台机器是不是就可以支撑1wqps的要求了,当然这种性能的扩展分析需要通过压测,具体问题具体分析,我这边只是举个例子。
Kubernetes 可以为你提供集中式的管理集群机器和应用,加机器、版本升级、版本回滚,那都是一个命令就搞定的事,不停机的灰度更新,确保高可用、高性能、高扩展。
参考
官方网站 Kubernetes
从零开始入门 K8s:详解 K8s 核心概念_云计算_李响_InfoQ精选文章
Kubernetes是什么 _ Kubernetes(K8S)中文文档_Kubernetes中文社区
📚 Kubernetes(K8S)简介 - K8S 教程 - 易文档 (easydoc.net)