文章转载自:https://mp.weixin.qq.com/s/7FhiI09xKdJXJfrf89Q-8w

在生产中运行应用程序可能很棘手。这篇文章提出了一个自以为是的清单,用于在 Kubernetes 上使用 Web 服务(即应用程序公开 HTTP API)进入生产环境。

一般

  • 应用程序的名称、描述、用途和拥有团队被清楚地记录在案(例如通过服务树)
  • 定义应用程序的关键级别(例如,如果应用程序对业务非常关键,则为“关键链路程序”)
  • 开发团队对k8s技术栈有足够的知识/经验,比如服务无状态等
  • 确定并通知负责的 24/7 待命团队
  • 存在上线计划,包括(潜在回滚的步骤)

应用

  • 应用程序的代码库 (git) 有关于如何开发、如何配置以及如何更改的明确说明(对于紧急修复很重要)
  • 代码依赖被固定(即修补程序更改不会意外引入新库)
  • 遵循OpenTracing/OpenTelemetry语义约定
  • 所有发起的 HTTP 调用都定义超时时间
  • HTTP 连接池根据预期流量配置合理的值
  • 线程池或非阻塞异步代码已正确实现与配置
  • redis,数据库连接池配置大小正确
  • 为依赖服务实施重试和重试策略(例如退避抖动)
  • 根据业务需求定义的回滚机制
  • 实施了减载/速率限制机制(可能是提供的基础设施的一部分)
  • 应用程序指标公开以供收集(例如由 Prometheus 抓取)
  • 应用程序日志转到 stdout/stderr
  • 应用程序日志遵循良好的实践(例如结构化日志记录、有意义的消息)、明确定义日志级别,并且默认情况下对生产禁用调试日志记录(可以选择打开)
  • 应用程序容器因致命错误而崩溃(即它没有进入某些不可恢复的状态或死锁)
  • 应用程序设计与代码由高级工程师审查

安全与合规

  • 应用程序可以作为非特权用户(非 root)运行
  • 应用程序不需要可写的容器文件系统(即可以只读挂载)
  • HTTP 请求经过身份验证和授权(例如使用 OAuth)
  • 缓解拒绝服务 (DOS) 攻击的机制已经到位(例如入口速率限制、WAF)
  • 进行了安全审计
  • 代码/依赖项的自动漏洞检查已经到位
  • 处理后的数据被理解、分类(例如 PII)并记录在案
  • 已创建威胁模型并记录风险
  • 遵循其他适用的组织规则和合规标准

持续集成/持续交付

  • 每次更改都会自动运行
  • 自动化测试是交付管道的一部分
  • 生产部署不需要手动操作
  • 所有相关团队成员都可以部署和回滚
  • 生产部署有冒烟测试和可选的自动回滚
  • 从代码提交到生产的前置时间很快(例如 15 分钟或更短,包括测试运行)

Kubernetes

  • 开发团队受过 Kubernetes 主题培训,了解相关概念
  • Kubernetes 清单使用最新的 API 版本(例如,用于部署的apps/v1)
  • 容器以非 root 用户身份运行并使用只读文件系统
  • 定义了适当的就绪探针
  • 未使用 Liveness Probe,或者使用 Liveness Probe 有明确的理由
  • Kubernetes 部署至少有两个副本
  • 如果足够,则配置水平自动缩放 (HPA)
  • 根据性能与负载测试设置内存和 CPU 请求
  • 内存限制等于内存请求(避免内存过度使用)
  • 未设置 CPU 限制或 CPU 节流的影响很好理解
  • 为容器环境正确配置了应用程序(例如 JVM 堆、单线程运行时、非容器感知的运行时)
  • 每个容器运行单个应用程序进程
  • 应用程序可以在不中断的情况下处理正常关闭和滚动更新
  • 如果应用程序不处理正常终止,则使用Pod Lifecycle Hook(例如preStop 中的“sleep 20” )
  • 设置所有必需的 Pod 标签
  • 应用程序设置为高可用性:Pod 分布在故障域或应用程序部署到多个集群
  • Kubernetes Service 为 pod 使用正确的标签选择器(例如,不仅匹配“应用程序”标签,还匹配“组件”和“环境”以供将来扩展)
  • 可选:根据需要使用容忍(例如将 pod 绑定到特定的节点池)

监控

  • 收集了四个黄金信号的指标
  • 收集应用程序指标(例如通过 Prometheus 抓取)
  • 将数据库(例如 PostgreSQL 数据库)受到监控
  • SLO 已定义
  • 存在监控仪表板(例如 Grafana)(可以自动设置)
  • 警报规则是根据影响而不是潜在原因定义的

测试

  • 断点测试(系统/混沌测试)
  • 执行负载测试以反映预期的流量模式
  • 测试了数据存储(如 PostgreSQL 数据库)的备份和恢复

24/7 服务团队

  • 所有相关的 24/7服务团队都被告知上线(例如其他团队、SRE 或其他角色,如事件指挥官)
  • 24/7 服务团队对应用程序和业务环境有足够的了解
  • 24/7 服务团队拥有必要的生产访问权限(例如 kubectl、kube-web-view、应用程序日志)
  • 24/7 服务团队拥有解决技术堆栈(例如 JVM)生产问题的专业知识
  • 24/7 服务团队经过培训并有信心执行标准操作(扩展、回滚等)
  • 设置了呼叫 24/7 服务团队的监控警报
  • 告警自动升级规则已到位(例如,在 10 分钟后没有确认升级高级级别)
  • 存在进行事后分析和传播事件学习的过程
  • 定期进行应用程序与操作审查(例如查看 SLO 违规情况)

