登录
登录 注册新账号
注册
已有账号登录
极客时间云原生训练营【完整】
原动力 阅读 79 次
6月17日发布

Download: 极客时间云原生训练营

云原生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 ),对我们的代码规范的调整有了较为明确的思路。最近也在看《代码整洁之道》,希望结合起来,后续能对团队中的代码做个好的规范。

  • 线上服务稳定性、可靠性等:我们之前也考虑过拆成微服务,但从单体拆成微服务的话,也会遇到相应的问题,服务之间如何进行调用,服务的可靠性的措施如何做(熔断、限流、降级等)。这些课程中也有讲解,也提供了很好的思路。

  • 另外还有一些实际案例,比如他讲的评论系统的设计,因为我们的服务也是一个内容社区,所以也会有对应的场景,也学习了不少经验。