服务治理之 平台与应用服务解耦

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 业务完成`微服务改造(计算存储分离、控制数据分离)`,以`Kubernetes做运行时生命周期管理`, 并可以在`水平扩缩容`、`驱逐操作对业务无损`的云原生化改造

服务治理之 平台与应用服务解耦

原则

业务完成微服务改造(计算存储分离、控制数据分离),以Kubernetes做运行时生命周期管理, 并可以在水平扩缩容驱逐操作对业务无损的云原生化改造

1 首要原则:遏制应用无止境的使用operator来控制应用

遏制应用无止境的使用operator来控制应用,
建议使用hpavpa自带ingress-controller crds来控制 南北、东西 流量变化或者依赖服务可用性做调整

2 平台资源调用

2.1 禁止configmapmetaserver 服务使用

configmap只作为静态数据使用,不作为源数据服务使用。
举个例子:

  • configmap中配置服务其中基础配置: 日志等级启动模式功能开关等;
  • 不能将服务直接的 分布式锁Pod实例之间业务数据同步使用

2.2 禁止configmap配置中心 使用

configmap只作为静态数据使用,不作为config center使用。

举个例子:

  • configmap中只配置需要访问远程配置中心:URL地址、认证方式、请求策略等;
  • 不能直接用作pod的flag 配置开关;

2.3 禁止secret证书中心 使用

secret只作为静态的少量敏感信息例如密码、令牌或密钥的对象,不作为证书中心使用。

举个例子:

  • secret中配置 TLS 证书
  • 不能将secret作为证书ca 管理中心,频繁变更和下发证书;

2.4 禁止etcd服务 直接当 服务注册中心 使用

K8s 源数据etcd服务只作为Kubernetes底层数据使用,不能直接自定义CRD、自定义的configmapsecret来做服务注册发现

可以使用方式:通过KubeDNS+Kubernetes Service做服务发现;

2.5 禁止将 对象的label 当做容器运行时的metaserver使用

Label 只能做 key-value tag标签使用. 不能在pod 容器运行时,动态管理业务自用数据;

Label 的变更,只能是运维态做变更

2.6 禁止将 对象的annotation 当做容器运行时的metaserver使用

2.7 遏制将 对象的annotation 当做容器运行时的metaserver使用

annotation 只能做 key-value tag标签使用. 遏制在 pod 容器运行时,动态管理业务自用数据;
annotation 的变更,只能是运维态做变更 和 控制面组件 patch 使用;

3 安全性

3.1 遏制申请 特权容器

遏制 特权容器 申请; 引伸 业务服务化,减少 os 工具封装到Container中执行;

3.2 遏制避免挂在 host os 配置,在Pod中进行更改

遏制 host OS资源 挂载到Pod,扩大异常影响半径;
举例:
case:将iptable-storge相关资源挂载pod中,做xtable锁操作;

3.3 遏制rabc最小授权原则,遏制 全局/资源全部类型申请

  1. 减少ClusterRoleClusterRoleBinding全局资源类型申请;
  2. 禁止资源权限全局申请
    rules:
    - apiGroups:
     - '*'
     resources:
     - '*'
     verbs:
     - '*'
    

4 业务依赖client-go应用

纯微服务、纯业务应用不应该会用到 client-go/java SDK

4.1 要求业务依赖client-go应用版本不小于 Kubernetes apiserver version 2个大版本

版本问题:

  • 如果apiserver版本为v1.18.x, 那么依赖的client-go版本不能小于v0.16.x版本.
  • 如果apiserver版本为v1.18.x, client-go 使用版本大于v0.18.x原则上是可以的(需要测试验证功能)

4.2 要求对于依赖client-go应用,部署态显示配置QPSBurst

4.3 限制轮训 list all pod/node/configmap/secret等

限制全局轮训list all接口。 可以跟换为以下两种方式:

  1. 通过watch 方式添加add、delete、update 3这种event回调;
  2. 其中中添加opt.metav1(xxx) 设置条件:比如namespace选择、单次请求大小(500个)、filter tag不符合规范的object等

4.4 限制direct etcd请求,通过apiserver cache informer方式请求

4.5 要求对于watch资源,通过InformerFactory方式watch

4.6 遏制对apiserver 聚合aggregation api调用

5. 高可用

5.1 要求服务驱逐时,长/短链接、流量(东西、南北)无损

长/短链接:

  • 长链接:长链接主动connect close. 通过client 链接重新选实例建立,将链接全部驱逐掉;
  • 短链接:确保本次处理结束。优雅关闭链接;

流量:
通过设置 perStop + 实例分Step变更,实现流量无损;

5.1 建议无状态多实例部署;有状态实例支持sharding;

  • 有状态实例实例sharding比较考验业务架构,可选择"多活+数据同步"

6. 健康检查

6.1 健康检查中,首选 HTTP 探测,备选脚本探测,尽量避免 TCP 探测

6.2 要求所有容器添加 ReadinessProbe,谨慎使用 LivenessProbe

如果业务应用实例重启、驱逐敏感, 谨用 LivenessProbe

6.3 要求对于服务支持优雅重启,避免异常导致僵尸进程

支持容器runtime发出信号量,接受并处理。

7. 其他

7.1 建议部署态,亲和/反亲和设置

7.2 建议通过service、内部DNS 或 南北项LB方式服务直接调用

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
负载均衡 网络协议 微服务
服务注册:构建可伸缩性微服务架构的关键一环
在现代分布式应用程序中,微服务架构已经成为一种主流的开发方式。服务注册是构建可伸缩性微服务架构的关键组成部分之一。在本博客中,我们将深入探讨服务注册的概念、作用以及如何在微服务环境中有效地使用它。
|
6天前
|
运维 监控 负载均衡
探索微服务架构下的服务治理:动态服务管理平台深度解析
探索微服务架构下的服务治理:动态服务管理平台深度解析
|
6天前
|
监控 Nacos 数据安全/隐私保护
动态服务管理平台在微服务架构中的实践与探索
动态服务管理平台在微服务架构中的实践与探索
|
6天前
|
运维 监控 Nacos
探索微服务架构下的服务治理:动态服务管理平台的力量
探索微服务架构下的服务治理:动态服务管理平台的力量
|
4天前
|
监控 负载均衡 Java
微服务架构下的服务治理与监控
微服务架构下的服务治理与监控
15 0
|
8天前
|
存储 监控 负载均衡
构建高效微服务架构:服务治理与监控的实践
构建高效微服务架构:服务治理与监控的实践
|
3月前
|
存储 监控 负载均衡
微服务架构中的服务治理与监控技术
【8月更文挑战第3天】微服务架构中的服务治理与监控是确保系统稳定、高效运行的重要手段。通过构建注册中心实现服务的自动注册和发现,通过部署监控工具实现对服务的全面监控,可以有效地提高系统的可靠性和可用性。未来,随着技术的不断发展,服务治理与监控技术也将不断完善和优化,为微服务架构的广泛应用提供更加坚实的支撑。
|
6月前
|
负载均衡 算法 NoSQL
探索微服务架构下的服务发现与治理
【5月更文挑战第9天】 在当今的软件开发领域,微服务架构已成为构建可伸缩、灵活且容错的系统的首选模式。随着服务的增多,如何有效地进行服务发现与治理成为了关键的挑战。本文将深入探讨微服务环境中服务发现的机制和治理策略,分析不同服务发现工具的优缺点,并提出一种基于一致性哈希和健康检查相结合的服务治理方案,旨在提高系统的可用性和性能。
|
6月前
|
SQL 监控 安全
微服务网关的那些核心本领
微服务网关的那些核心本领
118 0
下一篇
无影云桌面