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

本文涉及的产品
容器镜像服务 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方式服务直接调用

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
编译器 C++ 开发者
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
646 1
|
存储 关系型数据库 MySQL
mysql(三)用户权限管理
为什么要设置用户权限?MySQL设置用户管理权限的主要目的是为了确保数据库的安全性和数据的机密性。以下是一些原因。
551 1
mysql(三)用户权限管理
|
Java 应用服务中间件 Maven
解决A child container failed during start报错问题
解决A child container failed during start报错问题
338 0
|
人工智能 自然语言处理 机器人
Jina AI 发布中英和英德双语 8K 向量模型,魔搭社区开源最佳实践!
在 Jina Embeddings 英语向量模型突破百万下载后,今天,Jina AI正式开源了两款双语向量模型:中英双语(Chinese-English)和英德双语(English-German)向量模型,这也是全球首次推出支持 8K 双语文本的开源向量模型。
|
9月前
|
人工智能 JavaScript 前端开发
《鸿蒙Next ArkTS:开启人工智能应用开发高效新旅程》
在科技飞速发展的时代,人工智能与鸿蒙Next的结合成为开发者关注的焦点。ArkTS语言基于TypeScript,专为鸿蒙系统优化,支持静态类型检查和多种高级类型,能捕获潜在错误并充分利用鸿蒙底层能力。鸿蒙Next拥有微内核架构和分布式软总线技术,提供强大支持。开发环境搭建需安装Node.js、npm及DevEco Studio,并下载HarmonyOS SDK。通过引入HUAWEI HiAI等框架,开发者可实现多目标识别等功能。利用ArkTS的异步编程能力和声明式UI模型,可高效处理数据和用户交互。性能优化策略包括静态类型检查、WebAssembly加速及分布式任务分配。
269 11
|
11月前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
256 4
|
存储 弹性计算 云计算
深入理解云计算:探索IaaS、PaaS和SaaS服务模型
云计算作为当代信息技术领域的关键驱动力,通过提供弹性计算资源和灵活的服务模型,极大地改变了企业和个人的计算方式。本文深入探讨了云计算的基础概念,着重介绍了三种主要的云计算服务模型:IaaS、PaaS和SaaS。
1426 0
|
12月前
|
存储 安全 数据安全/隐私保护
数据传输中遇到问题要怎么解决
在数据传输中遇到问题时,可采取多种解决方案:使用可靠协议(如HTTPS、SFTP)、创建冗余备份、数据压缩与加密、错误检测与纠错、优化网络性能、解决数据丢失、降低延迟、提高安全性及解决带宽瓶颈。这些措施有助于确保数据传输的稳定、安全与高效。
|
机器学习/深度学习 分布式计算 算法
MaxCompute 的 MapReduce 与机器学习
【8月更文第31天】随着大数据时代的到来,如何有效地处理和分析海量数据成为了一个重要的课题。MapReduce 是一种编程模型,用于处理和生成大型数据集,其核心思想是将计算任务分解为可以并行处理的小任务。阿里云的 MaxCompute 是一个面向离线数据仓库的计算服务,提供了 MapReduce 接口来处理大规模数据集。本文将探讨如何利用 MaxCompute 的 MapReduce 功能来执行复杂的计算任务,特别是应用于机器学习场景。
280 0
|
存储 Java 测试技术
解析 -XX:+UseCompressedOops JVM 选项
【8月更文挑战第21天】
274 0