弹性计算
云主机
GPU 云主机
原生容器
Kubernetes 集群
容器镜像仓库
云硬盘
高可用组
弹性伸缩
函数服务
云数据库
云数据库 MySQL
云数据库 SQL Server
云数据库 MongoDB
云数据库 MariaDB
云数据库 Percona
云数据库 PostgreSQL
分布式数据库 TiDB
云缓存 Redis
云缓存 Memcached
分布式关系型数据库 DRDS
云安全
DDoS 基础防护
DDoS 防护包
Web 应用防火墙
IP 高防
主机安全
态势感知
应用安全网关
SSL 数字证书
安全专家服务
密钥管理服务
基线检测服务
DDoS 基础防护
渗透测试服务
应急响应服务
解决方案
客户案例
简体中文
简体中文
English
International
关于我们
联系我们
热门搜索>>
云迁移
云优化
云服务
清除搜索记录
全球领先的云管理服务提供商
思普智云的管理团队都对云有深刻的理解,从搭建到运营和咨询,团队成员分工明确,始终致力于为客户提供专业的技术支持和服务。
关于我们
新闻公告
联系我们
全都
业界新闻
官方公告
新闻动态
容器服务之Kubernetes介绍
发布时间:2019-01-07 15:07:36
Kubernetes,简称K8s。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。
传统应用通过脚本或者插件来安装。这种方式的缺点是应用的运行、配置、生命周期等与当前的系统绑定,对于应用的升级更新、回滚等操作不便。也可以通过创建虚拟机来实现某些功能,但是虚拟机非常重,移植性比较差。在这种情况下,容器技术就顺应而生。
容器之间相互隔离,每个容器都有自己的文件系统,容器之间不会相互影响,能区分计算资源。容器资源占用少、利用率高、部署快,每个应用可以被打包成一个容器镜像,应用与容器的一对一关系也使容器具有更大的优势。每个应用不需要与其他应用堆栈组合,也不需要依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致的环境,容器比虚拟机更轻量、更便于监控和管理。
什么是
Kubernetes
?
Kubernetes(k8s)是一个用于容器集群的自动化部署、扩容以及运维的开源平台。使用Kubernetes可以:
自动化容器的部署和复制
随时扩展或收缩容器规模
将容器组织成组,并且提供容器间的负载均衡
很容易地升级应用程序容器的新版本
提供容器弹性,如果容器失效就替换它,等等...
Kubernetes特点:
可扩展
: 模块化, 插件化, 可挂载, 可组合
自愈
: 自动布置,自动重启,自动复制,自动扩展
可移植
: 支持公有云,私有云,混合云,多重云(multi-cloud)
Kubernetes
架构设计
Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。下面这张图是Kubernetes的架构图。
Kubernetes节点
在这张系统架构图中,我们把服务分为运行在工作节点上的服务和组成集群级别控制板的服务。
Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制。
每次个节点上当然都要运行Docker。Docker来负责所有具体的映像下载和容器运行。
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提供集群日志采集、存储与查询
分层架构
Kubernetes设计理念和功能其实就是一个类似Linux的分层架构,如下图所示:
核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
接口层:kubectl命令行工具、客户端SDK以及集群联邦
生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等
为什么 Kubernetes 是一个平台?
Kubernetes 提供了很多的功能,总会有新的场景受益于新特性。它可以简化应用程序的工作流,加快开发速度。被大家认可的应用编排通常需要有较强的自动化能力。这就是为什么 Kubernetes 被设计作为构建组件和工具的生态系统平台,以便更轻松地部署、扩展和管理应用程序。
Label允许用户按照自己的方式组织管理对应的资源。注解使用户能够以自定义的描述信息来修饰资源,以适用于自己的工作流,并为管理工具提供检查点状态的简单方法。
此外,Kubernetes 控制面 (Control Plane) 是构建在相同的APIs上面,开发人员和用户都可以用。用户可以编写自己的控制器,调度器等等,如果这么做,根据新加的自定义API ,可以扩展当前的通用CLI命令行工具。
这种设计使得许多其他系统可以构建在 Kubernetes 之上。
Kubernetes 不是什么:
Kubernetes不是一个传统的,包罗一切的PaaS系统。我们保留用户的选择,这一点非常重要。
Kubernetes不限制支持应用的种类。它不限制应用框架,或者支持的运行时语言,也不去区分 “apps” 或者“services”。 Kubernetes致力于支持不同负载应用,包括有状态、无状态、数据处理类型的应用。只要这个应用可以在容器里运行,那么它就可以在Kubernetes上很多地运行。
Kubernetes不提供中间件(如message buses),数据处理框架(如Spark),数据库(如Mysql),或者集群存储系统(如Ceph)。但这些应用都可以运行于Kubernetes。
Kubernetes没有一个点击即可用的应用市场。
Kubernetes不部署源码不编译应用。持续集成的 (CI)工作流方面,不同的用户有不同的需求和偏好,因此,我们提供分层的 CI工作流,但并不定义它应该怎么做。
Kubernetes允许用户选择自己的日志、监控和报警系统。
Kubernetes不提供可理解的应用配置语言(e.g., jsonnet).
Kubernetes不提供或者任何综合的机器配置,维护,管理或者自愈系统。
另一方面,大量的Paas系统都可以运行在Kubernetes上,比如Openshift, Deis, 和Gondor。你可以构建自己的Paas平台,CI集成。
因为Kubernetes运行在应用而非硬件层面,它提供了普通的Paas平台提供的一些通用功能,比如部署,扩展,负载均衡,日志,监控等。然而,Kubernetes并非一个庞然大物,这些功能是可选的。
另外,Kubernetes不仅仅是一个“编排系统”;它消弥了编排的需要。“编排”的定义是指执行一个预定的工作流:先做A,之后B,然后C。相反地,Kubernetes是由一系列独立的、可组合的驱使当前状态走向预想状态的控制进程组成的。怎么样从A到C并不重要:达到目的就好。当然也是需要中心控制的;方法更像排舞的过程。这让这个系统更加好用更加强大、健壮、 有弹性且可扩展。
上一篇:
微软云服务,它能为中国企业带来什么?
下一篇:
容器技术的发展与展望
返回列表