阿里云搭建kubernetes集群并安装kubeflow进行机器学习

利用阿里云搭建了kubernetes测试集群并在上面搭建了kubeflow组件进行机器学习。由于安装的时候kubernetes要拉去相关的镜像,公有云可以通外网,安装要简单许多,如果内网环境,就需要自己下载镜像文件,要复杂许多。如果一切顺利,搭建过程约1个多小时。

1. 租借云服务器ECS

阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第1张图片
租借3台阿里云ECS,每一台配置2C8G,每块硬盘80G,租借的是抢占式,费用比较便宜,由于只是做测试,不需要多高的要求,每小时费用大概一块多。租用过程略。

操作系统 名字 节点性质
centos-7.6 k8s001 master
centos-7.6 k8s002 work1
centos-7.6 k8s003 work2

安装版本:
kubernetes 1.14.6
docker 18.06.1-ce
kubeflow 0.6.2

2. kubernetes集群搭建

搭建一主两从

2.1 对三台机器进行相同操作

主机名必须每个节点都不一样,并且保证所有点之间可以通过hostname互相访问。

查看主机名

$ hostname

修改主机名

$ hostnamectl set-hostname your-name
比如 hostnamectl set-hostname k8s001

配置host,使所有节点之间可以通过hostname互相访问

$ vi /etc/hosts
每台机器添加相同的配置
在这里插入图片描述

更新yum

$ yum update

安装依赖包

 $ yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp wget git

2.3 关闭防火墙、swaphostame,重置iptables

关闭防火墙

$ systemctl stop firewalld && systemctl disable firewalld

重置iptables

$ iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT

关闭swap

$ swapoff -a
$ sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab

关闭selinux

$ setenforce 0

关闭dnsmasq(否则可能导致docker容器无法解析域名) (可选)

$ service dnsmasq stop && systemctl disable dnsmasq

系统参数设置

 $ cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
 net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
 vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
EOF

生效文件

$ sysctl -p /etc/sysctl.d/kubernetes.conf

安装docker

yum -y install docker 18.06.1-ce

开机启动

$ systemctl enable docker

如果docker默认镜像存储路径的空间不够大,需要修改docker相关配置,但是阿里云没有这个问题,所以安装很简单

启动docker服务

$service docker restart

查看docker状态,显示为active则启动成功

$systemctl status docker
查看docker状态,显示为active则启动成功
在这里插入图片描述

工具说明

kubeadm: 部署集群用的命令
kubelet: 在集群中每台机器上都要运行的组件,负责管理pod、容器的生命周期 kubectl: 集群管
理工具

配置yum源

$cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装kubeadm,kubelet和kubectl

$ yum install -y kubelet-1.14.6 kubeadm-1.14.6 kubectl-1.14.6
$ systemctl enable kubelet

安装kubelet 后会在/etc下生成文件目录/etc/kubernetes/manifests/

2.2 部署Kubernetes Master

以下仅在master上操作

$ kubeadm init \
  --apiserver-advertise-address=172.16.136.16 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.14.6 \
  --service-cidr=10.1.0.0/16 \
  --pod-network-cidr=10.244.0.0/16

记录控制台的输出(如下),部署work的时候要用:

kubeadm join 172.16.136.16:6443 --token a9s4qx.9g2u5ukwocbjc17f
–discovery-token-ca-cert-hash sha256:90a12681c259a65c45649f95f9328e78da832307a98246b0771463bee26897e3

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config 

master 上安装 flannel

$ wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

如果下载失败,可以修改yml中的镜像地址
quay.io修改为quay-mirror.qiniu.com

   spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: beta.kubernetes.io/os
                    operator: In
                    values:
                      - linux
                  - key: beta.kubernetes.io/arch
                    operator: In
                    values:
                      - amd64
      hostNetwork: true
      tolerations:
      - operator: Exists
        effect: NoSchedule
      serviceAccountName: flannelimage
      initContainers:
      - name: install-cni
        image: quay-mirror.qiniu.com/coreos/flannel:v0.12.0-amd64

