文章目录
一:k8s概念
1.1:公有云的类型
- IAAS:基础设施即服务
- Infrastructure-as-a-Service(IAAS),国内做的中最好是的就是阿里云
- 还有其他的大的IAAS公司,包括Amazon、Microsoft、VMWare、Rackspace和Red Hat。
- 但是这些公司都有自己的专长,比如Amazon和微软提供的不只是IAAS,他们还会将其计算能力出租给你来host你的网站
- PAAS:平台即服务
- Platfrom-as-a-Service(PAAS),某些时候也叫中间件,PAAS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务和操作系统
- 一些大的PAAS提供者有Google App Engine、Microsoft Azure、Force.com、Heroku、Engine Yard等,国内做的最好的就是新浪云
- SAAS:软件即服务
- Software-as-a-Service(SAAS),比如:Google Apps、Dropbox、Salesforce、Cisco WebEx、Concur和Go ToMeeting,做的最好的是Microsoft Office 365
1.2:资源管理器的诞生
- 有了以上这些公有云之后,我们需要对其进行资源管理,那么此时就诞生了资源管理器:MESOS-Docker Swarm-Kubernetes
- MESOS:Mesos是Apache旗下的开源分布式资源管理框架,它被称为是分布式系统的内核,后来在twitter得到广泛使用
- Twitter也是mesos的最大客户,但是大概在2019年5月份,Twitter宣布不再使用MESOS,而改用kubernetes,至此,Mesos已经是慢慢的被淘汰了
- Docker Swarm也是一个非常轻量的群集管理工具,只有十几MB大小
- Swarm是Docker官方提供的一款集群管理工具,其主要工作是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源,但是Swarm和Kubernetes比较类似,因为更加轻,所以具有的功能较kubernetes更少一些
- 大概在2009年7月份的时候,阿里云宣布将Docker Swarm从选项列表中剔除,这也意味着在不久的将来Docker Swarm也会像Mesos一样慢慢被淘汰掉
- Kubernetes,作为亚洲的选手,起成为主流已是必然,Kubernetes是容器集群管理新系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护功能
- Kubernetes是Google 2014年创建管理的,是Goole 10多年来大规模容器管理技术Borg的开源版本
- Kubernetes的名字来自希腊语,意为“舵手”或“领航员”
- Kubernetes也叫k8s,8是中间的8个字母
1.3:k8s的优势
- 轻量级:消耗资源小,开源,弹性伸缩,负载均衡:IPVS
- 可移植:支持公有云、私有云、混合云、多重云(multi-cloud)
- 可扩展:模块化,插件化,可挂载,可组合
- 自动化:自动部署,自动重启,自动复制,自动伸缩/扩展
二:k8s的特性
2.1:自我修复
- 在节点故障时可以删除失效容器,可以创建新的容器,替换和重新部署,保证预期的副本数量,kill掉健康检查失败的容器,并且在容器未准备好之前不会处理客户端情况,确保线上服务不会中断
2.2:弹性伸缩
- 使用命令、UI或者k8s基于cpu使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性,业务低峰时回收资源,以最小的成本运行
2.3:自动部署和回滚
- k8s采用滚动更新策略更新应用,一次更新一个pod,而不是同时删除所有pod,如果更新过程中出现问题,将回滚恢复,确保升级不影响业务
2.4:服务发现于负载均衡
- k8s为多个容器提供一个统一的访问入口(内部IP地址和一个dns名称)并且负载均衡关联所有的容器,使得用户无需考虑容器IP问题
2.5:机密和配置管理
- 管理机密数据和应用程序配置,而不需要把敏感数据暴露在径向力,提高敏感数据安全性,并可以将一些常用的配置存储在k8s中,方便应用程序调用
2.6:存储编排
- 挂在外部存储系统,无论是来自本地存储、公有云(aws)、还是网络存储(nfs、GFS、ceph),都作为集群资源的一部分使用,极大提高存储使用灵活性
2.7:批处理
- 提供一次性任务、定时任务:满足批量数据处理和分析的场景
三:kubernetes集群
3.1:集群架构
- node:业务节点
- master:主控节点
- 主控节点的API server是其中唯一入口
- apiserver管理所有的事务,并把信息记录到etcd数据库中
- etcd有一个自动服务发现的特性机制,etcd会搭建有三个节点的集群,实现三副本
- scheduler调度器用来调度资源,查看业务节点的资源情况,确定在哪个node上创建pod,把指令告知API server
- 控制管理器controller-manager管理pod
- pod可以分为有状态和无状态的pod,一个pod里最好只放一个容器
- api server把任务下发给业务节点的kubelete去执行
- 客户访问通过kube-proxy去访问pod
- pod下面的不一定是docker,还有别的容器
- 一般pod中包含一个容器,但有个别情况,比如elk日志分析系统,elk会在pod内多放一个logstash收集日志
3.2:组件介绍
- master组件
- kube-apiserver:集群的统一入口,各组件之间的协调者,以restful api提供接口服务,所有对象资源的增删改查和监听操作都交给apiserver处理后再交给etcd存储记录
- kube-controller-manager:处理集群中常规的后台任务,一种资源对应一个控制器,controller-manager就是负责这些控制器的
- kube-scheduler:根据调度算法为新创建的pod选择一个node节点,可以任意指定部署,可以部署在同一个节点上,也可以部署在不同节点上
- etcd:分布式键值存储系统,用户保存集群状态数据,比如pod、service等对象信息
- node组件
- kubelet:kubelet是master在node节点上的代理agent,管理本node运行容器的生命周期。比如:创建容器、pod挂载数据卷、下载serect、获取容器和节点状态等工作,kubelet将每个pod转换成一组容器
- kube-proxy:在node节点上实现pod的网络代理,维护网络规则和四层的负载均衡工作
- docker或rockert:容器引擎,运行容器
3.3:kubernetes核心概念
- pod
- 最小部署单元
- 一组容器的集合
- 一个pod中的容器共享网络命名空间
- pod是短暂的
- controllers:
- replicaset:确保预期的pod副本数量
- deployment:无状态应用部署,比如nginx、apache,一定程度上的增减不会影响客户体验
- statefulset:有状态应用部署,是独一无二型的,会影响到客户的体验
- daemonset:确保所有node运行同一个pod,确保pod在统一命名空间
- job:一次性任务
- cronjob:定时任务
- 更高级层次对象:部署和管理pod
- service:
- 防止pod失联
- 定义一组pod的访问策略
- 确保了每个pod的独立性和安全性
- other:
- label:标签,附加到某个资源上,用户关联对象、查询和筛选
- namespaces:命名空间,将对象从逻辑上隔离
- annotations:注释
- 核心层:是Kubernetes最核心的层面,对外提供API构建高层的应用,对内提供插件式应用执行环境;
- 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等);
- 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PAP、NetworkPolicy等);
- 接口层:kubectl命令行工具、客户端SDK以及集群联邦;
- 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴;
- Kubernetes外部:日志、监控、配置管理、CI、Workflow、FaaS、OTS应用、Chat Ops等;
- Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等。