LoginSignup
2
1

More than 5 years have passed since last update.

Rancher2.0 Tech Preview2 alpha21でGKEにkubernetesクラスタ構築からSparkデプロイまで

Last updated at Posted at 2018-03-13

過去の記事で「Spark + Kubernetes Docker on SoftLayer by Rancher」のview数が4000近くあるので、Rancher2.0 Tech Preview2 alpha21からHelm対応したRancherカタログにSparkが復活しているので、GKE上にSparkをデプロイしてみたいともいます。

当方Sparkについては詳しくないので、こちらの記事を参考にkubernetesクラスタにSparkをデプロイしてBigDataやMachine Learningなど試していただきたいと思います。

Rancher2.0 Tech Preview2 alpha21環境の構築

GCEの準備

Compute Engineで以下の1インスタンスを作成します。

項目 入力概要
名前 rancher-server
ゾーン asia-northeast1-b
マシンタイプ vCPUx1
ブートディスク Ubuntu 16.04 LTS
ディスクサイズ80GB
ファイアウォール HTTP トラフィックを許可する、HTTPS トラフィックを許可するの両方をチェックします。

GCPでは、デフォルトでファイアウォールが設定されていて、ホスト間でのコンテナの通信が行えないため、
設定を変更する必要があります。

GCPのダッシュボードで、「ネットワーキング」-「ファイアウォール」を選択して、ファイアウォールルールを作成します。

image.png

名前は任意名、ソースIPの範囲は0.0.0.0/0、プロトコルとポートは全て許可とします。
今回はお試しということで、全許可にしています。
最後に「作成」ボタンをクリックします。

Rancher2.0 Tech Preview2 alpha21のインストール

1.Dockerのインストール

最新版のDockerをインストールします。

コマンド
$ curl -fsSL https://get.docker.com/ | sh
# Executing docker install script, commit: 02d7c3c
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sudo -E sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null
+ sudo -E sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial edge" > /etc/apt/sources.list.d/docker.list
+ [ ubuntu = debian ]
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ sudo -E sh -c docker version
Client:
 Version:       18.02.0-ce
 API version:   1.36
 Go version:    go1.9.3
 Git commit:    fc4de44
 Built: Wed Feb  7 21:16:33 2018
 OS/Arch:       linux/amd64
 Experimental:  false
 Orchestrator:  swarm

Server:
 Engine:
  Version:      18.02.0-ce
  API version:  1.36 (minimum version 1.12)
  Go version:   go1.9.3
  Git commit:   fc4de44
  Built:        Wed Feb  7 21:15:05 2018
  OS/Arch:      linux/amd64
  Experimental: false
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker cyberblackvoom

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.

2.Rancher2.0 Tech Preview2 alpha21のインストール

コマンド
$ sudo docker run -d -p 80:80 -p 443:443 rancher/server:preview
Unable to find image 'rancher/server:preview' locally
preview: Pulling from rancher/server
c3b9c0688e3b: Pull complete 
e9fb5affebb0: Pull complete 
0f1378f511ad: Pull complete 
96a961dc7843: Pull complete 
16564141bc83: Pull complete 
e58cffa0cb0e: Pull complete 
ae52f3198700: Pull complete 
226b9ead1a79: Pull complete 
c6d73e35a6a4: Pull complete 
05529e6df84b: Pull complete 
Digest: sha256:b997803f07db1ae22ab47f513a43c70bb39c054aac8aebca4a6cfb0fc908300f
Status: Downloaded newer image for rancher/server:preview
4113f312bf487f372f5909059b13a6fb015cd50ac0e45f29091efddf3fe21e96

3.ブラウザを起動して、UIにアクセスします。

https://外部IP/

以下の初期Usernameと初期Passwordでログインします。

項目 入力概要
Username admin
Password admin

screencapture-35-200-92-0-login-2018-03-13-12_24_40.png