上K8s生产环境的准备有哪些?的更多相关文章

  1. AWS EKS 创建k8s生产环境实例

    #AWS EKS 创建k8s生产环境实例 在AWS部署海外节点, 图简单使用web控制台创建VPC和k8s集群出错(k8s), 使用cli命令行工具创建成功 本实例为复盘, 记录aws命令行工具创建e ...

  2. K8S生产环境中实践高可靠的配置和技巧都有哪些?

    K8S环境中实践高可靠的配置和技巧都有哪些? 磁盘类型及大小 磁盘类型: 推荐使用ssd 磁盘 对于worker节点,创建集群时推荐使用挂载数据盘.这个盘是专门给/var/lib/docker 存放本 ...

  3. k8s生产环境部署

    建议配置: 服务器 900G*2 SSD 安装操作系统 CPU 16核心*2 40G网卡*2 RAM 64G*8 操作系统建议:Centos7.4/Centos 7.6 不建议使用CentOS8 分布 ...

  4. 生产环境容器落地最佳实践 --JFrog 内部K8s落地旅程

    引言 Kubernetes已经成为市场上事实上领先的编配工具,不仅对技术公司如此,对所有公司都是如此,因为它允许您快速且可预测地部署应用程序.动态地伸缩应用程序.无缝地推出新特性,同时有效地利用硬件资 ...

  5. 从零开始,将ASP.NET Core部署到Linux生产环境

    研究.NET Core已经一段时间了,一直都是在Windows上开发,这2天尝试着将公司一个很简单的内部Web项目改造成了ASP.NET Core,并且部署到Linux上.生产环境如下: Linux ...

  6. 使用 Kafka 在生产环境构建大规模机器学习

    智能实时应用为所有行业带来了革命性变化.机器学习及其分支深度学习正蓬勃发展,因为机器学习让计算机能够在无人指引的情况下挖掘深藏的洞见.这种能力正是多种领域所需要的,如非结构化数据分析.图像识别.语音识 ...

  7. 单例模式在生产环境jedis集群中的应用

    背景:不久前单位上线一款应用,上了生产环境之后,没过多久,便吃掉了服务器所有的内存,最后导致网站服务挂了. 在解决了这一问题之后,我发现这其实是典型的一单例模式,现分享一下. 之前存在问题的老代码如下 ...

  8. DOCKER 学习笔记9 Kubernetes (K8s) 生产级容器编排 上

    前言 在上一节的学习中.我们已经可以通过最基本的 Docker Swarm 创建集群,然后在集群里面加入我们需要运行的任务 以及任务的数量 这样我们就创建了一个服务. 当然,这样的方式在我们本地虚拟机 ...

  9. Filebeat 收集K8S 日志,生产环境实践

    根据生产环境要求,需要采集K8Spod 日志,和开发协商之后,pod中应用会将日志输出到容器终端上,这时可以直接用filebeat 采集node节点上面的/var/log/containers/*.l ...

随机推荐

  1. Java基础语法02

    回顾前面的章节,我们学习了(1.注释,2.标识符和关键字,3.数据类型)今天让我们继续加油. 四.变量,常量,作用域1.变量是什么:存数的(可以变化的量) Java是一种强类型语言,每个变量都必须声明 ...

  2. 倍增求RMQ

    RMQ,即区间最值查询,给定一个序列,求区间l-r的最大值.最小值. st表求RMQ,预处理On*logn,查询O1. 预处理: void init_rmq() { for(rll j=1;j< ...

  3. gotoscan:CMS指纹识别工具

    gotoscan 前言 项目地址 https://github.com/newbe3three/gotoscan 结合自己学习到的Go相关知识,通过实现这个简易的CMS指纹识别工具来锻炼一下自己写代码 ...

  4. Bika LIMS 开源LIMS集—— SENAITE的使用(分析/测试、方法)

    分析/测试项目分类(Test Category) 定义检测项目的分类,例如理化检测.微生物检测,或者按样品的维度定义,例如食品检测.水质检测等. 分析方法(Test Method) 定义实验室分析方法 ...

  5. Kafka与Spark案例实践

    1.概述 Kafka系统的灵活多变,让它拥有丰富的拓展性,可以与第三方套件很方便的对接.例如,实时计算引擎Spark.接下来通过一个完整案例,运用Kafka和Spark来合理完成. 2.内容 2.1 ...

  6. 使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_117 最近同学出去面试经常会被问到一个问题. 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像 ...

  7. Win10使用fvm管理多个Flutter版本

    Win10使用fvm管理多个Flutter版本 参考:https://blog.csdn.net/PyMuma/article/details/115298645 1.升级Flutter 由于现在的f ...

  8. vscode 源代码不能自动stage change

    前言 vscode的强大不用赘述了,当你开始使用自然就会爱上他.围绕着IDE的编写体验,有很多强大的自带或者第三方插件,可以做到,编码,git管理,甚至部署一条龙[我司就有这样的插件],让大家沉迷其中 ...

  9. meterpreter后期攻击使用方法

    Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道.使用它作为攻击载荷能够获得目标系统的一个Meterp ...

  10. FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务

    FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务 前言 最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器.按照从前的思路,自然是,先将文件传到电脑,再由电脑上传 ...