使用Helm Charts在K8s上部署与升级#

Helm是Kubernetes的强大包管理器,旨在简化在Kubernetes集群上部署、管理和配置应用程序的流程。通过使用Helm图表,开发人员和运维团队可以轻松定义、安装和升级最复杂的Kubernetes应用程序。

本介绍将涵盖Helm图表的基础知识,包括先决条件和一项重要特性:通过Helm实现的可升级性。

如果您对k8s非常熟悉,可以直接使用此处提供的helm chart

先决条件#

在深入了解Helm图表之前,请确保已满足以下先决条件:

  1. helm: 在本地机器上安装Helm。不同操作系统的安装指南可在Helm官网上找到。

  2. kubectl: Kubernetes命令行工具kubectl需要安装并配置好,以便与您的Kubernetes集群交互。您可以从Kubernetes官网下载:Linux, MacOS

  3. 熟悉Kubernetes: 基础教程可在此处获取

  4. 访问权限: 确保您拥有足够的权限在Kubernetes集群中创建资源并安装Helm charts。

理解Helm Charts#

Helm chart 是一组描述 Kubernetes 资源的文件集合。Helm 使用这些 chart 在 Kubernetes 上部署应用程序或服务。每个 chart 包含以下核心组件:

  • Chart.yaml: 该文件包含关于chart的元数据,例如名称、版本和描述。

  • Values.yaml: 该文件包含图表变量的默认值,用户可以在部署时覆盖这些值。

服务器部署#

步骤1. 添加Helm仓库#

Helm仓库是一个打包图表的集合,可以公开或私有地共享和访问。这些仓库类似于其他生态系统中的软件包仓库,例如Node.js的npm或Python的PyPI。Helm仓库使得分发图表和管理其版本变得简单。

要使用Helm仓库,您需要将其添加到本地Helm客户端。这里我们正在添加PySyft的helm仓库:

helm repo add openmined https://openmined.github.io/PySyft/helm

在继续之前,请确保您的代码库是最新的:

helm repo update openmined

步骤2. 搜索可用的Chart版本#

您可以使用helm search命令在已添加的仓库中搜索可用的图表。例如,要搜索Syft图表的不同版本,可以使用:

helm search repo openmined/syft --versions --devel

添加 --devel 参数可以让搜索包含 syft 的 beta 测试版本。

步骤3. 设置注册表#

要设置k8s部署,您需要一个正在运行的Kubernetes集群。这可以是使用Minikube等工具的本地设置,也可以是托管Kubernetes服务,如Google Kubernetes Engine (GKE)、Amazon EKS或Azure Kubernetes Service (AKS)。

我们将在此介绍如何使用k3d设置本地注册表。首先,我们需要创建注册表:

k3d registry create registry.localhost --port 12345  -v `pwd`/k3d-registry:/var/lib/registry || true

现在我们可以创建一个集群用于演示目的:

CLUSTER_NAME=syft SERVER_PORT=8080 && \
k3d cluster create CLUSTER_NAME -p "$SERVER_PORT:80@loadbalancer" --registry-use k3d-registry.localhost || true \
k3d cluster start CLUSTER_NAME

步骤4. 使用Helm安装#

要从仓库安装图表,请使用 helm install 命令并指定仓库名称和图表名称。

首先,我们需要为部署设置一个版本,如下所示:

export SYFT_VERSION="<paste your version here>"
helm install my-server openmined/syft --version $SYFT_VERSION --namespace syft --create-namespace --set ingress.ingressClass=traefik

根据您的云系统,您可以以不同方式配置入口。要传递本地values.yaml文件,您可以向上述指定:

 -f $PATH_TO_VALUES \
 --value_name $VALUE

使用Helm升级您的服务器#

Helm 的一个关键特性是能够以最小的停机时间和工作量升级应用程序。Helm 通过称为"发布(releases)"的概念来管理升级。每次安装图表时,Helm 都会创建一个新发布。当您升级发布时,Helm 会执行滚动更新,在保持应用程序运行的同时应用新配置。

升级Helm Release的步骤#

  1. 更新仓库以获取最新版本和搜索功能

  2. 修改数值:更新values.yaml文件或提供一组新的数值,以反映应用程序的期望状态。

  3. 升级命令:使用 helm upgrade 命令来应用更改。

步骤1. 更新本地仓库#

helm repo add openmined https://openmined.github.io/PySyft/helm

helm repo update openmined

helm search repo openmined/syft --versions --devel

步骤2. 设置目标版本和发布名称#

export TARGET_VERSION="<paste your target version>"

# User Defined
export RELEASE_NAME="<paste the release name>"
export NAMESPACE="<paste the namespace>"
helm get values $RELEASE_NAME -n $NAMESPACE -o yaml > values.yaml

步骤3. 升级Helm Chart#

export PATH_TO_VALUES=usr/tmp/values.yaml

helm upgrade $RELEASE_NAME openmined/syft \
 --version $TARGET_VERSION \
 -f $PATH_TO_VALUES \
 --namespace $NAMESPACE

测试你的部署#

  1. 检查入口运行

要确认入口的运行状态,请执行:

kubectl describe ingress -n syft
  1. 检查正在运行的Pod

kubectl get pods -n syft
  1. 启动您的Jupyter Notebook实例

在这一步中,您需要一个客户端服务器来与刚刚部署的PySyft服务器进行交互。这里的客户端是一个运行与容器内服务器相同版本PySyft的Jupyter笔记本。这是一个便捷的设置,但您也可以在Python3.10+环境和所需PySyft版本中启动自己的Jupyter Notebook。

我们需要按以下方式启动客户端:

docker run --rm -it --network=host openmined/syft-client:${VERSION}

其中 ${VERSION} 是您想要运行的 PySyft Client 版本号。该版本必须与您在部署步骤中之前传递的版本相同。

如果此步骤成功,您将在浏览器中进入Jupyter笔记本界面。请创建一个新笔记本并运行以下命令来测试您的完整设置是否已准备就绪可供使用:

  1. 连接到您启动的服务器

import syft as sy

sy.login(url="localhost:80", email="[email protected]", password="changethis")

 # Please pass the URL, the email and password used to create the server. The above are the default ones used during server creation.

如果一切正常,您应该能够登录到您的服务器。现在您可以在客户端服务器上开始运行PySyft命令,与您刚刚部署的PySyft服务器进行交互。