-
適用場景:linux系統,已經搭建好kubernetes1.4及以上的集羣,沒有配置CA等認證,已經搭建DNS,其它情景僅作參考。
-
如果還沒有搭建DNS,請參考kubernetes中部署DNS搭建。
-
相關的yaml文件已經上傳到本人的github,需要用到的國外鏡像也一併被我替換成了阿里雲鏡像,可直接下載使用
相關文章:
請根據以下步驟一步步開始搭建spark集羣
1.創建spark的namespaces
a.介紹:
Kubernetes通過命名空間,將底層的物理資源劃分成若干個邏輯的“分區”,而後續所有的應用、容器都是被部署在一個具體的命名空間裏。每個命名空間可以設置獨立的資源配額,保證不同命名空間中的應用不會相互搶佔資源。此外,命名空間對命名域實現了隔離,因此兩個不同命名空間裏的應用可以起同樣的名字。
文件namespace-spark-cluster.yaml內容:
apiVersion: v1
kind: Namespace
metadata:
name: "spark-cluster"
labels:
name: "spark-cluster"
其中規定了一個命名空間名爲:"spark-cluster"
b.創建
$ kubectl create -f namespace-spark-cluster.yaml
c.使用該Namespace: (${CLUSTER_NAME}和${USER_NAME}可在kubeconfig文件中查看)
$ kubectl config set-context spark --namespace=spark-cluster --cluster=${CLUSTER_NAME} --user=${USER_NAME}
$ kubectl config use-context spark
- 這樣接下來創建的Pod和service(或任意資源)都是在這個命名空間(spark-cluster)下了
2.創建spark-master的Rc
a.文件spark-master-controller.yaml內容:
kind: ReplicationController
apiVersion: v1
metadata:
name: spark-master-controller
spec:
replicas: 1
selector:
component: spark-master
template:
metadata:
labels:
component: spark-master
spec:
containers:
- name: spark-master
image: registry.cn-hangzhou.aliyuncs.com/sjq-study/spark:1.5.2_v1
command: ["/start-master"]
ports:
- containerPort: 7077
- containerPort: 8080
resources:
requests:
cpu: 100m
- 其中鏡像已經替換成了阿里雲鏡像,可直接下載使用
b.創建
$ kubectl create -f spark-master-controller.yaml
c.查看驗證
$ kubectl get pods |grep spark-master
spark-master-controller-rz1hd 1/1 Running 0 5h
-
已經running!
-
再查看master的日誌看是否有報錯的問題:
$ kubectl logs spark-master-controller-rz1hd -n spark-cluster
17/12/20 07:30:36 INFO Master: Registered signal handlers for [TERM, HUP, INT]
17/12/20 07:30:37 INFO SecurityManager: Changing view acls to: root
17/12/20 07:30:37 INFO SecurityManager: Changing modify acls to: root
17/12/20 07:30:37 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(root); users with modify permissions: Set(root)
17/12/20 07:30:38 INFO Slf4jLogger: Slf4jLogger started
17/12/20 07:30:38 INFO Remoting: Starting remoting
17/12/20 07:30:38 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkMaster@spark-master:7077]
17/12/20 07:30:38 INFO Utils: Successfully started service 'sparkMaster' on port 7077.
17/12/20 07:30:38 INFO Master: Starting Spark master at spark://spark-master:7077
17/12/20 07:30:38 INFO Master: Running Spark version 1.5.2
17/12/20 07:30:39 INFO Utils: Successfully started service 'MasterUI' on port 8080.
17/12/20 07:30:39 INFO MasterWebUI: Started MasterWebUI at http://10.1.24.4:8080
17/12/20 07:30:39 INFO Utils: Successfully started service on port 6066.
17/12/20 07:30:39 INFO StandaloneRestServer: Started REST server for submitting applications on port 6066
17/12/20 07:30:39 INFO Master: I have been elected leader! New state: ALIVE
從日誌中可以看出spark的master已經創建成功併成功成爲leader和開放了8080端口作爲Master的UI
3.創建spark-master的sercives
a.文件spark-master-service.yaml內容
kind: Service
apiVersion: v1
metadata:
name: spark-master
spec:
ports:
- port: 7077
targetPort: 7077
name: spark
- port: 8080
targetPort: 8080
name: http
selector:
component: spark-master
b.創建
$ kubectl create -f spark-master-service.yaml
c.查看驗證
$ kubectl get svc |grep spark-master
spark-master 192.168.3.239 <none> 7077/TCP,8080/TCP 5h
4.創建spark-worker的Rc
a.文件spark-worker-controller.yaml內容
kind: ReplicationController
apiVersion: v1
metadata:
name: spark-worker-controller
spec:
replicas: 3
selector:
component: spark-worker
template:
metadata:
labels:
component: spark-worker
spec:
containers:
- name: spark-worker
image: registry.cn-hangzhou.aliyuncs.com/sjq-study/spark:1.5.2_v1
command: ["/start-worker"]
ports:
- containerPort: 8081
resources:
requests:
cpu: 100m
- 其中鏡像已經替換成了阿里雲鏡像,可直接下載使用
- 定義了3個worker節點,實際需要多少個可以直接修改replicas:
- cpu和mem也可根據實際需要進行修改
b.創建
$ kubectl create -f spark-worker-controller.yaml
c.查看驗證
$ kubectl get pods |grep spark-work
spark-worker-controller-djk50 1/1 Running 0 2h
spark-worker-controller-qf1p3 1/1 Running 0 3h
spark-worker-controller-w0kzw 1/1 Running 0 3h
- 已經running!
到這爲止spark的集羣就已經搭建成功了!
可以通過查看master POD的IP+port或者master-servixes的IP+port來訪問master的UI
可以通過查看worker POD的IP+port來訪問worker的UI
但此時mater和worker節點的ui都是單獨的,沒法在一個UI裏實現查看,點擊worker UI裏的==back to master==也是返回不了master的UI的。並且此時集羣外也無法訪問我們的spark集羣。
實現多UI合併和對外開放問題見 kubernetes中搭建spark集羣 (二)
- 未完待續!
相關文章:
聲明!以上內容純屬個人原創!轉載請標註出處,謝謝!
如果本文有幫助到你,希望能動動小手點個贊。 如有錯誤請多指正!如有雷同!純屬巧合!