2、环境准备:Kubernetes 集群要求、Kubeflow 1.7 版本安装(kfctl 方式)、Dashboard 访问与 HTTPS 配置
说实话,很多同学学 Kubeflow 卡住,不是卡在概念上,而是卡在环境搭建上。我见过太多人花了两三天装环境,最后连 Dashboard 都打不开。所以这一章,咱们把准备工作做扎实。
我个人习惯是,先把集群要求搞清楚,再动手装。别一上来就敲命令,那样容易翻车。
2.1 Kubernetes 集群要求
Kubeflow 1.7 对集群是有硬性要求的。说白了,你的集群得够「壮实」。
| 资源项 | 最低要求 | 推荐配置 |
|---|---|---|
| 节点数 | 1 个 master + 2 个 worker | 1 个 master + 3 个 worker |
| CPU 总核数 | 8 核 | 16 核以上 |
| 内存总量 | 16 GB | 32 GB 以上 |
| 磁盘空间 | 100 GB(SSD 优先) | 200 GB 以上 |
| Kubernetes 版本 | 1.21 - 1.24 | 1.23 或 1.24 |
另外,集群必须启用 RBAC 和 NodePort 或 LoadBalancer 类型的 Service。嗯,这里要注意,如果你的集群跑在云上,建议用 LoadBalancer,省心很多。
2.2 Kubeflow 1.7 安装(kfctl 方式)
kfctl 是官方推荐的安装工具。虽然现在有更新的方式,但 1.7 版本用 kfctl 最稳。我建议你直接下载二进制文件,别用源码编译,太慢了。
2.2.1 下载 kfctl
# 下载 kfctl v1.7.0
wget https://github.com/kubeflow/kfctl/releases/download/v1.7.0/kfctl_v1.7.0_linux.tar.gz
# 解压
tar -xvf kfctl_v1.7.0_linux.tar.gz
# 移动到 PATH
sudo mv kfctl /usr/local/bin/
下载完成后,验证一下版本:
kfctl version
如果输出 v1.7.0,说明下载成功。我曾经遇到过下载后版本不对的情况,后来发现是网络缓存的问题。建议你每次下载前清一下缓存,或者换个源。
2.2.2 配置安装参数
kfctl 需要一个配置文件。官方提供了默认配置,但咱们得改几个关键参数。
# 创建安装目录
mkdir ~/kubeflow-install
cd ~/kubeflow-install
# 下载默认配置
wget https://raw.githubusercontent.com/kubeflow/manifests/v1.7-branch/kfdef/kfctl_k8s_istio.v1.7.0.yaml
# 重命名为 kfctl.yaml
mv kfctl_k8s_istio.v1.7.0.yaml kfctl.yaml
打开 kfctl.yaml,找到 spec 部分,修改以下内容:
spec:
repos:
- name: manifests
uri: https://github.com/kubeflow/manifests/archive/v1.7-branch.tar.gz
appDir: /home/your-username/kubeflow-install
appDir 改成你自己的绝对路径。我习惯用 /opt/kubeflow,这样方便管理。另外,如果你在境内网络,建议把 uri 换成 gitee 镜像,不然下载 manifests 会慢到怀疑人生。
2.2.3 执行安装
# 设置环境变量
export KF_NAME=kubeflow
export BASE_DIR=/opt/kubeflow
export KF_DIR=${BASE_DIR}/${KF_NAME}
# 开始安装
kfctl apply -V -f kfctl.yaml
这个过程大概需要 10-20 分钟,取决于你的网络和机器性能。你想想看,它要拉取 Istio、Knative、KFServing 等十几个组件,所以耐心等。
安装完成后,检查 Pod 状态:
kubectl get pods -n kubeflow
如果所有 Pod 都是 Running 或 Completed,说明安装成功。我遇到过 Istio 的 Pod 一直 CrashLoopBackOff,后来发现是集群资源不够。所以,安装前一定确认资源达标。
2.3 Dashboard 访问与 HTTPS 配置
装好了,怎么访问?默认情况下,Kubeflow Dashboard 通过 Istio Ingress Gateway 暴露。咱们先找到它的地址。
2.3.1 获取访问地址
# 查看 Istio Ingress Gateway 的 Service
kubectl get svc -n istio-system istio-ingressgateway
输出类似这样:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
istio-ingressgateway LoadBalancer 10.96.123.45 192.168.1.100 80:31380/TCP,443:31390/TCP
如果 EXTERNAL-IP 有值,直接用浏览器访问 http://192.168.1.100 就行。如果是 NodePort 类型,就用 http://节点IP:31380。
- 用户名:
admin@kubeflow.org - 密码:
12341234
2.3.2 配置 HTTPS
说实话,HTTP 访问在开发环境没问题,但生产环境必须上 HTTPS。我曾经有个客户,直接用 HTTP 暴露 Dashboard,结果被安全扫描工具扫出来,差点没通过合规审查。
配置 HTTPS 有两种方式:
- 使用自签名证书(适合测试环境)
- 使用 Let's Encrypt(适合生产环境)
这里我演示自签名证书的方式,因为最快:
# 生成自签名证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /tmp/tls.key \
-out /tmp/tls.crt \
-subj "/CN=kubeflow.example.com"
# 创建 Secret
kubectl create secret tls kubeflow-tls \
--key /tmp/tls.key \
--cert /tmp/tls.crt \
-n istio-system
# 配置 Gateway 使用 HTTPS
kubectl patch gateway kubeflow-gateway -n kubeflow -p '{
"spec": {
"servers": [
{
"port": {
"number": 443,
"name": "https",
"protocol": "HTTPS"
},
"tls": {
"mode": "SIMPLE",
"credentialName": "kubeflow-tls"
},
"hosts": ["*"]
}
]
}
}'
配置完成后,用 https://你的IP 访问。浏览器会提示不安全,因为自签名证书不被信任。点「继续访问」就行。
2.4 本章知识体系
为了让你更直观地理解本章内容,我画了一张流程图:
这张图把整个流程串起来了。你按照这个顺序走,基本不会出大问题。嗯,最后再啰嗦一句:安装过程中如果遇到问题,先看 Pod 日志,别急着重装。我遇到过好多次,其实就是某个镜像拉不下来,换个源就好了。