【Kubernetes】基本概念介绍
What?
Kubernetes是一个基于容器技术的分布式架构方案,是一个集群管理系统,一个完备的分布式系统支撑平台。它具有完备的集群管理能力,包括多层次的安全防护和准入机制,多租户应用支撑能力,透明的服务注册和服务发现机制,内建智能负载均衡器,强大的故障发现和自我修复能力,服务滚动升级和在线扩容能力,可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。
WHY?
如果我们引入了kubernetes,就不用再费心负载均衡器的选型和部署实施的问题,不必考虑引入或自己开发一个复杂的服务治理框架,不必头疼于服务监控和故障处理模块的开发。可以给我们节省不少于30%的开发成本,让我们的精力更加集中于业务本身。由于Kubernetes提供了强大的自动化机制,系统后期的运维难度和运维成本大幅度降低。 目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率最大化。
一张导图
Kubernetes Cluster
①Master in graphs:
Master指的是集群控制节点,每个K8s集群都需要一个Master 节点来负责整个集群的管理和控制。
其中运行着一组关键进程:
- Kubernetes API Server: 提供了HTTP Rest接口的关键服务进程,是所有资源操作(CRUD)的唯一入口。
- Kubernetes Controller Manager:所有资源对象的自动化控制中心(大总管)
- Kubernetes Schedule:负责资源调度(Pod)的进程(调度室)
- etcd Server进程:资源对象的数据保存在这里。
②Node
除了Master的其他机器,被称为Node节点,可以是一台物理主机,也可以是虚拟机,是集群中的工作负载节点,会被Master分配一些工作负载(docker容器),当Node宕机时,其他工作负载会被转移到其他节点上。
- Kubelet:负责Pod对应的容器的创建,启停,与Master密切协作,实现集群管理的基本功能。
它会向Master注册自己,也是kubernetes推荐Node的方式。
会定时向Master节点汇报自身情况。(长时间不报,就定为失联,Not Ready)
- kube-proxy:实现kubernetes service的通信与负载均衡。
- Docker Engine:docker引擎,负责本机的容器创建和管理。
Node节点会动态添加到kubernetes集群中,前提是节点正确安装,配置和启动关键进程
③Pod
- 一个Pod是在创建或部署kubernetes对象模型最小最简单的单元基本构建块。Pod表示集群上正在运行的进程。
- pod封装了应用程序容器(一个或多个容器),存储资源。
- Pod表示一个部署单元
- pod为其组成容器组提供两种共享资源:网络和存储。
每个pod均分配一个唯一的IP地址(pod里面的容器共享此网络)。
- 默认情况下,pod里面某个容器停止,kubernetes会自动检测到这个问题并且重新启动这个pod,(重启里面所有容器),如果pod所在的node宕机,则会把这个node上的所有pod重新调度到其他节点上。
④Label标签
一个label是一个key=value的键值对,其中key和value由用户自己指定,label可以附加到各种资源对象上。例如Node/Pod/Service /RC等。一个资源对象可以定义任意数量的label。同一个label也可以被添加到任意数量的资源对象上去。
⑤RC
RC(Replication Controller),定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值,当我们定义了一个RC,并提交到kubernetes集群中后,Master节点上的Controller Manager组件就得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实例的数量刚好等于RC的值,不过逐渐被Replica Set 和Deployment这两个重要资源对象逐步替换了RC的作用。
- Pod期待的副本数
- 用于筛选目标Pod的label Selector
- 当pod副本数量小于预期数量的时候,用于创建新Pod的Pod模板。
⑥Service
Pod、RC等资源对象其实都是为Service做“嫁衣”的。
前端应用(POD)通过这个service定义的这个服务访问入口的地址访问其背后的一组由Pod副本组成的集群实例。Service与其后端Pod副本集群之间则是通过Label selector来实现无缝对接的。RC保证Service的服务能力和质量始终处于预期标准。
小结:
kubernetes的基本概念介绍到这里,接下来持续了解一下Devops这套理论,希望能看得到更广的天地。