赞
踩
.背景介绍
Kubernetes (通常称为 K8s) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统,是 Google内部工具 Borg 的“开源版”。
kubernets=k8s
原因是因为 k和s中间有8个字母。
kubernetes是用来管理容器的
容器是由runtime(运行时)来生产的
容器的编排工具
kubernetes读音有以下几种
k8s并不直接管理一个个的容器,而是管理的一个个pod
pod翻译成中文—豆荚
最小的管理单位是pod
Kubernetes 目前是公认的最先进的容器集群管理工具,在 1.0 版本发布后,Kubernetes 的发展速度更加迅猛,并且得到了容器生态圈厂商的全力支持,这包括coreos、rancher 等,诸多提供公有云服务的厂商在提供容器服务时也都基于 Kubernetes 做二次开发来提供基础设施层的支撑,比如华为。可以说 Kubernetes 也是 Docker 进军容器集群管理和服务编排领域最为强劲的竞争对手(Docker Swarm)。
Kubernetes 定义了一组构建块,它们可以共同提供部署、维护和扩展应用程序的机制。组成 Kubernetes 的组件设计为松耦合和可扩展的,这样可以满足多种不同的工作负载。可扩展性在很大程度上由 Kubernetes API 提供——它被作为扩展的内部组件以及 Kubernetes 上运行的容器等使用。
因为 Kubernetes 是由很多组件构成的一个系统,所以对于 Kubernetes 的安装部署来说,还是有些困难的,并且 Kubernetes 是 Google 开发的,有很多内部的依赖包都是需要穿墙访问的。
当然,也有快速安装的工具,比如 kubeadm,kubeadm 是 Kubernetes 官方提供的快速安装和初始化 Kubernetes 集群的工具,目前的还处于孵化开发状态,伴随 Kubernetes 每个版本的发布都会同步更新,当然,目前的 kubeadm 是不能用于生产环境的。
下面的每张图都是独立的,是用不同的方法展示出来而已。
简单来说:标签用于组织和选择基于键值对的对象组,它们被用于每一个 Kubernetes 组件。
Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的Key/Value键值对,其中key于value由用户自己指定。Label可以附加在各种资源对象上,如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod。
我们可以通过给指定的资源对象捆绑一个或者多个不同的Label来实现多维度的资源分组管理功能,以便于灵活、方便的进行资源分配、调度、配置等管理工作。
一些常用的Label如下:
Label相当于我们熟悉的标签,给某个资源对象定义一个Label就相当于给它大了一个标签,随后可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象,Kubernetes通过这种方式实现了类似SQL的简单又通用的对象查询机制。
Label Selector在Kubernetes中重要使用场景如下:
客户端命令行工具,将接受的命令格式化后发送给 kube-apiserver,作为整个系统的操作入口。
用来执行整个系统中的后台任务,包括节点状态状况、Pod 个数、Pods 和 Service 的关联等。
负责节点间的服务发现和配置共享。
运行在每个计算节点上,负责 Pod 网络代理。定时从 etcd 获取到 Service 信息来做相应的策略。
运行在每个计算节点上,作为 agent,接受分配该节点的 Pods 任务及管理容器,周期性获取容器状态,反馈给 kube-apiserver。
一个可选的DNS服务,用于为每个 Service 对象创建 DNS 记录,这样所有的 Pod 就可以通过 DNS 访问服务了。
Flannel 是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,需要另外下载部署。我们知道当我们启动 Docker 后会有一个用于和容器进行交互的 IP 地址,如果不去管理的话可能这个 IP 地址在各个机器上是一样的,并且仅限于在本机上进行通信,无法访问到其他机器上的 Docker 容器。Flannel 的目的就是为集群中的所有节点重新规划 IP 地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的 IP 地址,并让属于不同节点上的容器能够直接通过内网 IP 通信。
管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。
管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。
管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。
管理维护Service,提供负载以及服务代理。
管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。
管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。
管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。
管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。
管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。
管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目
实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。
负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。
负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。
Node上需要运行容器服务
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。