Kubernetes 与 minikube
你还可以在本地kubernetes集群上运行skil,也称为Minikube。
先决条件
你需要以下工具来遵循本指南:
安装 Minikube
要安装Minikube,可以按照此处的指南进行操作。
由于skil映像的大小相当大(约6GB),建议你并排安装minikube和docker。这样,你就可以通过运行以下命令来获取SKIL的Docker镜像:
docker pull skymind/skil
稍后在Minikube设置中使用从Docker环境下载的这个镜像。这对于查看skil镜像文件的下载进度很有用,因为minikube在拉取镜像时不会显示进度。对于Windows,这里有一个有用的指南在Windows操作系统中并排运行Docker和Virtual Box(用于Minikube)。
安装Kubernetes CLI
此外,按照本指南安装kube-ctl。
安装 Docker toolbox
对于安装Mac或Windows的Docker toolbox,你可以遵循本指南。
在Minikube上运行SKIL-CE镜像
创建一个名为skil-app.yaml
的文件,并将以下内容放入其中。
YAML
apiVersion: v1
kind: Service
metadata:
name: skil-service
labels:
app: skil-service
spec:
type: NodePort
ports:
- port: 9008
targetPort: 9008
protocol: TCP
name: skilmain
- port: 8080
targetPort: 8080
protocol: TCP
name: skilzep
- port: 9100
targetPort: 9100
protocol: TCP
name: skilmh
- port: 8888
targetPort: 8888
protocol: TCP
name: skiljpy
selector:
app: skil-ce-app
---
apiVersion: v1
kind: ReplicationController
metadata:
name: skil-ce-app
labels:
app: skil-ce-app
spec:
replicas: 1
template:
metadata:
labels:
app: skil-ce-app
spec:
containers:
- name: skil-ce
image: skymind/skil
imagePullPolicy: Never # This lets us use the locally downloaded docker image file for SKIL-CE. Comment this line if you want to pull the image from the docker hub.
ports:
- name: skilmain
containerPort: 9008
protocol: TCP
- name: skilzep
containerPort: 8080
protocol: TCP
- name: skilmh
containerPort: 9100
protocol: TCP
- name: skiljpy
containerPort: 8888
protocol: TCP
现在运行以下脚本之一,在Minikube(基于你的操作系统)上启动SKIL-CE应用程序。
对于Linux, Mac OS
Shell
# 启动minikube
minikube start
# 设置docker环境
eval $(minikube docker-env)
# 下载SKIL-CE docker镜像
docker pull skymind/skil
# 在minikube中运行
kubectl create skil-app -f skil-app.yaml
对于Windows (Powershell)
Shell
#启动minikube
minikube start
# 设置docker环境
minikube docker-env | Invoke-Expression
# 下载SKIL-CE docker镜像
docker pull skymind/skil
# 在minikube中运行
kubectl create skil-app -f skil-app.yaml
验证SKIL-CE应用程序
运行以下命令检查应用程序的状态。
Shell
# 检查Pod状态
kubectl get pods
#检查pod日志(当容器启动时-如果镜像已经存在于本地注册表中,则这几乎是即时的)
kubectl logs <pod_container_name> # You will get this through "kubectl get pods"
# 获取minikube ip
minikube ip
# SKIL端口
kubectl get services/skil-service -o go-template='{{(index .spec.ports 0).nodePort}}'
# Zeppelin端口
kubectl get services/skil-service -o go-template='{{(index .spec.ports 1).nodePort}}'
# Model History Server Port
kubectl get services/skil-service -o go-template='{{(index .spec.ports 2).nodePort}}'
# Jupyter端口 (If jupyter 已经启动) # 这里有相关说明: https://github.com/SkymindIO/SKIL_Examples/blob/1.2/notebooks/jupyter/jupyter_notebook_example.ipynb
kubectl get services/skil-service -o go-template='{{(index .spec.ports 3).nodePort}}'
现在,你可以通过访问http://<minikube_port>:<application_port_number>在浏览器中访问你的skil镜像(大多数情况是192.168.99.100:30xxx)。使用通过执行上面代码段中的go-template命令找到的端口号。
注意
SKIL需要一段时间才能加载完成。在通过浏览器访问应用程序之前,请等待大约10-15分钟,等待其加载。
故障排除
- 有时候Minikube在启动时会报很多错。解决此问题的一种简单有效的方法是删除c:\user\$env:username.minikube(powershell-windows)或c:\user\%username.minikube(cmd-windows)或~/.minikube/(linux)下的“.minikube”文件夹,然后通过运行minikube start重新启动minikube服务器。
- 有时候,当特定Linux操作系统发行版的virtualbox内核没有编译和安装时,minikube就不会启动。这里是在Linux操作系统上安装virtualbox的有用指南。