Watson Health Cloud如何使用Kubernetes部署应用程序

今天的帖子是 桑迪亚·卡普尔(Sandhya Kapoor),IBM Watson for Health平台高级技术人员

一年多来,IBM的Watson Health for Health平台在我们云平台上的虚拟机中部署了医疗保健应用程序。因为虚拟机对于我们来说是一个昂贵,重量级的解决方案,所以我们有兴趣评估我们的部署的Kubernetes。

我们的设计是在同一个名称空间中设置应用程序和数据容器,以及使用边车的所需代理,以满足医疗保健行业的安全性和合规性要求。

与使用虚拟机相比,我可以在单个物理服务器上运行更多的进程。此外,在容器中运行我们的应用程序可确保系统资源的最佳利用。

为了协调容器的部署,我们正在使用 IBM云 Kubernetes服务基础架构,这是IBM的Kubernetes实现,用于在主机集群之间自动化应用程序容器的部署,扩展和操作,从而提供以容器为中心的基础架构。

借助Kubernetes,我们的开发人员可以利用容器的强大功能和灵活性来快速开发高可用性应用程序,并且借助集成的安全卷服务,我们可以存储持久数据,在Kubernetes Pod之间共享数据以及在需要时还原数据。

这是在Kubernetes集群中运行的Watson Care Manager的快照:

在部署应用程序之前,用户必须创建一个工作程序节点集群。我可以使用kubectl cli命令创建集群,也可以通过 IBM云 仪表板。

我们的集群由一台或多台物理或虚拟机(也称为工作程序节点)组成,它们由Kubernetes主节点松散耦合,可扩展并由中央监视和管理。当我们部署容器化的应用程序时,Kubernetes主服务器会考虑部署要求和集群中的可用容量,来决定将应用程序部署在何处。

用户请求Kubernetes部署容器,并指定高可用性所需的副本数。 Kubernetes调度程序决定 豆荚 (一个或多个容器的组)将被调度,并将它们部署在哪些工作节点上,并将此信息内部存储在Kubernetes和 。根据运行时的负载更新工作节点中Pod的部署,从而优化Pod在集群中的位置。

在每个工作程序节点中运行的Kubelet会定期轮询kube API服务器。如果有新工作要做,kubelet会提取配置信息并采取措施,例如拆分新的pod。

处理流程:

| | | UCD-IBM UrbanCode Deploy是用于在您的环境中自动化应用程序部署的工具。 WH群集– Kubernetes工作节点。 |

在流程中使用GitLab:

我们将所有工件存储在GitLab中,其中包括创建映像所需的Docker文件,创建pod所需的YAML文件以及使Healthcare应用程序运行的配置文件。

GitLab和Jenkins在流程中的交互:

我们使用Jenkins进行持续集成和构建自动化,以创建/拉取/重新标记Docker映像并将该映像推送到云中的Docker注册表中。

基本上,我们配置了一个Jenkins作业以与GitLab项目进行交互以获取最新的工件,并且根据要求,它将通过从Docker / Bluemix存储库中拉出所需的中间映像从头开始创建新的Docker映像,或者更新Docker映像。 。

创建/更新映像之后,Jenkins作业将映像推送到Bluemix存储库,以保存要由UrbanCode Deploy(UCD)组件提取的最新映像。

Jenkins和UCD在流程中的交互:

Jenkins作业被配置为使用UCD组件及其相应的应用程序,应用程序进程和UCD环境来部署应用程序。 UCD组件将使用的Docker映像版本文件也通过Jenkins作业传递到UCD组件。

在流程中使用UCD:

UCD用于部署,并且此处的端到端部署过程是自动化的。 UCD组件过程涉及以下步骤:

  • 从Gitlab下载所需的工件以进行部署。
  • 登录到Bluemix并基于用于创建Pod的Kubernetes集群设置KUBECONFIG。
  • 使用kubectl create命令在集群中创建应用程序容器。
  • 如果需要,请运行滚动更新以更新现有的Pod。

在IBM Cloud Kubernetes Service中部署应用程序:

Provision a cluster in IBM云 Kubernetes Service with <x> worker nodes. Create Kubernetes controllers for deploying the containers in worker nodes, the IBM云 Kubernetes服务基础架构 pulls the Docker images from IBM云 Container Registry to create containers. We tried deploying an application container and running a logmet agent (see Reading and displaying logs using logmet container, below) inside the containers that forwards the application logs to an IBM云 logging service. As part of the process, YAML files are used to create a controller resource for the UrbanCode Deploy (UCD). UCD agent is deployed as a 守护程序集 控制器,用于连接到UCD服务器。应用程序部署的整个过程发生在UCD中。为了支持该应用程序的公共访问,我们创建了一个服务资源以在pod和访问容器服务之间进行交互。为了提供存储支持,我们创建了持久的卷声明并为容器安装了卷。

| | | UCD:IBM UrbanCode Deploy是用于在您的环境中自动进行应用程序部署的工具。 IBM云 Kubernetes服务:IBM的Kubernetes实现。 WH Docker Registry:Docker专用映像注册表。通用代理容器:我们希望将我们的服务配置为使用WHC强制代理。我们部署了所有离子容器。 |

使用logmet容器读取和显示日志:

Logmet是一种云日志记录服务,可帮助收集,存储和分析应用程序的日志数据。它还汇总了应用程序和环境日志,以获取合并的应用程序或环境见解并进行转发。指标随收集一起传输。我们选择了一个在容器内运行logmet代理进程的模型。代理负责将日志转发到容器中配置的云日志服务。

应用程序容器将应用程序日志记录目录安装到由永久卷声明创建的存储空间,并存储日志,即使容器死亡,日志也不会丢失。 Kibana是Elasticsearch的开源数据可视化插件。它在Elasticsearch集群上索引的内容之上提供可视化功能。

使用Ingress公开服务:

入口控制器 是反向代理,它们通过URL在群集外部公开服务。它们充当外部HTTP负载平衡器,它使用唯一的公共入口点将请求路由到应用程序。

为了将我们的服务暴露给集群之外,我们使用了Ingress。在IBM Cloud Kubernetes Service中,如果我们创建付费集群,则会自动安装一个Ingress控制器供我们使用。通过创建指定服务路径的YAML资源文件,我们能够通过Ingress访问服务。

– 桑迪亚·卡普尔(Sandhya Kapoor),IBM沃森卫生保健平台高级技术人员