视音频解码服务商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进行多级应用部署

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
25天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
33 0
|
2月前
|
运维
计算巢如何使用fluxcd在ack部署helm chart
为支持helm服务运维管理功能,现在改用fluxcd的方式进行helm chart部署,这里计算巢对fluxcd进行部署helm chart的过程进行了封装,封装成了ROS公共模块MODULE::ACS::ComputeNest::FluxOciHelmDeploy,下面将主要介绍下怎么使用这个模块在计算巢中进行Helm Chart的部署。
36 3
|
2月前
|
Kubernetes 容器
使用sealer部署k8s记录
使用sealer部署k8s记录
|
2月前
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
44 10
|
2月前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
42 4
|
2月前
|
存储 Kubernetes 网络协议
使用 K8S 部署 RSS 全套自托管解决方案 - RssHub + Tiny Tiny Rss
使用 K8S 部署 RSS 全套自托管解决方案 - RssHub + Tiny Tiny Rss
|
26天前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
33 7
|
3月前
|
存储 Kubernetes Apache
pulsar on k8s 部署验证
pulsar on k8s 部署验证
|
9天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
47 17
|
21天前
|
Kubernetes Ubuntu 应用服务中间件
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
90 0