本仓库由Manifests工作组维护。如果您是贡献者,正在编写或编辑软件包,请参阅最佳实践。您可以加入CNCF Slack并通过Kubeflow社区网站参加我们的会议。我们在CNCF Slack上的频道是#kubeflow-platform。您还可以在那里找到我们的双周会议,包括可评论的议程。
Kubeflow Manifests仓库主要分为三个目录,包含以下安装清单:
目录 | 用途 |
---|---|
apps | Kubeflow官方组件,由各Kubeflow工作组维护 |
common | 通用服务,由Manifests工作组维护 |
contrib | 第三方贡献的应用(如Ray、Kserve),由外部维护,不属于Kubeflow工作组 |
所有组件都可以使用kustomize
部署。您可以选择部署整个Kubeflow平台或单个组件。
本仓库定期从各自的上游仓库同步所有官方Kubeflow组件。以下矩阵显示了我们为每个组件包含的git版本:
组件 | 本地清单路径 | 上游修订版本 |
---|---|---|
Training Operator | apps/training-operator/upstream | v1.8.0 |
Notebook Controller | apps/jupyter/notebook-controller/upstream | v1.9.0 |
PVC Viewer Controller | apps/pvcviewer-roller/upstream | v1.9.0 |
Tensorboard Controller | apps/tensorboard/tensorboard-controller/upstream | v1.9.0 |
Central Dashboard | apps/centraldashboard/upstream | v1.9.0 |
Profiles + KFAM | apps/profiles/upstream | v1.9.0 |
PodDefaults Webhook | apps/admission-webhook/upstream | v1.9.0 |
Jupyter Web App | apps/jupyter/jupyter-web-app/upstream | v1.9.0 |
Tensorboards Web App | apps/tensorboard/tensorboards-web-app/upstream | v1.9.0 |
Volumes Web App | apps/volumes-web-app/upstream | v1.9.0 |
Katib | apps/katib/upstream | v0.17.0 |
KServe | contrib/kserve/kserve | 0.13.0 |
KServe Models Web App | contrib/kserve/models-web-app | 0.13.0 |
Kubeflow Pipelines | apps/pipeline/upstream | 2.2.0 |
Kubeflow Tekton Pipelines | apps/kfp-tekton/upstream | 2.0.5 |
Kubeflow Model Registry | apps/model-registry/upstream | v0.2.1-alpha |
以下是Kubeflow不同项目中使用的通用组件版本矩阵:
组件 | 本地清单路径 | 上游修订版本 |
---|---|---|
Istio | common/istio-1-22 | 1.22.1 |
Knative | common/knative/knative-serving <br /> common/knative/knative-eventing | v1.12.4 <br /> v1.12.6 |
Cert Manager | common/cert-manager | 1.14.5 |
这是从头开始安装的说明。有关原地升级指南,请跳转至升级和扩展部分。
Manifests工作组提供了两种使用kustomize安装Kubeflow官方组件和通用服务的选项。目的是帮助终端用户轻松安装,并帮助发行版所有者从经过测试的起点构建他们的定制发行版:
apps
和common
下的所有组件apps
和common
安装单个组件选项1针对终端用户的易部署性。 选项2针对定制性和选择单个组件的能力。
example
目录包含了单命令安装的kustomization示例,可以直接运行。
⚠️ 在两种选项中,我们都使用默认的电子邮箱(user@example.com
)和密码(12341234
)。对于任何生产环境的Kubeflow部署,您应该按照相关章节更改默认密码。
注意
kubectl apply
命令可能在第一次尝试时失败。这是由于Kubernetes和kubectl
的工作方式固有的(例如,必须在CRD准备就绪后才能创建CR)。解决方法是简单地重复执行该命令直到成功。对于单行命令,我们已经包含了一个bash单行脚本来重试该命令。
kind
docker
sudo sysctl fs.inotify.max_user_instances=2280
sudo sysctl fs.inotify.max_user_watches=1255360
cat <<EOF | kind create cluster --name=kubeflow --config=- kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane image: kindest/node:v1.29.4 kubeadmConfigPatches: - | kind: ClusterConfiguration apiServer: extraArgs: "service-account-issuer": "kubernetes.default.svc" "service-account-signing-key-file": "/etc/kubernetes/pki/sa.key" EOF
kind get kubeconfig --name kubeflow > /tmp/kubeflow-config export KUBECONFIG=/tmp/kubeflow-config
docker login kubectl create secret generic regcred \ --from-file=.dockerconfigjson=/home/to/.docker/config.json \ --type=kubernetes.io/dockerconfigjson
您可以使用以下命令安装所有Kubeflow官方组件(位于apps
下)和所有通用服务(位于common
下):
while ! kustomize build example | kubectl apply -f -; do echo "重试应用资源"; sleep 20; done
一旦所有内容都成功安装,您可以登录到您的集群来访问Kubeflow中央仪表板。
恭喜!您现在可以开始使用Kubeflow进行实验和运行端到端的机器学习工作流程了。
在本节中,我们将使用kubectl
和kustomize
分别安装每个Kubeflow官方组件(在apps
下)和每个通用服务(在common
下)。
如果执行以下所有命令,结果将与上述单命令安装部分相同。本节的目的是:
故障排除说明
在应用不同组件的kustomization时,我们遇到过类似以下的错误:
error: resource mapping not found for name: "<RESOURCE_NAME>" namespace: "<SOME_NAMESPACE>" from "STDIN": no matches for kind "<CRD_NAME>" in version "<CRD_FULL_NAME>"
ensure CRDs are installed first
这是因为kustomization同时应用了CRD和CR,而CRD尚未变为Established
状态。您可以在https://github.com/kubernetes/kubectl/issues/1117和https://github.com/helm/helm/issues/4925中了解更多信息。
如果遇到此错误,我们建议重新应用该组件的kustomization。
许多Kubeflow组件使用cert-manager为准入webhook提供证书。
安装cert-manager:
kustomize build common/cert-manager/cert-manager/base | kubectl apply -f - echo "等待cert-manager准备就绪 ..." kubectl wait --for=condition=ready pod -l 'app in (cert-manager,webhook)' --timeout=180s -n cert-manager kubectl wait --for=jsonpath='{.subsets[0].addresses[0].targetRef.kind}'=Pod endpoints -l 'app in (cert-manager,webhook)' --timeout=180s -n cert-manager
如果您遇到以下错误:
Error from server (InternalError): error when creating "STDIN": Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": dial tcp 10.96.202.64:443: connect: connection refused
这是因为webhook尚未准备好接收请求。等待几秒钟后重试应用清单。
更多故障排除信息,请查看https://cert-manager.io/docs/troubleshooting/webhook/
大多数Kubeflow组件使用Istio来保护其流量、执行网络授权和实施路由策略。
安装Istio:
echo "安装配置了外部授权的Istio..." cd common/istio-1-22 kustomize build common/istio-1-22/istio-crds/base | kubectl apply -f - kustomize build common/istio-1-22/istio-namespace/base | kubectl apply -f - kustomize build common/istio-1-22/istio-install/overlays/oauth2-proxy | kubectl apply -f - echo "等待所有Istio Pod变为就绪状态..." kubectl wait --for=condition=Ready pods --all -n istio-system --timeout 300s
oauth2-proxy扩展了Istio Ingress-Gateway的功能,使其能够作为OIDC客户端:
echo "安装oauth2-proxy..." kustomize build common/oauth2-proxy/overlays/m2m-self-signed/ | kubectl apply -f - kubectl wait --for=condition=ready pod -l 'app.kubernetes.io/name=oauth2-proxy' --timeout=180s -n oauth2-proxy
它支持用户会话以及适当的基于令牌的机器到机器认证。
Dex是一个具有多种认证后端的OpenID Connect Identity (OIDC)系统。在这个默认安装中,它包含一个静态用户,其电子邮箱为user@example.com
。默认情况下,用户的密码是12341234
。对于任何生产环境的Kubeflow部署,您应该按照相关章节更改默认密码。
安装Dex:
kustomize build common/dex/overlays/oauth2-proxy | kubectl apply -f -
KServe官方Kubeflow组件使用Knative。
安装Knative Serving:
kustomize build common/knative/knative-serving/overlays/gateways | kubectl apply -f - kustomize build common/istio-1-22/cluster-local-gateway/base | kubectl apply -f -
您也可以选择安装 Knative Eventing,它可用于推理请求日志记录:
kustomize build common/knative/knative-eventing/base | kubectl apply -f -
创建 Kubeflow 组件所在的命名空间。该命名空间名为 kubeflow
。
安装 kubeflow 命名空间:
kustomize build common/kubeflow-namespace/base | kubectl apply -f -
创建 Kubeflow ClusterRoles:kubeflow-view
、kubeflow-edit
和 kubeflow-admin
。Kubeflow 组件将权限聚合到这些 ClusterRoles。
安装 kubeflow 角色:
kustomize build common/kubeflow-roles/base | kubectl apply -f -
安装 多用户 Kubeflow Pipelines 官方 Kubeflow 组件:
kustomize build apps/pipeline/upstream/env/cert-manager/platform-agnostic-multi-user | kubectl apply -f -
这将安装带有 runasnonroot emissary 执行器的 argo。请注意,您仍然需要分析以 root 权限运行容器时可能出现的安全问题,并决定是否以 runasnonroot 方式运行 kubeflow pipeline 主容器。通常强烈建议所有用户可访问的 OCI 容器都遵循 Pod 安全标准的 restricted 级别。
多用户 Kubeflow Pipelines 依赖项
替代方案:Kubeflow Pipelines 独立版
您可以安装 Kubeflow Pipelines 独立版,它
您可以在 Kubeflow Pipelines 安装选项 中了解它们的区别。
除了 Kubeflow Pipelines 独立版文档中的安装说明外,您还需要应用两个虚拟服务来暴露 Kubeflow Pipelines UI 和 Metadata API 到 kubeflow-gateway。
KFServing 已更名为 KServe。
安装 KServe 组件:
kustomize build contrib/kserve/kserve | kubectl apply -f -
安装 Models Web 应用程序:
kustomize build contrib/kserve/models-web-app/overlays/kubeflow | kubectl apply -f -
安 装 Katib 官方 Kubeflow 组件:
kustomize build apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f -
安装中央仪表板官方 Kubeflow 组件:
kustomize build apps/centraldashboard/upstream/overlays/kserve | kubectl apply -f -
安装 PodDefaults 的准入 Webhook:
kustomize build apps/admission-webhook/upstream/overlays/cert-manager | kubectl apply -f -
安装 Notebook Controller 官方 Kubeflow 组件:
kustomize build apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f -
安装 Jupyter Web App 官方 Kubeflow 组件:
kustomize build apps/jupyter/jupyter-web-app/upstream/overlays/istio | kubectl apply -f -
该功能仍在开发中。
安装 PVC 查看器控制器官方 Kubeflow 组件:
kustomize build apps/pvcviewer-controller/upstream/default | kubectl apply -f -
安装 Profile Controller 和 Kubeflow 访问管理(KFAM)官方 Kubeflow 组件:
kustomize build apps/profiles/upstream/overlays/kubeflow | kubectl apply -f -
安装 Volumes Web App 官方 Kubeflow 组件:
kustomize build apps/volumes-web-app/upstream/overlays/istio | kubectl apply -f -
安装 Tensorboards Web App 官方 Kubeflow 组件:
kustomize build apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f -
安装 Tensorboard Controller 官方 Kubeflow 组件:
kustomize build apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f -
安装训练操作器官方 Kubeflow 组件:
kustomize build apps/training-operator/upstream/overlays/kubeflow | kubectl apply -f -
最后,为默认用户创建一个新的命名空间(名为 kubeflow-user-example-com
)。
kustomize build common/user-namespace/base | kubectl apply -f -
安装后,所有 Pod 变为就绪状态需要一些时间。在尝试连接之前,请确保所有 Pod 都已就绪,否则可能会出现意外错误。要检查所有与 Kubeflow 相关的 Pod 是否就绪,请使用以下命令:
kubectl get pods -n cert-manager kubectl get pods -n istio-system kubectl get pods -n auth kubectl get pods -n knative-eventing kubectl get pods -n knative-serving kubectl get pods -n kubeflow kubectl get pods -n kubeflow-user-example-com
访问 Kubeflow 的默认方式是通过端口转发。这使您可以快速入门,而不对您的环境施加任何要求。运行以下命令将 Istio 的 Ingress-Gateway 转发到本地端口 8080
:
kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
运行该命令后,您可以通过以下方式访问 Kubeflow 中央仪表板:
http://localhost:8080
。您应该会看到 Dex 登录界面。user@example.com
,默认密码是 12341234
。为了使用 NodePort / LoadBalancer / Ingress 连接到 Kubeflow,您需要设置 HTTPS。原因是我们的许多 Web 应用程序(例如 Tensorboard Web 应用程序、Jupyter Web 应用程序、Katib UI)使用安全 Cookie,因此通过非本地主机域使用 HTTP 访问 Kubeflow 将无法正常工作。 使用适当的HTTPS暴露Kubeflow集群是一个简单的过程,但取决于您的环境。也有第三方商业发行版可供选择。
注意
如果您必须通过HTTP暴露Kubeflow,可以通过在每个相关的Web应用中将APP_SECURE_COOKIES
环境变量设置为false
来禁用安全Cookie
功能。但不建议这样做,因为会带来安全风险。
出于安全考虑,在安全敏感的环境中安装时,我们不想使用默认的Kubeflow用户名和邮箱。相反,您应该在部署前定义自己的用户名和邮箱。为默认用户定义方法如下:
编辑common/dex/overlays/oauth2-proxy/config-map.yaml
,用您的邮箱和首选用户名填充相关字段:
... staticPasswords: - email: <替换为您的邮箱> username: <替换为您首选的用户名>
出于安全考虑,在安全敏感的环境中安装时,我们不想使用默认的Kubeflow用户密码。相反,您应该定义自己的密码,并在创建集群之前或创建集群之后应用。