zoukankan      html  css  js  c++  java
  • Spark on Yarn 单节点集群 on minikube 的 Mac OS部署趟坑指北

    一、环境准备

    1.1 安装 Docker-ce

    一键式下载安装
    https://docs.docker.com/docker-for-mac/install/

    1.2 安装 MiniKube

    官网 https://kubernetes.io/docs/tasks/tools/install-minikube/

    以 macOS 为例:

    1. 验证是否开启虚拟化,有输入证明已经开启虚拟化

    $ sysctl -a | grep -E --color 'machdep.cpu.features|VMX' 
    

    2. 安装 kubernetes-cli,kubectx(可选),kube-ps1(可选)

    $ brew install kubernetes-cli kubectx kube-ps1
    

    3. 配置 zsh plugin(可选)

    $ vim ~/.zshrc
    
    # 加入
    export KUBE_PS1_ENABLED="off"
    
    plugins=(
        git
        brew
        kubectl
        kube-ps1
    )
    
    source "/usr/local/opt/kube-ps1/share/kube-ps1.sh"
    PS1='$(kube_ps1)'$PS1
    

    之后就可以使用 kubectl 的命令缩写和自动补齐功能

    4. 安装 Hypervisor

    可以安装一下三个虚拟驱动作为监管系统,如果不安装默认使用HyperKit

    5. 安装 minikube

    $ brew install minikube
    

    6. 尝试启动 minikube,可能需要梯子

    # <driver_name> = 上面所安装的虚拟驱动,注意是全小写,还要记得加上引号
    $ minikube start --vm-driver=<driver_name>
    
    # 比如我启动的命令
    $ minikube start --vm-driver='virtualbox' --kubernetes-version='v1.14.8' --extra-config=apiserver.service-node-port-range=1-65535 --alsologtostderr
    
    # 因为 Spark 和 Yarn 都很需要计算资源
    # 所以这里必须使用 3个以上CPU和尽量大的内存
    # 但是 minikube start 我加入 --memory 和 --cpus 无效
    # 所以需要打开 VirtualBox 手动修改一下
    

    7. 验证开启成功

    $ minikube status
    
    # 输出如下内容证明启动成功
    host: Running
    kubelet: Running
    apiserver: Running
    kubeconfig: Configured
    

    8. 使用 Minikube Docker Deamon,避免镜像反复拉取

    $ eval $(minikube docker-env)
    

    9. 配置 minikube 网络

    # 这里需要每次手动修改 minikube 的 /etc/hosts 文件
    # 其实可以用 minikube mount 把文件挂载持久化
    # 但是 minikube 的 mount 有些小 Bug,比如
    # 1. 需要一直开启命令行保持挂载
    # 2. 挂载之后如果关闭就GG了,再也挂载不上了(官网issue已经解决)
    
    # 获得 minikube 虚拟机的 IP
    $ minikube ip
    192.168.99.102
    
    # 进入minikube 修改 /etc/hosts
    $ minikube ssh
    $ su
    $ vi /etc/hosts
    127.0.0.1       localhost
    192.168.99.102  minikube
    

    10. 配置本机网络

    $ sudo vim /etc/hosts
    192.168.99.102  minikube
    

    原文地址 https:////www.cnblogs.com/clockq/p/12190971.html

    二、启动 HDSP 集群

    按照下列配置逐个启动

    如果不更改任何配置,也可以直接 kubectl -f https://github.com/PharbersDeveloper/bp-hadoop-container/blob/minikube-v1.1.0/hdsp-deploy/mandatory.yaml 直接全部启动

    2.1 Namespace 配置

    apiVersion: v1
    kind: Namespace
    metadata:
      name: hdsp-ns
      labels:
        app.kubernetes.io/name: hdsp-ns
        app.kubernetes.io/part-of: hdsp-ns
    

    2.2 StorageClass 配置

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: local-sc
      namespace: hdsp-ns
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
        creationTimestamp: "2019-12-18"
        resourceVersion: "v0.1"
    provisioner: kubernetes.io/no-provisioner
    reclaimPolicy: Retain # Supported policies: Delete, Retain
    allowVolumeExpansion: false
    volumeBindingMode: WaitForFirstConsumer
    

    2.3 master PV 配置

    需要提前创建 PV 的挂载目录

    $ minikube ssh
    $ su
    $ mkdir -p /tmp/hostpath_pv/k8s-master-hdfs-pv
    $ mkdir -p /tmp/hostpath_pv/k8s-worker1-hdfs-pv
    
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: master-hdfs-pv
      namespace: hdsp-ns
      annotations:
        use: &use master-hdfs
        node_name: &node_name minikube
        local_path: &local_path /tmp/hostpath_pv/k8s-master-hdfs-pv
        capacity_storage: &capacity_storage 2Gi
      labels:
        use: *use
        app: hdsp
    spec:
      capacity:
        storage: *capacity_storage
      accessModes:
      - ReadWriteOnce
      storageClassName: local-sc
      local:
        path: *local_path
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - *node_name
    

    2.4 master PVC 配置

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: master-hdfs-pvc
      namespace: hdsp-ns
      annotations:
        use: &use master-hdfs
        node_name: &node_name minikube
        requests_storage: &requests_storage 2Gi
      labels:
        use: &use master-hdfs
        app: hdsp
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: local-sc
      resources:
        requests:
          storage: *requests_storage
      selector:
        matchLabels:
          use: *use
    

    2.5 master deamon set 配置

    先配置 node 标签

    $ kubectl label nodes minikube hdsprole=master
    
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: hdsp-master
      namespace: hdsp-ns
      labels:
        app: hdsp
        noderole: master
    spec:
      selector:
        matchLabels:
          app: hdsp
          noderole: master
      template:
        metadata:
          labels:
            app: hdsp
            noderole: master
        spec:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: node-role.kubernetes.io/master
                    operator: Exists
                - matchExpressions:
                  - key: hdsprole
                    operator: In
                    values:
                    - master
          hostNetwork: true
          containers:
          - name: hdsp-master
            image: pharbers/hadoop:minikube
            imagePullPolicy: IfNotPresent
            args:
            - "-d"
            - "-master"
            securityContext:
              privileged: true
            volumeMounts:
            - mountPath: /usr/soft/hadoop/hdfs
              name: hadoop-data
            livenessProbe:
              httpGet:
                path: /cluster
                port: 8088
              initialDelaySeconds: 100
              timeoutSeconds: 20
              periodSeconds: 100
          imagePullSecrets:
          - name: registry-secret
          volumes:
          - name: hadoop-data
            persistentVolumeClaim:
              claimName: master-hdfs-pvc
    

    2.6 测试

    $ kubectl -n hdsp-ns describe pod hdsp-master-m75n4
    

    输出如下信息表示启动成功

    ...
    ...
    Events:
      Type     Reason     Age                   From               Message
      ----     ------     ----                  ----               -------
      Normal   Scheduled  10m                   default-scheduler  Successfully assigned hdsp-ns/hdsp-master-m75n4 to minikube
      Warning  Unhealthy  4m6s (x3 over 7m26s)  kubelet, minikube  Liveness probe failed: Get http://192.168.99.102:8088/cluster: dial tcp 192.168.99.102:8088: connect: connection refused
      Normal   Killing    4m6s                  kubelet, minikube  Container hdsp-master failed liveness probe, will be restarted
      Normal   Pulled     3m36s (x2 over 10m)   kubelet, minikube  Container image "pharbers/hadoop:minikube" already present on machine
      Normal   Created    3m36s (x2 over 10m)   kubelet, minikube  Created container hdsp-master
      Normal   Started    3m36s (x2 over 10m)   kubelet, minikube  Started container hdsp-master
    

    如果输入结果类似下方,证明 Yarn 集群启动失败,无法查看 Yarn UI 界面,存活探针出错,Pod会自动重启

    ...
    ...
    Events:
      Type     Reason     Age                   From               Message
      ----     ------     ----                  ----               -------
      Normal   Scheduled  10m                   default-scheduler  Successfully assigned hdsp-ns/hdsp-master-m75n4 to minikube
      Warning  Unhealthy  4m6s (x3 over 7m26s)  kubelet, minikube  Liveness probe failed: Get http://192.168.99.102:8088/cluster: dial tcp 192.168.99.102:8088: connect: connection refused
    

    2.7 源码

    上方教程使用已编好的镜像,如果需要修改配置或查看源码,欢迎查看 https://github.com/PharbersDeveloper/bp-hadoop-container/tree/hdsp-on-minikube

    三、minikube 常见问题

    3.1 因为环境隔离,镜像不方便运行

    1. 使用 Minikube Docker Deamon,避免镜像反复拉取
    $ eval $(minikube docker-env)
    
    1. 拷贝本地镜像到 minikube
    $ docker save pharbers/hadoop:using | (eval $(minikube docker-env) && docker load)
    

    3.2 使用 NodePort 范围受限

    扩大 NodePort 范围

    minikube start --extra-config=apiserver.service-node-port-range=1-65535
    

    3.3 如果 Pod 需要回连宿主机

    获得与 Pod 同网段宿主 IP

    minikube ssh "route -n | grep ^0.0.0.0 | awk '{ print $2 }'"
    
  • 相关阅读:
    windows中dos命令指南
    HDU 2084 数塔 (dp)
    HDU 1176 免费馅饼 (dp)
    HDU 1004 Let the Balloon Rise (map)
    变态杀人狂 (数学)
    HDU 2717 Catch That Cow (深搜)
    HDU 1234 开门人和关门人 (模拟)
    HDU 1070 Milk (模拟)
    HDU 1175 连连看 (深搜+剪枝)
    HDU 1159 Common Subsequence (dp)
  • 原文地址:https://www.cnblogs.com/clockq/p/12190971.html
Copyright © 2011-2022 走看看