次に初期パスワード変更を求められますので、任意のパスワードを入力します。

screencapture-35-200-92-0-login-2018-03-13-12_28_29.png

ログイン完了となります。

screencapture-35-200-92-0-g-clusters-2018-03-13-12_29_31.png

GKEとの連携

サービスアカウントの作成

GKEと連携するために、GCPでサービスアカウントを作成し、jsonファイルをエクスポートします。

1.「APIとサービス」-「認証情報」を選択

image.png

2.「認証情報を作成」を選択します。

image.png

3.「サービスアカウントキー」を選択

image.png

4.「新しいサービスアカウント」を選択し、サービスアカウントに任意名を入力し、役割でProjectからオーナーを選択して、作成ボタンをクリックします。

image.png

5.jsonファイルがダウンロードされます。その後「閉じる」を選択します。

image.png

クラスタ作成からWordPressデプロイ

1.「Add Cluster」ボタンを押下

image.png

2.jsonファイルを読み込み

「Cluster Name」に任意の名前を入力し、「Read from a file」ボタンを押下します。

image.png

ダウンロードしたjsonファイルを選択して、「開く」ボタンを押下します。

image.png

3.Rancherからkubernetesクラスタ構築設定

「Zone」を「asia-northeast1-b」、「n1-standard-(2 vCPUs,7.5 GB RAM)」に設定し、「Create」ボタンを押下します。

image.png

4.kubernetes clusterの構築完了

しばらくすると、構築が完了します。

screencapture-35-187-227-147-g-clusters-2018-03-14-00_03_32.png

spark-master,spark-worker,spark-zeppelinのpodがデプロイされます。

screencapture-35-187-227-147-p-cluster-vjp5c-project-zjlkx-workloads-2018-03-14-00_12_01.png

GKE側でも確認できます。

screencapture-console-cloud-google-kubernetes-list-2018-03-14-00_05_03.png

5.リソース状況の確認

上部メニュー「Global」-「Cluster:gke-cluster」を選択します。

image.png

GKE上のkubernetesクラスタのリソース状況を確認できます。

screencapture-35-187-227-147-c-cluster-vjp5c-2018-03-14-00_05_57.png

カタログ機能からSparkをデプロイ

1.カタログ設定

上部メニュー「Global」-「Cluster:gke-cluster」-「Default」を選択します。

image.png

上部メニュー「Catalog App」を選択

image.png

「Launch」ボタンを押下します。

image.png

カタログ一覧が表示されます。

screencapture-35-200-92-0-p-cluster-qgd2w-project-2qzq8-apps-catalog-2018-03-13-13_32_45.png

Sparkの「View Details」ボタンを押下します。

image.png

「Launch」ボタンを押下します。

image.png

Helm Chartの詳細は以下となります。


Apache Spark Helm Chart
Apache Spark is a fast and general-purpose cluster computing system including Apache Zeppelin.

http://spark.apache.org/
https://zeppelin.apache.org/
Inspired from Helm Classic chart https://github.com/helm/charts

Chart Details
This chart will do the following:

1 x Spark Master with port 8080 exposed on an external LoadBalancer
3 x Spark Workers with HorizontalPodAutoscaler to scale to max 10 pods when CPU hits 50% of 100m
1 x Zeppelin with port 8080 exposed on an external LoadBalancer
All using Kubernetes Deployments
Prerequisites
Assumes that serviceAccount tokens are available under hostname metadata. (Works on GKE by default) URL -- http://metadata/computeMetadata/v1/instance/service-accounts/default/token
Installing the Chart
To install the chart with the release name my-release:

コマンド
$ helm install --name my-release stable/spark

Configuration

The following tables lists the configurable parameters of the Spark chart and their default values.

Spark Master

