使用Helm Charts在K8s上部署与升级#
Helm是Kubernetes的强大包管理器,旨在简化在Kubernetes集群上部署、管理和配置应用程序的流程。通过使用Helm图表,开发人员和运维团队可以轻松定义、安装和升级最复杂的Kubernetes应用程序。
本介绍将涵盖Helm图表的基础知识,包括先决条件和一项重要特性:通过Helm实现的可升级性。
如果您对k8s非常熟悉,可以直接使用此处提供的helm chart。
先决条件#
在深入了解Helm图表之前,请确保已满足以下先决条件:
理解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的步骤#
更新仓库以获取最新版本和搜索功能
修改数值:更新values.yaml文件或提供一组新的数值,以反映应用程序的期望状态。
升级命令:使用 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
测试你的部署#
检查入口运行
要确认入口的运行状态,请执行:
kubectl describe ingress -n syft
检查正在运行的Pod
kubectl get pods -n syft
启动您的Jupyter Notebook实例
在这一步中,您需要一个客户端服务器来与刚刚部署的PySyft服务器进行交互。这里的客户端是一个运行与容器内服务器相同版本PySyft的Jupyter笔记本。这是一个便捷的设置,但您也可以在Python3.10+环境和所需PySyft版本中启动自己的Jupyter Notebook。
我们需要按以下方式启动客户端:
docker run --rm -it --network=host openmined/syft-client:${VERSION}
其中 ${VERSION} 是您想要运行的 PySyft Client 版本号。该版本必须与您在部署步骤中之前传递的版本相同。
如果此步骤成功,您将在浏览器中进入Jupyter笔记本界面。请创建一个新笔记本并运行以下命令来测试您的完整设置是否已准备就绪可供使用:
连接到您启动的服务器
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服务器进行交互。