提供底层云计算服务。如服务器和虚拟机,存储空间,网络和操作系统。
可以按需提供开发,测试交付和管理应用程序所需的环境,包括中间件和数据库等
直接提供现成的软件服务
云原生是一套直到进行软件架构设计的思想。
软件的开发,运维,交付,应用都是在云上的。云原生以容器技术为基础。
云原生的技术范畴
第一部分是云应用的开发:
偏向云原生应用的定义,镜像制作,CI/CD的配置,数据库等
第二部分是云应用的编排和管理流程:
这是Kubernetes比较关注度的部分。包括了应用编排和调度,服务发现治理,远程调用,API网关以及Service Mesh
第三部分是监控和可观测性:
强调云上应用如何进行监控,日志收集等
第四部分:
底层技术:设计到容器运行时的云原生存储技术和云原生网络技术。
第五部分:
云原生工具集:
容器镜像仓库,云原生安全技术等
第六部分:
Serverless: 什么是无服务器计算?
“构建或者使用一个微服务或者微功能来响应一个事件”
访问的时候,调入相关资源开始运行,运行完成后,卸载所有的开销,真正做到按需按次计费。
Serveless是一种构建和管理基于微服务架构的完整流程,允许在服务部署级别而不是服务器部署级别来管理应用部署。
Serveless真正做到了部署应用无须设计基础设施的建设,实现自动构建,部署和启动服务。
不可变基础设施
应用的基础设施不可变,通过容器镜像实现。
云应用编排理论
与K8s相关的容器设计模式
由开发者实现的服务端逻辑运行在无状态的计算容器中,由事件触发。完全由第三方管理,业务层面的状态被开发者使用的数据库和存储资源所记录。
开发者无须自行管理服务器系统或者自己的服务器应用程序,直接可以运行后端代码。
不编写和管理所有的服务端组件,可以使用领域通用的远程组件来提供服务。BaaS并非PaaS,他们的区别在于,PaaS需要参与应用的生命周期管理,BaaS仅仅提供应用依赖的第三方服务。
PaaS平台需要提供手段让开发者部署和配置应用,例如自动把应用部署到Tomcat容器中,但是BaaS可以直接提供API服务调用。
Kubernetes是什么
一个工业级容器编排平台,用于容器化应用的部署,调度,生命周期管理的工具。
核心功能:
1.服务发现与负载均衡(kubeproxy)
2.容器的自动装箱,也叫做scheduling,就是"调度"
3.Kubernetes会帮我们去做容器化的容器的恢复。如果是因为宿主机的问题导致容器不可用,Kubernetes会自动对这些不可用的容器进行恢复。
4.应用自动的发布和应用回滚,以及与应用相关的配置的密文管理
5.Kubernetes也支持水平伸缩。
一个比较典型的分布式二层server-client架构。
Master Node:
Api Server 负责与外界和worker节点进行交互。K8s所有组件都会与Api Server进行连接。组件与组件之间一般不进行独立的连接,都依赖API Server进行消息的传送。
Controller: 控制器,用来完成对集群状态的管理。保证K8s集群的显示状态向期望状态靠拢。主要体现在自动对容器进行修复。和自动进行水平扩张。
Scheduler 完成调度操作。把用户提交的容器放到合适的节点上运行
etcd 一个分布式key-value存储系统,用来持久化K8s集群的状态。依靠raft协议来维持分布式一致性
Worker Node
Node是真正运行业务负载的,每个业务以Pod为单位运行。
Pod是K8s运行的基本单位,一个Pod中运行一个或者多个容器。
真正去运行Pod的组件叫做kubelet
在Kubernetes自己的环境中,也会有Kubernetes的Network.它是为了提供Service network来进行搭建网络的。
真正完成service组网的组件是kube-proxy,利用了iptable的能力来进行组件Kubernetes的Network,就是cluster network.
简要来说kube-proxy是用来实现service的,具体工作原理有待继续学习
另外,Kubernetes并不会直接进行网络存储的操作,它们会靠Storage Plugin或者网络的Plugin来进行操作。用户自己或者云厂商都会写相应的Storage Plugin或者Network Plugin去完成存储或者网络操作。
我们先复习下K8s Master和Worker有什么组件?
Master:
Worker:
kubelet
kube-proxy
Pod
K8s本质上是一个期望状态管理器.现在Kubernets指定应用程序的期望状态,然后它会尝试把应用维持在这种状态.
Kubernetes控制平面运行在Master节点上,它包含数个controller以调和应用到达期望状态(现状向期望状态收敛的过程)
K8s原生适合维护无状态的应用.但如果场景是一个数据库应用运行在多个节点上,如果超过半数的节点出现故障,需要按照特定步骤从特定快照中加载数据.使用原生Kubernetes对象类型和controller难以实现
Operator通过Custom Controller协调应用spec.虽然API服务知道Custom Controller,但是Operator可以独立运行在集群的内部或者外部