第一章 Kubernetes -- 伟大舵手

Kubernetes 源于希腊语,意为“舵手”或者“飞行员”,而且英文是“governor”“cybernetic”的词根。通常被简写为k8s,“k8s”中文发音与Kubernetes发音类似。所以说一个好的项目的确是需要一个好名字,这方面的典范当属GNU(GNU is Not Unix)了,Kubernetes 也是不错的!

1. What is Kubernetes?

Kubernetes 是一个跨主机集群的 开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作 , 提供以容器为中心的基础架构。它是基于Google Borg系统的开源的容器集群管理系统。k8s是一个平台,而不是一个传统的PaaS (平台即服务),最大程度的保留了用选择的自由,同时提供了大量的功能,总会有新的场景受益于新的特性,k8s打造的是一个生态系统,集成了大量的组件以及工具,可以用于:部署、扩展、负载均衡、日志、监控等。

同时,k8s又不仅仅是一个容器编排系统。"编排"技术定义的是工作流的执行: 从 A 到 B,然后到 C。相反,Kubernetes 是包括一套独立、可组合的控制过程,通过声明式语法使其连续地朝着期望状态驱动当前状态。 不需要告诉它具体从 A 到 C 的过程,只要告诉到 C 的状态即可。 也不需要集中控制;该方法更类似于"编舞"。这使得系统更容易使用并且更强大、更可靠、更具弹性和可扩展性。

k8s提供了基础设施来构建一个真正以容器为中心的开发环境,可以满足常见的需求:

  • Pod 提供复合应用并保留一个应用一个容器的容器模型,

  • 挂载外部存储,

  • Secret管理,

  • 应用健康检查,

  • 副本应用实例,

  • 横向自动扩缩容,

  • 服务发现,

  • 负载均衡,

  • 滚动更新,

  • 资源监测,

  • 日志采集和存储,

  • 支持自检和调试,

  • 认证和鉴权.

这提供了平台即服务 (PAAS) 的简单性以及基础架构即服务 (IAAS) 的灵活性,并促进跨基础设施供应商的可移植性

2. 为什么使用容器?

向对于传统的服务部署方式,容器化已经成为一大趋势。容器以其隔离、轻量、松耦合、分布式等众多优点在现代应用开发部署中日渐崭露头角。具体为什么使用容器可见

基于操作系统级虚拟化而不是硬件级虚拟化方法来部署容器。容器之间彼此隔离并与主机隔离:它们具有自己的文件系统,不能看到彼此的进程,并且它们所使用的计算资源是可以被限制的。它们比虚拟机更容易构建,并且因为它们与底层基础架构和主机文件系统隔离,所以它们可以跨云和操作系统快速分发。

容器优点:

  • 敏捷的应用程序创建和部署: 与虚拟机镜像相比,容器镜像更容易创建,提升了硬件的使用效率。

  • CI/CD 和部署: 提供可靠与频繁的容器镜像构建和部署,可以很方便及快速的回滚 (由于镜像不可变性).

  • 开发与运维分离: 在构建/发布时创建应用程序容器镜像,从而将应用程序与基础架构分离。

  • 开发、测试和生产环境的一致性: 在笔记本电脑上运行与云中一样。

  • 云和操作系统的可移植性: 可运行在 Ubuntu, RHEL, CoreOS, 内部部署, Google 容器引擎和其他任何地方。

  • 以应用为中心的管理: 提升了操作系统的抽象级别,以便在使用逻辑资源的操作系统上运行应用程序。

  • 松耦合、分布式、弹性伸缩 微服务: 应用程序被分成更小,更独立的部分,可以动态部署和管理 - 而不是巨型单体应用运行在专用的大型机上。

  • 资源隔离: 通过对应用进行资源隔离,可以很容易的预测应用程序性能。

  • 资源利用: 高效率和高密度

3. 核心组件

  • kube-apiserver: 对外暴露k8s api,作为k8s的前端控制层,提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册、服务发现等功能;同时被设计为水平扩展,可以部署多个实例进行缩放,构建高可用集群

  • etcd:用于k8s的后端存储,保存整个集群的状态

  • kube-controller-manager:运行控制器,处理集群中的常规任务:故障检测、自动扩展、滚动更新;包括:

    • 节点控制器

    • 副本控制器

    • 端点控制器

    • 服务账号以及令牌控制器

  • kube-scheduler:负责pod的调度,监测没有分配node 的新创建的pod,按照一定的策略分配node

  • kubelet: 负责维护容器的生命周期,同时负责Volume(CVI)以及网络(CNI)的管理

  • CRI: 容器运行时环境,负责镜像管理以及容器真正的运行

  • kube-proxy: 负责为service提供集群内部的服务发现以及负载均衡,维护主机上的网络规则并执行连接转发,实现服务的抽象

  • DNS: 一个DNS服务器,将k8s启动的容器自动包含

Reference:

Last updated