【高级部署】-Kubernetes K8S理论篇

前言:2019年已通过去了,在2019年阿里号称双11全面上云,为何要上云?这你得问马云,开个玩笑...node

由于k8s的加持,让云发挥了更大价值,k8s的提供的弹性伸缩,使得云资源获得充分利用,目前全球三大云所有都支持k8s,加上k8s自己就是谷歌的亲儿子,在这样的背景下,k8s愈来愈流行,做为一名开发,学习k8s迫在眉睫,因此我开始上路了,你呢?docker


1.什么是k8s?api

了解k8s是什么以前,须要先了解docker,docker我就很少说了,没基础的本身恶补。若是说是微服务让docker火了,那么docker则让k8s火了一把,k8s是由谷歌开源的一款容器集群管理系统,能够实现容器的自动化部署,自动扩容,缩容,维护,监控等功能。浏览器

在大型的系统中,背后可能有成千上万个实例在运行,假设这些实例都是运行在docker容器中,实际上也几乎都是,这么多容器势必会有一些容器在某些时间段是空闲的,也有些是挂掉的,若是依靠人肉运维去监控和管理这些容器,枯燥又烧钱。在像双11这样的场景下,因为临时增长了不少实例来支撑超大流量,但双11事后这些实例资源就空置了,形成大量资源浪费,还有一些秒杀场景,可能在极短期内涌入大量流量,对服务器形成冲击,有没有办法能在大流量的时候自动增长一些实例,在流量减小后自动下掉一些实例,固然有,它就是k8s,它的出现让阿里云更具备价值了,阿里云有丰富的服务器资源,支撑着众多企业的服务,在大部分场景下,不可能全部企业都在同一时刻流量洪峰,k8s可让这些企业来共享这服务器资源,以弹性的方式伸缩,实现双赢,能够类比医疗保险。服务器

2.k8s能作什么?网络

经过k8s你能够:快速部署服务,快速扩展应用,无缝对接新应用,负载均衡,监控,自动伸缩,节省资源,优化硬件资源使用...总之应有尽有。架构

3.k8s架构负载均衡

引用一张k8s官方的图,虽然比较不清晰,也比较难看懂,不过不要紧,能够继续先往下看,看完组件再来看这张图就比较清晰了运维

 

4.k8s组件微服务

k8s是基于主从架构的,其组件主要分为两大类,一类是Master组件,一类是Node节点组件,其他组件单独介绍,由于很是重要!

Master组件包括:kube-apiserver,ETCD,kube-controller-manager,cloud-controller-manager,kube-scheduler,addons,DNS,用户界面,容器资源监测,Cluster-level Logging.

Node组件包括: kubelet,kube-proxy,docker,RKT,supervisord,fluentd

组件有点多,虽然多k8s而言,以上组件几乎都是重要组件,但对开发同窗而言,仅须要重点掌握其中几个组件,其它组件简单了解便可,下面我将核心组件重点解释,而且加粗,非核心组件,简单了解,一笔带过~

 

Master组件:

 

kube-apiserver: 用于暴露k8s API,任何资源的请求/调用操做都是经过kube-apiserver提供的接口进行的.

ETCD:etcd是k8s默认的存储系统,存储全部集群数据,使用时须要为etcd数据提供备份计划.

kube-controller-manager:运行管理控制器,是集群中用来处理常规任务的后台线程.

cloud-controller-manager:云控制器是负责与底层云提供商的平台交互.

kube-scheduler:k8s的调度器,监视新建立但没有分配到Node的pod,为pod选择一个Node.

addons:插件,是实现集群pod和service功能的.

DNS:虽然不严格要求使用插件,但k8s集群都应该具备集群DNS,集群DNS是一个DNS服务器,可以为k8s service提供DNS记录.

用户界面:kube-ui,提供集群基础信息查看,是常常要被开发同窗用到的.

容器资源监测:提供浏览器UI监控数据,也是常常要被用到的.

cluster-level logging:负责保存容器日志,查看/搜索容器日志.

 

Node组件:

 

kubelet:是主要的节点代理,它会监视已分配给节点的pod

kube-proxy:经过主机上维护网络规则并执行链接转发来实现k8s服务抽象.

docker:用于运行容器

RKT:做为docker工具的替代方案

supervisord:轻量级的监控系统,保障kubelet和docker运行

fluentd:是一个守护进程,提供cluster-level logging

 

5.核心概念

pod:pod是k8s中建立或部署的最小基本单位,一个Pod表明集群中正在运行的一个进程,一个pod能够由一个或多个容器组成,这些容器共同部署在一个节点上成为一个单元,一个Pod具备一个Ip,该ip在容器之间共享.

node:node节点是部署Pod的物理机(或虚拟机)

NameSpace:能够将物理上的cluster逻辑上划分红多个cluster,每一个cluster就是一个Namespace,不一样namespa里的资源是彻底隔离的.

Label:标签,能够为pod打上Label标签,Label是以key-value形式存储的,打上标签以后,就能够经过命令快速筛选出同类pod

Annotation:与Label相似,也是以key-value形式存储的,主要用来记录一些信息,如发布的版本号,负责人之类的.

service:逻辑上的一组pod,service是对访问Pod策略的抽象层,能够把相同的pod划分进同一个service中,对外提供服务.由于Pod具备伸缩性,pod重启Ip发生改变后服务如何找到对应pod? 答案就是service,它经过label找到pod组,对调用方是无感知的,由于service的ip是固定的,service会在几个Pod中作负载均衡.

controller:k8s经过controller来管理Pod,controller里定义里Pod的部署特性,k8s提供了多种controller,包括deployment,replicaset,daemonset,job...来知足多种业务场景.

deployment:最经常使用的controller,能够管理Pod的多个副本,并确保pod按照指望的状态运行.

 

至此,k8s的基本概念就梳理完了,有了这些理论,再回头看3中的架构图,就比较容易懂了,看懂架构图以后,也就能够进入实战篇了,我会持续更新,实战k8s以及将k8s和rancher结合,届时会把连接附在这里.

因为本人水平有限,文中如有不正之处望留言指正.

参考文献:https://www.kubernetes.org.cn/doc-30 (k8s中文社区)