早期在物理机上直接运行应用程序,无法对其定义资源边界,导致资源不分配,其他的程序性能下降
虚拟化允许应用程序在VM之间隔离,并提供安全界别,但是不能自由访问应用程序
因为虚拟haul可以轻松添加或更新应用程序,减低硬件成本,所有可以更好的利用资源,可以时实现更好的可伸缩性,每个mv都是一台完整的计算机。
因为调用的是虚拟资源所有没有特别的优质底层资源。
kubernetes是一个开源的可移植,可扩展的容器编排调度引擎,使用GO语言开进行发。和docker容器结合在一起,可实现容器技术的分布式架构方案。主要用于自动化部署,扩张和管理容器类应用,提供资源调度,部署管理,服务发现,扩容缩容,监控等功能。
它的目标不仅仅是一个容器编排功能,二十题共一个应用规范,用户可以描述集群的架构,定义服务的最终状态,kubernetes可以将系统达到和维持在这个状态。
使用kubernetes具备的好处
具备微服务架构
微服务架构背后有多个实例副本支撑,二k8s平台中内嵌的负载均衡调度器发挥着重要作用
具备超强的横向扩容能力
kubernetes服务功能
kubernetes服务特点
kubernetes应用场景
kubernetes架构
master节点组件
master节点提供集群的管理控制中心,对集群进行全局决策,并检测和响应集群事件,基本上k8s所有的控制命令都是发送给master,master负责具体的执行过程,建议master节点占据一个独立的服务器并做高可用
kube-apiserver:用于暴露kubernetes api接口,任何资源请求/调用操作都经过它,提供了http rest接口的关键服务进程,是kubernetes中有的资源的增删改查等操作的唯一入口,也是集群控制入口进程
Etcd:是kubernetes听的默认存储,所有集群数据都保存在其中。使用时建议备份
kube-scheduler:是负责资源调度的进程,监视新创建且没有分配到node的pod
kube-controller-manager:运行管理控制器,是集群中吃力常规任务的后台进程,是kubernetesi所有资源对象的自动化控制中心。
node节点
node节点是k8s集群中的工作负载节点,每个node都会别master分配一些工作负载,当某个node宕机时,node上的工作负载会被master转移到其他的node节点上去
node节点可以在运行期间动态增加kubernetes集群中,前提是这个节点上已经正确安装,配置和启动上述关键进程。默认情况上下,kubelet会向master注册自己。一旦node节点被纳入集群管理范围,kubelet进程会定时向master汇报自身情况。
插件(Addons)
插件使用kubernetes资源实现集群功能。因为这些提供集群级别的功能,所以插件的命名空间资源我属于kube-system命名空间
除了核心组件,还有一些推荐的Add-ons:
kubernetes资源对象
kubernetes所有的资源对象都可以通过其提供的kubectl工具进行增删改查等操作,并将其保存在Etcd中持久化存储。
pod(豆荚):是kubernetes创建或部署的最小的基本单位,一个pod代表集群上正在运行的一个进程。一个pod由一个或多个容器组成,od中容器可以共享存储和网络。在同一台docker主机上运行,每个pod都有一个特殊的别称为“根容器”的pause容器,pause容器对应的镜像属于kubernetes平台的一部分。除了pause容器,每个pod包含一个或多个紧密相关的用户业务容器
label(标签):一个label是一个key-value的键值对,其中key与value由用户自己指定,label可以附加到各种资源对象上,一个资源对象可以定义任意数量的label,同一个label也可以被添加到任意数量的资源对象中,可以通过label selector 标签选择器查询和筛选拥有某些label的资源对象
replicaset controller(复制控制器 RC):是最早保证pod高可用的api对象,通过监控运行中的pod来保证集群中运行指定数目的pod副本。
RS与RC唯一区别就是label selector支持不同,RS支持行的基于集合的标签,RC仅支持基于等式的标签
Deploymnet(部署):表示用户对k8s集群的更新,也可以是创建一个新的服务,逐渐将新RS中副本数量增加到理想状态,并且将旧RS中的副本数减少到0的复合操作,未来对所有的长期服务型的业务管理
service(服务):RC保证了pod数量,deployment保证维护,此时就需要service来解决访问问题,service将pod包含到一起,并对外提供一个访问地址。然后service对其进行负载均衡调度,进行分配。
是由kube-proxy(负载均衡器)实现的,在k8s的每个node节点都会运行一个kube-proxy组件。
jbk(计划任务):用来控制批处理型任务的api对象
volume(数据卷):共享pod中容器使用的数据
namespace:命名空间将独享逻辑分配到不同的namespace,可以是不同的项目,用户等区分管理
statefulset:适合持久性的应用程序,有唯一的网络标志符(ip),持久存储,有序的部署,扩展,删除和滚动更新
kubernetes原理
Deployment-应用管理者
当我们有一个k8s集群后,此时可以在上面跑docker可以运行的应用,也就是docker镜像
有了镜像后。就会通过Deployment配合着文件描述应用,写入配置文件.yaml中
有了配置文件就可以通过k8s提供的命令行客户端kubectl去管理这个应用,kubectl会和master通过验证授权连接上api在和RestAPI通信,完成应用管理,例如kubectl create -f .yaml 来创建这个应用。
创建完成,由k8s来保证应用运行。
pod-kubernetes 最小调度单位
pod就是一组容器,可以通过volume共享存储
相同的网络空间,一样的IP地址,一样的网卡和网络设置
互相沟通隧道
service-服务发现-找到每一个pod
上面的Deployment创建后,pod也运行起来了,但是pod-ip+prot来访问时,ip一直在变,并且pod-ip很多,所以,需要一个来对其控制
service通过pod的label标签来对其维护,并且对外提供了多个入口
rollingupdate-滚动升级
就是一边增加新版本的pod数量,一边减少旧版本的pod直到0
管理员--kubelet--deployment(nginx.yaml)--label--service--pod--container
手机扫一扫
移动阅读更方便
你可能感兴趣的文章