重学k8s: 01.什么是Kubernetes
2021-08-02
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 集群。