部署网络插件flannel

$ kubectl apply -f kube-flannel.yml 

2.3 加入Kubernetes Node

以下仅在work节点上操作

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:这个在master init初始化时会有提示,更换为自己的IP和token。

kubeadm join 172.16.136.16:6443 --token a9s4qx.9g2u5ukwocbjc17f
–discovery-token-ca-cert-hash sha256:90a12681c259a65c45649f95f9328e78da832307a98246b0771463bee26897e3

集群部署好以后

$ kubectl get nodes

阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第2张图片
集群状态会变成ready

2.4部署 Dashboard

dashboard也会存在镜像无法拉取的情况,默认镜像国内无法访问,修改kubernetes-dashboard.yaml修改镜像地址为:
先将文件下载下来:

$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

修改原image 地址
k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
修改为
roeslys/kubernetes-dashboard-amd64:v1.10.1

spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
    spec:
      containers:
      - name: kubernetes-dashboard
        image: roeslys/kubernetes-dashboard-amd64:v1.10.1
        ports:
        - containerPort: 8443
          protocol: TCP

默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:不修改的话外部不能访问。
修改type,NodePort,注意冒号后面要用tab分隔

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30000
  selector:
    k8s-app: kubernetes-dashboard

$ kubectl apply -f kubernetes-dashboard.yaml

创建service account并绑定默认cluster-admin管理员集群角色:
源也可以换成gcr.azk8s.cn/google_containers/kubernetes-dashboard-amd64:v1.10.1

$ kubectl create serviceaccount dashboard-admin -n kube-system
$ kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
$ kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

记录保存token上面生成的令牌,使用令牌登录。

阿里云网络配置

必须开通网络配置,才能在进行公网访问
阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第3张图片
端口范围写 30000/30000
阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第4张图片

登录地址(如果谷歌打不开就用火狐浏览器)
https://master_ip:30000/
阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第5张图片

阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第6张图片

3 kubeflow安装

这里使用了github上一键安装的开源工具
https://github.com/shikanon/kubeflow-manifests?spm=a2c6h.12873639.0.0.54bb1df6MU2qFL

3.1 clone该项目

$ git clone https://github.com/shikanon/kubeflow-manifests.git

新建命名空间安装kubeflow需要
kubectl create namespace kubeflow

安装步骤

如果需要用local-path文件夹下的yaml文件生成

$ cd kubeflow-manifests
$ cd local-path
$ kubectl apply -f local-path-storage.yaml

生成yaml
$ cd …
$ python run.py
启动
$ cd yaml
$ kubectl apply -f .
查看结果
$ kubectl get pod -nkubeflow
当所有pod running后就安装成功了

$ kubectl get pods,svc -n istio-system
阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第7张图片
80映射的端口是31380
同样也要更新阿里云的网络配置
阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第8张图片

访问地址 http://mater_ip:31380
阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第9张图片

创建一个notebook servers

阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第10张图片
唯一需要需要注意的是谷歌的镜像地址拉不下来
镜像地址用亚马逊的镜像gcr.azk8s.cn
gcr.azk8s.cn/kubeflow-images-public/tensorflow-1.13.1-notebook-cpu:v0.5.0
阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第11张图片
创建好以后点击connect,进入jupyter notebook
阿里云搭建kubernetes集群并安装kubeflow进行机器学习_第12张图片
其他的功能还没有研究

修改好的yml文件已经上传到了网盘
链接:https://pan.baidu.com/s/1GgpyLD1kNpWcyQsJkWU7yw 密码:ioqq

参考文献
https://www.jianshu.com/p/f4ac7f4555d3
https://developer.aliyun.com/article/740721
https://github.com/shikanon/kubeflow-manifests?spm=a2c6h.12873639.0.0.54bb1df6MU2qFL

你可能感兴趣的:(云计算,机器学习,AI)