k8s学习(一)k8s简介

  • Post author:
  • Post category:其他







一、简介

Kubernetes是容器集群管理系统,用于管理云平台中多个主机上的容器化的应用,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。可以在物理或虚拟机的 Kubernetes 集群上运行容器化应用,Kubernetes 能提供一个以“容器为中心的基础架构”。


主要功能包括:

基于容器的应用部署、维护和滚动升级

负载均衡和服务发现

跨机器和跨地区的集群调度

自动伸缩

无状态服务和有状态服务

广泛的 Volume 支持

插件机制保证扩展性


特点:

可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)

可扩展: 模块化, 插件化, 可挂载, 可组合

自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

Kubernetes 是 Google 2014 年创建管理的,是 Google 10 多年大规模容器管理技术 Borg的开源版本。



二、核心组件


Kubernetes 主要由以下几个核心组件组成

etcd 保存了整个集群的状态;

apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;

controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;

scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;

kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;

Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);

kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡。


除了核心组件,还有一些推荐的Add-ons:

kube-dns负责为整个集群提供DNS服务;

Ingress Controller为服务提供外网入口;

Heapster提供资源监控;

Dashboard提供GUI;

Federation提供跨可用区的集群;

Fluentd-elasticsearch提供集群日志采集、存储与查询。



三、核心概念

1、Container

Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用namespace 隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。

由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序。这种一对一的应用镜像关系拥有很多好处。使用容器,不需要与外部的基础架构环境绑定, 因为每一个应用程序都不需要外部依赖,更不需要与外部的基础架构环境依赖。完美解决了从开发到生产环境的一致性问题。

容器同样比虚拟机更加透明,这有助于监测和管理。尤其是容器进程的生命周期由基础设施管理,而不是被进程管理器隐藏在容器内部。最后,每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。

每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

2、Pod

Kubernetes 使用 Pod 来管理容器,Pod 就像是豌豆荚一样,它由一个或者多个容器组成。Pod 是 Kubernetes 调度的基本单位。Pod 内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。

3、Replication Controller

Kubernetes复制控制器RC是K8s集群中最早的保证Pod高可用的API对象,适用于长期伺服型的业务类型。

4、Replica Set

Kubernetes副本集RS是新一代RC,提供同样的高可用能力,区别主要在于RS后来居上,能支持更多种类的匹配模式。副本集对象一般不单独使用,而是作为Deployment的理想状态参数使用。

5、Deployment

部署是一个比RS应用模式更广的API对象,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。以K8s的发展方向,未来对所有长期伺服型的的业务的管理,都会通过Deployment来管理。

6、Service

RC、RS和Deployment只是保证了支撑服务的微服务Pod的数量,这些服务集群的统一入口是通过Service提供,每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。

7、Namespace

Namespace 是对一组资源和对象的抽象集合,可以用来将系统内部的对象划分为不同的项目组或用户组,为集群提供虚拟隔离。

8、Node

Node是Pod真正运行的主机,可以物理机,也可以是虚拟机。为了管理Pod,每个Node节点上至少要运行container runtime(比如docker或者rkt)、kubelet和kube-proxy服务。

9、Job

Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。

10、CronJob

CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。’

11、StatefulSet

StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计)。

12、DaemonSet

DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。



版权声明:本文为RenshenLi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。