Kubernetes是什么?
Kubernetes项目是2014年由Google公司启动的,是Google公司在15年生产环境经验基础上 ,结合了社区的一些优秀点子和实践而构建的。
Kubernetes是一个以容器为中心的基础架构,可以实现在物理集群或虚拟机集群上调度和运行容器,提供容器自动部署、扩展和管理的开源平台。满足了应用程序在生产环境中的一些通用需求:应用实例副本、水平自动扩展、命名与发现、负载均衡、滚动升级、资源监控等。
使用Kubernetes可以:
自动化容器的部署和复制
随时扩展或收缩容器规模
将容器组织成组,并且提供容器间的负载均衡
很容易地升级应用程序容器的新版本
提供容器弹性,如果容器失效就替换它,等等
Kubernetes不提供:
中间件(例如消息总线)、数据处理框架(如Spark)、数据库(如mysql),也不提供集群存储系统(如Ceph)。
源代码到镜像的处理,即不部署源代码也不会构建的应用,持续集成(Continuous Integration: CI)的工作也需要由用户按自己项目决定。
不提供应用配置系统。
不提供机器配置、维护、管理。
Kubernetes架构
Kubernetes集群由2类节点组成:Master和Node。
在Master上运行etcd、kube-apiserver、kube-scheduler、kube-controller-magager四个组件,其中后3个组件构成了Kubernetes的总控中心,负责对集群中所有资源进行管控和调度。
在Node上运行kubelet、kube-proxy、dockerdaemon三个组件,其中前2个组件负责对本节点上的Pod的生命周期进行管理,以及实现服务代理的功能。
另外在所有结点上都可以运行kubectl命令行工具,它提供了Kubernetes的集群管理工具集。
etcd:是一个高可用的key/value存储系统,用于持久化K8s集群内中的所有资源对象,例如集群中的Node、Service、Pod、RC、Namespace等。
kube-apiserver:封装了操作etcd的接口,以REST的方式对外提供服务,这些接口基本上都是集群资源对象的增删改查以及监听资源变化的接口,如创建Pod、创建RC,监听Pod变化的接口。kube-apiserver是连接其它服务组件的枢纽。
kube-scheduler:集群中的调度器,负责Pod在集群节点中的调度分配。
kube-controller-manager:集群内部的管理控制中心,主要实现Kubernetes集群的故障检查和恢复自动化的工作。比如endpoints控制器负责Endpoints对象的创建,更新。node控制器负责节点的发现,管理和监控。复制控制器负责pod的数量符合预期定义。
kubelet:负责本Node上的Pod创建、修改、监控、删除等全生命周期管理,以及Pod对应的容器、镜像、卷的管理,同时定时上报本Node的状态信息给kube-apiserver。
kube-proxy:实现了Service的代理以及软件模式的负载均衡器。
Kubernetes基本概念
Pod
Pod是Kubernetes的里可部署的和管理的最小单元,一个或多个容器构成一个Pod,通常Pod里的容器运行相同的应用。Pod包含的容器都运行在同一个宿主机上,看作一个统一管理单元。
每个Pod中都有一个pause容器,pause容器做为Pod的网络接入点