Kubernetes的定义

引用Kubernetes官方网站上的定义:

Kubernetes是一个用于自动部署,扩展和管理容器化应用程序的开源系统。Kubernetes将多个容器组成一个逻辑单元以便于管理和服务发现。 Kubernetes源自Google内部十五年的生产环境运维经验,同时凝聚了社区的最佳创意和实践。

Kubernetes简称k8s,从k8s的定义中可以看出:

  • k8s管理的应用是容器化的,支持实现了CRI(容器运行时接口)的容器运行时,例如Containerd, CRI-O
  • 容器应用是自动化部署到k8s集群中的
  • 容器应用是可扩展的,容器应用的副本数可以根据需要扩缩容(scale-up或者scale-down)
  • k8s负责管理和编排容器应用之间的关系

K8S的定义中提到Google内部十五年的经验指的是Google在业内闻名的Borg系统。Google在2015年发布了一篇名为"Google 使用 Borg 进行大规模集群的管理“的论文,披露了过去极少提及的关于Borg系统的技术细节。

K8S定义中提到的K8S将多个容器组成一个逻辑单元,这个逻辑单元指定就是Pod。Pod是k8s中可以部署和管理的最小单元,是k8s的设计精髓所在。

Kubernetes的核心特性

Kubernetes的核心特性包括:

  • 自动化上线和回滚: Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。你应该充分利用不断成长的部署方案生态系统。
  • 服务发现与负载均衡: 无需修改你的应用程序即可使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。
  • 存储编排: 自动挂载所选存储系统,包括本地存储、诸如 GCP 或 AWS 之类公有云提供商所提供的存储或者诸如 NFS、iSCSI、Gluster、Ceph、Cinder 或 Flocker 这类网络存储系统。
  • Secret和配置管理: 部署和更新 Secrets 和应用程序的配置而不必重新构建容器镜像,且 不必将软件堆栈配置中的秘密信息暴露出来。
  • 自动装箱: 根据资源需求和其他约束自动放置容器,同时避免影响可用性。将关键性工作负载和尽力而为性质的服务工作负载进行混合放置,以提高资源利用率并节省更多资源。
  • 批量执行: 除了服务之外,Kubernetes 还可以管理你的批处理和 CI 工作负载,在期望时替换掉失效的容器。
  • IPv4/IPv6 双协议栈: 为 Pod 和 Service 分配 IPv4 和 IPv6 地址
  • 水平扩缩: 使用一个简单的命令、一个 UI 或基于 CPU 使用情况自动对应用程序进行扩缩。
  • 自我修复: 重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们公布给客户端。
  • 为扩展性设计: 无需更改上游源码即可扩展你的 Kubernetes 集群。

参考