Kubernetes又简称K8s集群,是一个基于容器技术的分布式架构管理系统。
什么是容器?——开发写好代码之后需要在不同的环境下进行部署运行,如果运行环境发生变化,会导致代码无法正常运行。为了避免在底层环境上耗费大量精力,出现了容器技术。简单地说,一个容器包含了完整的运行时环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为容器镜像的包中。通过将应用程序本身,和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了。既然容器封装了所有运行应用程序所必需的相关的细节,比如应用依赖以及操作系统,这就使得镜像从一个环境移植到另外一个环境更加灵活。
参见文章http://t.csdn.cn/dlkzZ
Master
集群的"大脑",Kubernetes里的Master指的是集群控制节点,负责整个集群的管理和控制,基本上接收Kubernetes的所有控制命令,master负责具体的执行过程。master相当于Kubernetes集群的大脑,一旦master宕机或者不可用,那么对集群内容器应用的管理都将失效。
运行在master上的组件:
1.Kubernetes API Server(kube-apiserver)
Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,Kubernetes里所有资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。
2.Kubernetes Controller Manager(kube-controller-manager)
Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的大总管
3.kube-scheduler
负责资源调度(Pod调度)的进程
Node
具体"干活"的,工作负载节点,在Kubernetes集群中除了master节点外的机器被称为Node。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他Node节点上。
运行在Node上的组件:
kubelet
kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,负责Pod对应容器的创建、启停等任务。同时与Master密切协作,实现集群管理的基本功能,获取Node节点上Pod的运行状态等
kube-proxy
在Node节点上实现Pod网络代理,实现Kubernetes Service的通信和负载均衡机制的重要组件。
docker
Docker引擎,负责本机的容器的创建和管理工作
Pod(豆荚)
Pod 是一组容器(当然也可以只有一个)容器本身就是一个小盒子了,Pod 相当于在容器上又包了一层小盒子,是‘容器’的容器。POD是K8S最小可部署的单元,一个POD就是一个进程。POD内部容器网络互通,每个POD都有独立虚拟IP。POD都是部署完整的应用或模块
Replication Controller(复制控制器)
简称RC,RC是Kubernetes系统中的核心概念之一。它能够保证Pod持续运行,创建Pod,监控Pod并保证Pod的数量,在此基础上提供一些高级特性,比如滚动升级和弹性伸缩
Etcd
Etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为Etcd数据提供备份计划。Etcd是一个高可用的键值存储系统
Service : pod对外服务的统一入口,下面可以维护着同一类的多个pod(与外界的桥梁)
Label : 标签,用于对pod进行分类,同一类的pod会有相同的标签;
NameSpace:命名空间,用来隔离pod的运行环境。Namespace 是用来做一个集群内部的逻辑隔离的,它包括鉴权、资源管理等。Kubernetes 的每个资源,比如刚才讲的 Pod、Deployment、Service 都属于一个 Namespace,同一个 Namespace 中的资源需要命名的唯一性,不同的 Namespace 中的资源可以重名。k8s 实现多租户的方式,将一个物理 Cluster 从逻辑上划分成多个虚拟 Cluster,每个虚拟 Cluster 就是一个 Namespace,不同 Namespace 间的资源完全隔离
参考文章:http://t.csdn.cn/GARRk、http://t.csdn.cn/drTzQ、http://t.csdn.cn/CTecz
K8s集群里的三种IP
Kubernetes集群里有三种IP地址,分别如下:
Node IP:Node节点的IP地址,即物理网卡的IP地址。可以是物理机的IP(也可能是虚拟机IP)。每个Service都会在Node节点上开通一个端口,外部可以通过NodeIP:NodePort即可访问Service里的Pod,和我们访问服务器部署的项目一样,IP:端口/项目名
Pod IP:Pod的IP地址,即docker容器的IP地址,此为虚拟IP地址。是Docker Engine根据docker网桥的IP地址段进行分配的,通常是一个虚拟的二层网络
同Service下的pod可以直接根据PodIP相互通信
不同Service下的pod在集群间pod通信要借助于 cluster ip
pod和集群外通信,要借助于node ip
Cluster IP:Service的IP地址,此为虚拟IP地址。外部网络无法ping通,只有kubernetes集群内部访问使用。
参考文章:http://t.csdn.cn/jQhsH