Kubernetes 安装 Kubeflow
本文以 Debian 10, kubernetes 1.19.3 为例,进行 Kubeflow 1.1.0 的安装讲解。
参考资料:
1. 准备环境
1.1 配置动态卷供应
Kubernetes 里需要配置了一个默认的动态卷供应 dynamic volume provisioner (重要,一些应用需要这个来存储数据) 。可通过此文档 Kubernetes 配置 NFS StorageClass 配置一个 NFS StorageClass 。
1.2 下载
打开 https://github.com/kubeflow/kfctl/releases/ 页面,下载合适的版本。这里以 V1.1.0 版本为例。
# 下载二进制文件 wget https://github.com/kubeflow/kfctl/releases/download/v1.1.0/kfctl_v1.1.0-0-g9a3621e_linux.tar.gz # 解压 tar -zxvf kfctl_v1.1.0-0-g9a3621e_linux.tar.gz
这里把解压出来的 kfctl 放在 ~/kubeflow/bin 目录下。
2. 安装基础版本
2.1 创建一个环境变量文件
创建目录
mkdir ~/kubeflow/kfctl-k8s-istio
创建环境变量文件
vi ~/kubeflow/kfctl-k8s-istio/env.sh
- env.sh
# 把 kfctl 加到 PATH 中。 export PATH=$PATH:~/kubeflow/bin # 设置 Config 文件下载地址 export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_k8s_istio.v1.1.0.yaml" # 设置 KF_NAME 。可随便设置,官方示例是以它作为文件夹名称,暂不知道应用内部是否需要此变量。 export KF_NAME=kfctl-k8s-istio # 设置 KF_DIR 。按需设置,官方示例是以它作为文件夹名称,暂不知道应用内部是否需要此变量。 export BASE_DIR=~/kubeflow export KF_DIR=${BASE_DIR}/${KF_NAME}
2.2 安装和部署 kubeflow
# 进入 KF_DIR , 这里是 ~/kubeflow/kfctl-k8s-istio cd ~/kubeflow/kfctl-k8s-istio # 加载环境变量,主要是 PATH 和 CONFIG_URI source env.sh # 应用配置文件 kfctl apply -V -f ${CONFIG_URI}
此时经过漫长的部署,等所有应用都正常运行,即为部署成功。
3. 安装多用户认证版本
3.1 安装和部署
部署过程跟基础版本类似, 只是 CONFIG_URI 改为 https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_istio_dex.v1.1.0.yaml
结尾: 删除 kubeflow
若不想使用 kubeflow 了,运行以下命令进行删除。
cd ${KF_DIR} kfctl delete -f ${CONFIG_FILE}
其他: 可能遇到的问题
Q1. failed calling webhook "webhook.cert-manager.io"
Q1: 部署过程中,日志报 failed calling webhook “webhook.cert-manager.io” 错误。
A1: 可能是 kubernetes 网络不通。如果是 debian 10,可以考虑把 iptables 改成 legacy 版本(官方说 iptables 的兼容性问题已解决,本人尚未做验证)。
Q2. CustomResourceDefinition.apiextensions.k8s.io "seldondeployments.machinelearning.seldon.io" is invalid
Q2: 部署过程中,日志报 CustomResourceDefinition.apiextensions.k8s.io “seldondeployments.machinelearning.seldon.io” is invalid 错误。
A2:
修改 kfctl_k8s_istio.v1.1.0.yaml 文件,最后那部分改为:
repos: - name: manifests uri: https://github.com/DavidSpek/manifests/archive/v1.1-branch.tar.gz version: v1.1-branch
Q3. 镜像总是拉取不下来
Q3: 部署过程中,需要下载大量镜像,而且不少镜像是位于 gcr.io 和 quay.io 服务器中。由于众所周知的原因,国内可能访问不了这两个服务器,手动下载也很难找全,导致应用无法启动。
A3: 参考 docker 配置代理 中关于 http 代理那部分,挂上梯子,可以解决所有镜像问题。
Q4. MountVolume.SetUp failed for volume "istio-token" : failed to fetch token: the API server does not have TokenRequest endpoints enabled
Q4: 有的应用报 MountVolume.SetUp failed for volume “istio-token” : failed to fetch token: the API server does not have TokenRequest endpoints enabled 错误。
A4:
修改 /etc/kubernetes/manifests/kube-apiserver.yaml ,增加
- --service-account-signing-key-file=/etc/kubernetes/pki/sa.key - --service-account-issuer=kubernetes.default.svc
保存即可,k8s会自动重新加载