云原生训练营KEの下——栽
下——栽の地 止:
ukoou.com/resource/1055
云原生Kubernetes 系统快速入门
1)生态层:不属于K8S范围
2)接口层(工具、SDK库、UI等):
K8S官方的项目会提供库、工具、UI等外围工具 外部可提供自有的实现 3)治理层:策略执行和自动化编排
对应用运行的可选层,没有这层功能不影响应用的执行 自动化API:水平弹性伸缩、租户管理、集群管理、动态LB等 策略API:限速、资源配额、pod可靠性策略、network policy等 4)应用层:部署(无状态/有状态应用、批处理、集群应用等)和路由(服务发现、DNS解析等)
K8S发行版必备功能和API,K8S会提供默认的实现,如Scheduler Controller和scheduler可以被替换为各自的实现,但必须通过一致性测试 业务管理类Controller:daemonset/replicaset/replication/statefulset/cronjob/service/endpoint 5)内核层:Kubernetes最核心功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
由主流K8S codebase实现(主项目),属于K8S的内核、最小特性集。等同于Linux Kernel 提供必不可少Controller、Scheduler的默认实现 集群管理类Controller:Node/gc/podgc/volume/namespace/resourcequota/serviceaccoun 总的来说:
内核层:提供最核心的特性最小集以及API,为必选模块
内核层之上:以各种Controller插件方式实现内核层API,支持可替换的实现
内核层之下:是各种适配存储、网络、容器、Cloud Provider等
{
"kind": "Pod",
"apiVersion": "v1",
"metadata": {
"name": "redis-django",
"labels": {
"app": "webapp"
}
},
"spec": {
"containers": [
{
"name": "key-value-store",
"image": "redis"
},
{
"name": "frontend",
"image": "django"
}
]
}
}
云原生训练营项目实战
云原生:微服务架构的任务调度解决方案elastic-job elastic-job与quartz的异同
elastic-job使用了quartz的调度机制,内部原理一致,可以看作是quartz的一个扩展实现。区别主要在于elastic-job使用了注册中心(zookeeper)替换了quartz的jdbc数据存储方式,此外,elastic-job又支持分片等特殊功能.
elastic-job优点
不存在数据库瓶颈,性能高。 任务数大且要求低延迟时,一般不需要做二次分发,只要划分更多的分片即可。 代码开源,已经通过大量公司的实际使用,口碑好。 支持单独配置单个任务的策略配置,支持脚本任务。 elastic-job也不是完全没有缺点,主要是zookeeper部署在有状态容器中会增加一定的运维成本。
-
代码规范:我们现在仍然是一个大单体服务,并且使用的是单仓模式,我现在负责的项目代码级别大概是 50w 行的代码(包括线上、后台、定时任务等),所以之前的代码特别乱,基本上没有很好的目录结构、分层规范。这一块也是我们一直想迭代,但是一直没有很好的思路。 听了毛剑的课后,也看了一下 kratos 及它对应的示例( beer-shop ),对我们的代码规范的调整有了较为明确的思路。最近也在看《代码整洁之道》,希望结合起来,后续能对团队中的代码做个好的规范。
-
线上服务稳定性、可靠性等:我们之前也考虑过拆成微服务,但从单体拆成微服务的话,也会遇到相应的问题,服务之间如何进行调用,服务的可靠性的措施如何做(熔断、限流、降级等)。这些课程中也有讲解,也提供了很好的思路。
-
另外还有一些实际案例,比如他讲的评论系统的设计,因为我们的服务也是一个内容社区,所以也会有对应的场景,也学习了不少经验。