注意:机器最低规格为:8C16G ;kubectl 版本要1.24 ;之前安装过 KS 要提前清理下环境。
下载 KubeKey
1 2 | export KKZONE=cn curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.2 sh - |
---|
如果机器上之前安装过 KubeSphere 或者 KubeSphere 版本太高 , 先卸载 KubeSphere,k8s 版本太高有问题,会导致部分 CRD 不能安装
1 | ./kk delete cluster |
---|
清理 kubeconfig,不然会导致其他 node 节点 无法使用 kubectl
1 | rm -rf /root/.kube/config |
---|
安装 1.22 版本的 k8s
1 | ./kk create cluster --with-kubernetes v1.22.12 --with-kubesphere v3.3.1 |
---|
详细安装步骤可以参考 KubeSphere 官方文档
下载 cube-studio 源码
1 | git clone https://github.com/tencentmusic/cube-studio.git |
---|
安装
将k8s集群的 kubeconfig 文件复制到 install/kubernetes/config 文件中,然后执行如下命令,其中xx.xx.xx.xx为机器内网的ip
1 2 3 4 | cp $HOME/.kube/config install/kubernetes/config # 在k8s worker机器上执行 sh start.sh xx.xx.xx.xx |
---|
Kubectl 版本太低可能会导致部署 CRD 会报错,导致 istio-system 下面的 svc 创建不成功
1 2 3 | customresourcedefinition.apiextensions.k8s.io/applications.app.k8s.io condition met error: json: cannot unmarshal object into Go struct field Kustomization.patchesStrategicMerge of type patch.StrategicMerge error: rawResources failed to read Resources: Load from path ../../base failed: '../../base' must be a file (got d='/home/zjlab/zyg/cube-studio-master/install/kubernetes/kubeflow/train-operator/manifests/base') |
---|
Kubesphere 的 kubectl 默认在 /usr/local/bin/kubectl
目录下面,cube-studio 的 kubectl 默认在 /usr/bin
下面
1 | cp /usr/bin/kubectl /usr/local/bin/ |
---|
查看node标签
1 | kubectl get nodes --show-labels |
---|
发现如果没有 mysql=true 标签,重新执行打标签命令
1 | kubectl label node $node train=true cpu=true notebook=true service=true org=public istio=true knative=true kubeflow=true kubeflow-dashboard=true mysql=true redis=true monitoring=true logging=true --overwrite |
---|
如果 mysql 报错:
1 | Warning Failed 34s kubelet Failed to pull image "busybox": rpc error: code = Unknown desc = Error response from daemon: Head "https://registry-1.docker.io/v2/library/busybox/manifests/latest": unauthorized: incorrect username or password |
---|
需要 docker login ,然后docker pull busybox
手动拉取
kubectl get pv infra-mysql-pv
查看PV状态,如果未绑定添加 storageClassName: local
等字段
kubectl edit pv infra-mysql-pv
1 2 3 4 5 6 | claimRef: apiVersion: v1 kind: PersistentVolumeClaim name: infra-mysql-pvc namespace: infra storageClassName: local |
---|
kubectl edit deploy -n infra mysql
设置 replicas=0
然后清理 /data/k8s/infra/mysql
残余数据(慎用!!!)
最后 replicas=1 坐等 infra 命名空间下面的 pod 都 running
kubectl edit configmap kubernetes-config -n infra
kubectl edit configmap kubernetes-config -n pipelinekubectl edit configmap kubernetes-config -n katib
1 2 3 4 5 6 7 8 | 名称: harbor 域名: http://10.100.29.41:30080/ 用户名: admin k8s hubsecret: zjflab |
---|
其中 k8s hubsecret 的创建的命令为
1 2 3 4 5 6 | kubectl create secret docker-registry zjflab \ --docker-server=10.100.29.41:30080 \ --docker-username=admin \ --docker-password=Harbor12345 \ --docker-email=zhuyaguang1368@163.com \ --namespace="pipeline" |
---|
设置镜像的仓库,完全名称并带上版本号。
你的镜像可以在开发环境上打好,然后上传到 Harbor 上。
填写镜像,任务名称,启动命令
打标签
1 | kubectl label node worker-1 gpu=true gpu-type=V100 --overwrite |
---|
How to install and use VMware Harbor private registry with Kubernetes
Pull an Image from a Private Registry
在 部署好的 Harbor 中添加 HTTPS 证书配置
x509: cannot validate certificate for 10.30.0.163 because it doesn’t contain any IP SANs
最后 Docker login $harborIP,就可以 docker pull 拉取服务。
使用 kubesphere 监控
卸载 cube-studio
1 2 3 4 5 | kubectl delete configmap grafana-config all-grafana-dashboards --namespace=monitoring kubectl delete -f ./grafana/grafana-dp.yml kubectl delete -f ./prometheus/prometheus-main.yml kubectl delete -f ./operator/operator-crd.yml |
---|