kubernetes 1.1.0 简介
1. 什么是kubernetes?
kubernetes是一个开源的容器集群管理工具,由Google开发,现捐献给了Cloud Native Computing Foundation。此工具旨在提供一个自动部署、扩展、容器应用操作的平台。
2. kubernetes中的相关概念
- Cluster
是指一组物理或虚拟机以及Kubernetes用来运行应用程序的其他基础架构资源。
- Node
是指运行着kubernetes的物理机或者虚拟机,可以在其上调度pods。
- Pod
是容器和卷共同定位的组
- Label
标签是附加到资源(例如pod)的键/值对,以传达用户定义的标识属性。标签可用于组织和选择资源子集。
- Selector
选择器是匹配标签以便标识相关资源的表达式,例如负载平衡服务定位哪些pod。
- Replication Controller
replication controller可以确保指定数量的pod副本一直在运行。它允许容易地扩展系统,同时当机器重新启动或因任何原因失败时重新创建pod。
- Service
service定义一组pod以及访问它们的方法,例如单个稳定的IP地址和相应的DNS名称。
- Volume
volume是一个目录,可能包含一些数据在里面,container可把其作为自己文件系统的一部分访问。 Kubernetes volume建立在Docker volume之上,增加volume目录和/或设备的配置。
- Secrets
secrets存储敏感数据,例如认证令牌,其可以在请求时对容器可用。
- Name
资源的用户或客户端提供的名称。
- Namespace
namespace就像资源名称的前缀。命名空间帮助不同的项目,团队或客户共享集群,例如防止不相关团队之间的名称冲突
- Annotation
可用于存储非标识辅助数据(特别是由工具和系统扩展操纵的数据)的较大(与标签相比)且可能不是人类可读的数据的键/值对。 不支持通过annotation进行有效过滤。
3. kubernetes的架构
Kubernetes遵循主从结构。Kubernetes的组件可以分为管理单个节点的和作为控制端一部分的组件。

1) kubernetes控制端
Kubernetes控制端由各种组件组成,每个组件都有自己的进程,可以在单个主节点或支持高可用性集群的多个主机上运行。 Kubernetes控制端的各个组件如下:
- etcd
etcd是由CoreOS开发的持久轻量级的分布式键值数据存储,可靠地存储集群的配置数据,表示集群在任何给定时间点的整体状态。 其他组件监视此存储的更改,以使自己进入所需的状态。
- API server
API服务器是一个关键组件,使用JSON over HTTP服务Kubernetes API,它提供了Kubernetes的内部和外部接口。API服务器处理和验证REST请求并更新etcd中的API对象的状态,从而允许客户端跨Worker节点配置工作负载和容器。
- Scheduler
调度程序是可插拔组件,根据资源可用性选择哪个节点应该运行未调度的pod。 调度程序跟踪每个节点上的资源利用率,以确保工作负载不会超过可用资源。 为此,调度程序必须知道资源可用性及其跨服务器分配的现有工作负载。
- Controller manager
控制器管理器是核心Kubernetes控制器(如DaemonSet Controller和Replication Controller)运行于其中的进程。控制器与API服务器通信以创建,更新和删除其管理的资源(pod,服务端点等)
2) kubernetes节点
节点也称为Worker或Minion,是部署容器(工作负载)的单个机器(或虚拟机)。 集群中的每个节点必须运行容器(例如Docker)以及下面提到的组件,以便与主站进行这些容器的网络配置的通信。
- Kubelet
Kubelet负责每个节点的运行状态(即,确保节点上的所有容器都是正常的)。 它负责按照控制平面的指示启动,停止和维护应用程序容器(组织为pod)。
Kubelet监视pod的状态,如果不是在所需的状态,pod将被重新部署到同一个节点。 节点状态每几秒钟通过心跳消息中继到主机。 一旦主节点检测到节点故障,Replication Controller会观察到此状态更改并在其他正常节点上启动pod。
- Kube-proxy
kube-proxy是网络代理和负载均衡器的实现,它支持服务抽象以及其他网络操作。它负责根据传入请求的IP和端口号将流量路由到适当的容器。
- cAdvisor
cAdvisor是一个代理,用于监视和收集资源使用情况和性能指标,如每个节点上的容器的CPU,内存,文件和网络使用情况。