Parameter Description Default
Master.Name Spark master name spark-master
Master.Image Container image name k8s.gcr.io/spark
Master.ImageTag Container image tag 1.5.1_v3
Master.Replicas k8s deployment replicas 1
Master.Component k8s selector key spark-master
Master.Cpu container requested cpu 100m
Master.Memory container requested memory 512Mi
Master.ServicePort k8s service port 7077
Master.ContainerPort Container listening port 7077
Master.DaemonMemory Master JVM Xms and Xmx option 1g
Master.ServiceType Kubernetes Service type LoadBalancer

Spark WebUi

Parameter Description Default
WebUi.Name Spark webui name spark-webui
WebUi.ServicePort k8s service port 8080
WebUi.ContainerPort Container listening port 8080

Spark Worker

Parameter Description Default
Worker.Name Spark worker name spark-worker
Worker.Image Container image name k8s.gcr.io/spark
Worker.ImageTag Container image tag 1.5.1_v3
Worker.Replicas k8s hpa and deployment replicas 3
Worker.ReplicasMax k8s hpa max replicas 10
Worker.Component k8s selector key spark-worker
Worker.Cpu container requested cpu 100m
Worker.Memory container requested memory 512Mi
Worker.ContainerPort Container listening port 7077
Worker.CpuTargetPercentage k8s hpa cpu targetPercentage 50
Worker.DaemonMemory Worker JVM Xms and Xmx setting 1g
Worker.ExecutorMemory Worker memory available for executor 1g

Zeppelin

Parameter Description Default
Zeppelin.Name Zeppelin name zeppelin-controller
Zeppelin.Image Container image name gcr.io/google_containers/zeppelin
Zeppelin.ImageTag Container image tag v0.5.5_v2
Zeppelin.Replicas k8s deployment replicas 1
Zeppelin.Component k8s selector key zeppelin
Zeppelin.Cpu container requested cpu 100m
Zeppelin.ServicePort k8s service port 8080
Zeppelin.ContainerPort Container listening port 8080
Zeppelin.Ingress.Enabled if?true, an ingress is created FALSE
Zeppelin.Ingress.Annotations annotations for the ingress {}
Zeppelin.Ingress.Path the ingress path /
Zeppelin.Ingress.Hosts a list of ingress hosts [zeppelin.example.com]
Zeppelin.Ingress.Tls a list of?IngressTLS?items []
Zeppelin.ServiceType Kubernetes Service type LoadBalancer

Specify each parameter using the --set key=value[,key=value] argument to helm install.

Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,

コマンド
$ helm install --name my-release -f values.yaml stable/spark

Tip: You can use the default values.yaml


2.Google Cloud SDK ShellでEXTERNAL-IPの確認

コマンド
> gcloud container clusters get-credentials gke-cluster --zone asia-northeast1-a --project 対象のproject名
Fetching cluster endpoint and auth data.
kubeconfig entry generated for gke-cluster.
> kubectl get -n wordpress services
NAME             TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
spark-master     ClusterIP      10.27.247.241   <none>           7077/TCP         1m
spark-webui      LoadBalancer   10.27.245.177   35.200.102.242   8080:31837/TCP   1m
spark-zeppelin   LoadBalancer   10.27.246.53    <pending>        8080:30515/TCP   1m

ブラウザを起動して、http://EXTERNAL-IP:8080/ にアクセスします。

screencapture-35-200-102-242-8080-2018-03-13-23_48_43.png

クラスタの削除

上部メニュー「Global」を選択し、「gke-cluster」の左にあるチェックボックスにチェックを入れて、「Delete」ボタンを押下します。

image.png

削除されると以下の画面になります。

screencapture-35-200-92-0-g-clusters-2018-03-13-15_50_15.png

GKE側でも削除されていることを確認します。

screencapture-console-cloud-google-kubernetes-list-2018-03-13-15_51_22.png

このカタログのSparkがどの程度利用できるかはわかりませんが、kubernetesクラスタに簡単にデプロイできてしまうのは魅力的ではないでしょうか。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1