什么是 k8s
Kubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统,用来管理云平台中多主机上的容器化应用。k8s 提供了应用部署,规划,更新,维护的一种机制。
应用部署的演变
- 传统部署:将应用打包手动上传到服务器运行,这种方法需要大量的时间和精力,并且容易出现错误。最大的问题是同一服务器上的多应用环境不隔离。
- 虚拟化部署:将一台物理服务器划分为多个虚拟机,每个虚拟机都可以独立运行不同的操作系统和应用程序。虚拟化技术可以提高服务器的利用率、灵活性和可伸缩性,从而降低IT成本和管理复杂度。对于每个应用实现了环境隔离,不存在资源竞争的问题。但虚拟化部署资源占用过重,操作繁琐,效率不高。
- 容器化部署:容器化部署是指将应用程序和依赖项打包成一个可移植的容器,并在任何地方部署和运行。容器化部署也实现了资源的隔离,并且占用资源远低于虚拟机,可移植性高,效率高。
为什么需要 k8s
随着应用部署方式的演变,容器化部署带来了许多好处的同时也带来了一些问题,对于一个大型分布式系统,可能会有成千上百个容器,这时管理容器就是一个很大的问题。现实生产环境的复杂程度实在是太高了,除了最基本的安装,还会有各式各样的需求,比如服务发现、负载均衡、状态监控、健康检查、扩容缩容、应用迁移、高可用等等。k8s 便可以完美解决这一问题。
k8s 特点
自动化上线和回滚
Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。你应该充分利用不断成长的部署方案生态系统。
服务发现与负载均衡
无需修改你的应用程序去使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。
自我修复
重新启动失败的容器,在节点死亡时替换并重新调度容器, 杀死不响应用户定义的健康检查的容器, 并且在它们准备好服务之前不会将它们公布给客户端。
存储编排
自动挂载所选存储系统,包括本地存储、诸如 AWS 或 GCP 之类公有云提供商所提供的存储或者诸如 NFS、iSCSI、Ceph、Cinder 这类网络存储系统。
Secret 和配置管理
部署和更新 Secret 和应用程序的配置而不必重新构建容器镜像, 且不必将软件堆栈配置中的秘密信息暴露出来。
自动装箱
根据资源需求和其他限制自动放置容器,同时避免影响可用性。 将关键性的和尽力而为性质的工作负载进行混合放置,以提高资源利用率并节省更多资源。
批量执行
除了服务之外,Kubernetes 还可以管理你的批处理和 CI 工作负载,在期望时替换掉失效的容器。
IPv4/IPv6 双协议栈
为 Pod 和 Service 分配 IPv4 和 IPv6 地址
水平扩缩
使用一个简单的命令、一个 UI 或基于 CPU 使用情况自动对应用程序进行扩缩。
为扩展性设计
无需更改上游源码即可扩展你的 Kubernetes 集群。