视音频解码服务商Bitmovin是如何采用Kubernetes进行多级应用部署

简介: 在不同的公有云上运行大规模视频音频编解码平台是非常有挑战的。Bitmoving在过去的平台运维中积累了很多经验,但是也有不少困难。所以,kubernetes首先吸引我们的就是它对底层公有云平台的抽象,并且提供了定义完好的API接口。

在不同的公有云上运行大规模视频音频编解码平台是非常有挑战的。Bitmoving在过去的平台运维中积累了很多经验,但是也有不少困难。所以,kubernetes首先吸引我们的就是它对底层公有云平台的抽象,并且提供了定义完好的API接口。更为重要的是,kubernetes不只是提供了一种一般程度上的抽象,它是把运行容器平台所需要的工具和概念进行了全面的整合抽象,并且能够无缝的对接各种公有云的基础设施。

在我们的初始测试阶段,我们已经相当熟悉kubernetes的API调用了,当 我们的服务不仅需要部署到公有云中,而且需要部署到客户的私有数据中心中时,我们迅速决定利用kubernetes来完成我们从公有云服务到私有云服务的在技术上的统一。

这个就是我们后来推出的bitmovin Managed On-Premise encoding服务。因为kuberenets对用户来说屏蔽了底层基础设施的不同,我们可以采用一套API来驱动公有云服务或者私有云服务。当然如果要达成这样的目标,我们就无法采用像LoadBalancer Service这样的的组件,因为对企业用户来说,他们通常不愿意把内部端口暴露出去,而且一般情况下,企业进行平台部署时也不会存在已经和kubernetes整合完好的外部LoadBalancer。为了解决这个问题,我们开发了BitmovinAgent组件,它运行在客户环境的集群中,不需要任何网络上的配置,这个组件查询需要运行的encoding job, 获取本地认证信息,然后通过kubernetes API调用运行这些job.。虽然不是一个完全的整合,但是kubernetes API提供各种任务调度,健康检查,监控服务都使我们更加专注于本身的业务开发,而不需要花时间在如何驱动底层的基础设施上。

20170504135634

金丝雀部署

我们在四个月前把应用移植部署到了kubernetes平台。这个平台上我们跑着很多容器。为了能够做好从开发到生产的不间断快速迭代,我们需要满足以下几个要求:

1、对于用户来说,应用从不中断。
2、每次新版本的发布,能够快速从开发到生产不间断部署。
3、保证应用部署的高质量。

我们可以看到要同时做到第二点和第三点是很有挑战的。为了应对这样的挑战,我们对于每一个需要上线的微服务采用了一种四个阶段的金丝雀部署pipeline。直到我们认为新的应用版本升级是安全的,我们才会在生产环境中进行大规模部署。

首先,当新版本发布后,我们会部署到我们的内部环境中进行测试,当测试通过后,我们会将应用部署到免费客户平台中,这意味着有5%的免费用户会访问我们新版本的应用。接着,我们会将新应用部署到5%的付费用户中。只有在前面三个平台上表现良好,我们才会在生产上大规模采用新版本的应用。

20170504135645

根据图一的部署,我们可以来看看系统中的pod数量和分类。一般来说,我们给每个微服务分配2个internal pod、4个free pod、4个paid pod和10个productionpod,还要加上4个haproxy的pod,请见下表:

20170504135652

一个典型的service yaml文件如下:

apiVersion: v1

kind: Service

metadata:

 name: account-service-production

 labels:

app: account-service-production

 tier: service

 lb: private

spec:

 ports: - port: 8080

 name: http

 targetPort: 8080

 protocol: TCP

 selector:

 app: account-service

 tier: service

 track: production

在kubernetes service前端,我们部署了小型HAProxy集群。HAProxy pod从ConfigMaps中拿到haproxy.cfg配置。见下图:

frontend http-in

 bind *:80

 log 127.0.0.1 local2 debug

 

 acl traffic_internal hdr(X-Traffic-Group) -m str -i INTERNAL

 acl traffic_free hdr(X-Traffic-Group) -m str -i FREE

 acl traffic_enterprise hdr(X-Traffic-Group) -m str -i ENTERPRISE

 

 use_backend internal if traffic_internal

 use_backend canary if traffic_free

 use_backend enterprise if traffic_enterprise

 

 default_backend paid

 

backend internal

 balance roundrobin

 server internal-lb user-resource-service-internal:8080 resolvers dns check inter 2000

backend canary

 balance roundrobin

 server canary-lb user-resource-service-canary:8080 resolvers dns check inter 2000 weight 5

 server production-lb user-resource-service-production:8080 resolvers dns check inter 2000 weight 95

backend paid

 balance roundrobin

 server canary-paid-lb user-resource-service-paid:8080 resolvers dns check inter 2000 weight 5

 server production-lb user-resource-service-production:8080 resolvers dns check inter 2000 weight 95

backend enterprise

 balance roundrobin

 server production-lb user-resource-service-production:8080 resolvers dns check inter 2000 weight 100

我们系统中的API网关会为每个用户请求头部分配一个X-Traffic-Group的标识,HAProxy根据这个标识来路由用户请求到不同的金丝雀部署环境中。

当生产规模进行扩展时,采用kubectl有时候不能有效跟踪各个部署的状态,各个pod的副本数是过多还是过少。我们用go并且调用kubernetes client-go库编写了自己的工具来对系统中运行的各个部署状态进行有效的监控和管理。

值得一提的是,我们还开发了一个健康检查工具。这个工具查找所有包含tier:service的selector, 检查和这个service相关的HAProxy是否健康,并且检查每种Pod包含4个副本。它还会检查HAProxy后面的四种部署(internal, free, paid,production)最少存在两个有效的endpoints. 如果有任何错误发生,这个工具会发邮件或者Slack通知。

Kubernetes的资源配置说明resource specifications能让我们为集群中的specifications建立git库。这样每当我们对集群做出了改变,我们都能进行版本管理和追溯。

最后我们总结一下采用了kubernetes进行多级应用部署后的好处:

1、持续不间断的应用部署。完美一致的用户体验。
2、使我们能够很快的发布新的版本上线。
3、多层次的测试发布能够保证应用最大限度的稳定。
4、全面整合公有云和私有云的部署。
5、完善的资源调度和健康检查。
6、采用工具对系统的健康稳定性做全局的检测。
7、配置版本的支持。

本文转自中文社区-视音频解码服务商Bitmovin是如何采用Kubernetes进行多级应用部署

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
借助阿里云ACK One注册集群,充分利用阿里云强大ACS GPU算力,实现DeepSeek推理模型高效部署。
|
9天前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
10天前
|
存储 人工智能 弹性计算
NVIDIA NIM on ACK:优化生成式AI模型的部署与管理
本文结合NVIDIA NIM和阿里云容器服务,提出了基于ACK的完整服务化管理方案,用于优化生成式AI模型的部署和管理。
|
4天前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
|
4月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
2月前
|
存储 Kubernetes 容器
K8S部署nexus
该配置文件定义了Nexus 3的Kubernetes部署,包括PersistentVolumeClaim、Deployment和服务。PVC请求20Gi存储,使用NFS存储类。Deployment配置了一个Nexus 3容器,内存限制为6G,CPU为1000m,并挂载数据卷。Service类型为NodePort,通过30520端口对外提供服务。所有资源位于`nexus`命名空间中。
|
4月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
306 62
|
4月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
180 60
|
3月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
3月前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
102 0