MicroK8s及KubeFlow安装文档

安装简单的k8s大约有三种思路:minikube,microk8s,kubeadm。minikube 虽然是官方出品,但主要还是基于虚拟机做的设计。在 Linux 生产环境下,microk8s 可能是一个更合适的选择,它的主要组件是基于二进制包启动。

microk8s 基于 snap 进行安装,ubuntu 16.04 及之后的版本都已经预装了 snap,如果是其他发行版的 Linux 需要先安装 snap。

一,SNAP安装

Snap是Canonical推出的一种新的软件打包格式,彻底解决linux依赖性的问题,Snap 软件包拥有更加稳定和安全的特性。

官网URL:https://docs.snapcraft.io/installing-snap-on-centos

MicroK8s及KubeFlow安装文档_第1张图片

 

# 安装EPEL

sudo yum install epel-release

# 安装snapd

sudo yum install snapd

# 添加snap,启动通信socket

sudo systemctl enable --now snapd.socket

# 创建软链

sudo ln -s /var/lib/snapd/snap /snap

 

 

 

二,Snap常用命令

# 列出已经安装的snap包

sudo snap list

# 搜索要安装的snap包

sudo snap find

# 搜索要安装的snap包

sudo snap install

# 删除一个snap包

sudo snap remove

 

 

 

三,MicroK8s安装

通过 microk8s 可以非常快速的搭建起一个 Kubernetes 单机环境,安装极其非常方便,通过 snap 命令一键安装,可用测试,快速原型及CI/CD。

官方URL:https://microk8s.io/

MicroK8s及KubeFlow安装文档_第2张图片

 

1,单独安装microk8s

# 安装1.14稳定版microk8s

sudo snap install microk8s --classic --channel=1.14/stable

# 启用microk8s的DNS,存储和面板功能

sudo microk8s.enable dns dashboard storage

# 启动microk8s

sudo microk8s.start

# 查看microk8s状态

sudo microk8s.status

# 停止microk8s服务

sudo smicrok8s.stop

# 查看集群信息

sudo microk8s.kubectl cluster-info

# 查看集群节点

sudo microk8s.kubectl get nodes

# 命令别名

sudo snap alias microk8s.kubectl kubectl

2,脚本安装microk8s

由于本次安装microk8s主要是为了和kubeflow进行集成使用,所以使用更为方便的脚本安装。

Kubeflow推荐的脚本:https://github.com/canonical-labs/kubernetes-tools

安装脚本:

sudo kubernetes-tools/setup-microk8s.sh

安装过程如下图示:

 MicroK8s及KubeFlow安装文档_第3张图片

***注意,由于此脚本安装dashborad时,使用了token,登陆时会增加操作步骤。为更方便测试,需要对脚本内容进行裁剪,禁用microm8s的dashboard功能(脚本里去除dashaboard或是microk8s命令禁用)。

dashboard的deployment及service使用了我自己提供的如下方案。

apiVersion: v1

kind: ServiceAccount

metadata:

  labels:

    k8s-app: kubernetes-dashboard

  name: kubernetes-dashboard

  namespace: kube-system

---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

  name: kubernetes-dashboard

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: ClusterRole

  name: cluster-admin

subjects:

- kind: ServiceAccount

  name: kubernetes-dashboard

  namespace: kube-system

---

kind: Deployment

apiVersion: apps/v1beta2

metadata:

  labels:

    k8s-app: kubernetes-dashboard

  name: kubernetes-dashboard

  namespace: kube-system

spec:

  replicas: 1

  revisionHistoryLimit: 3

  selector:

    matchLabels:

      k8s-app: kubernetes-dashboard

  template:

    metadata:

      labels:

        k8s-app: kubernetes-dashboard

    spec:

      containers:

      - name: kubernetes-dashboard

        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

        ports:

        - containerPort: 9090

          protocol: TCP

        livenessProbe:

          httpGet:

            path: /

            port: 9090

          initialDelaySeconds: 25

          timeoutSeconds: 30

      serviceAccountName: kubernetes-dashboard

---

kind: Service

apiVersion: v1

metadata:

  labels:

    k8s-app: kubernetes-dashboard

  name: kubernetes-dashboard

  namespace: kube-system

spec:

  type: NodePort

  ports:

    - port: 80

      targetPort: 9090

      nodePort: 32766

  selector:

    k8s-app: kubernetes-dashboard

 

 

 

四,Kubeflow安装

Kubeflow是目前基于Kubernetes的主流机器学习解决方案,它抽象了和机器学习相关的PS-Worker模型,实现了一套pipeline的工作流,支持超参数训练和Jupyter notebooks集成等能力。

官网URL:https://www.kubeflow.org/

 MicroK8s及KubeFlow安装文档_第4张图片

1,脚本安装kubeflow

本次安装参考url: https://www.kubeflow.org/docs/started/getting-started-multipass/

Kubeflow推荐的脚本:https://github.com/canonical-labs/kubeflow-tools

安装脚本:

sudo kubeflow-tools/install-kubeflow.sh

安装过程如下所示

 MicroK8s及KubeFlow安装文档_第5张图片

2,镜像获取

上图中,有些kubeflow的pod已开始running,但有些pod一直处于ImagePullBackOff状态,这是因为这批镜像都是放在gcr.io域名仓库中,需要特别上网才能访问。

在这种情况下,根据网上的资料,我们以dockerhub为中继,将需要的docker镜像辗转拉取,直至所有镜像成功启动。

 

 MicroK8s及KubeFlow安装文档_第6张图片

3,更新jupyter-web-app镜像

当一切就绪之,如果我们访问kubeflow的notebook服务时,发现还是无法正常使用jupyterhub功能。分析浏览器错误,才发现是一个网页内的jquery库,引用的是googleapis的地址,于是,还需要重新将涉及的layout.html更改之后生成新的镜像。

 MicroK8s及KubeFlow安装文档_第7张图片

       Dockerfile内容:

FROM gcr.io/kubeflow-images-public/jupyter-web-app:v0.5.0

COPY layout.html /app/kubeflow_jupyter/default/templates/

COPY layout.html /app/kubeflow_jupyter/rok/templates/

 

       Layout.html更新后的内容:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  {% if title %}

      Kubeflow Jupyter - {{ title }}

  {% else %}

      Kubeflow Jupyter

  {% endif %}

 

  {% block javascript %}

   

  {% endblock %}

 

   

   

   

 

 

    {% block content %}{% endblock %}

 

 

最终,即可正常使用这一功能了。

 MicroK8s及KubeFlow安装文档_第8张图片

 

 

你可能感兴趣的:(MicroK8s及KubeFlow安装文档)