2021/03/12 軟體版本更新至 v21.03

前言

Kubernetes(K8s)是一個開源系統,用於自動化容器應用程序的部署,擴展和管理。
然而安裝 K8s 系統相當繁瑣,對於新手來說會遇到各式各樣的問題,更別說要建構一整座叢集了。好消息是,目前越來越多簡化 K8s 安裝步驟的工具,本章就要來介紹由 NVIDIA 維運的建置工具 DeepOps


介紹

DeepOps 項目主要用於快速佈署 Kubernetes 及 Slurm 在 GPU 服務器叢集和共享單個強大節點(例如 NVIDIA DGX Systems)的最佳實踐。DeepOps 具高彈性,可以進行調整或以模塊化方式使用,以匹配特定使用情境的集群需求。

特性

  • 利用 Ansible 提供點到點來設置整個群集管理堆棧
  • 提供腳本可用於快速部署 Kubeflow 和連接 NFS 存儲
  • 可安裝 Slurm,Kubernetes 或兩者的混合 (Slurm 安裝將於日後另行介紹)
  • 提供 K8s 儀錶板及資源監控介面

版本

  • 21.03
Component v21.03
Kubespray b39a196
Kubernetes 1.18.9
Etcd 3.4.3
Docker 19.03.14
Calico 3.15.2
Helm 3.4.1
Dashboard 2.0.3
DCGM Exporter 2.0.13-2.1.2
Monitoring 10.0.2

建置範例

架構

Hostname IP Address IP Interface SSH Port OS GPU Role
k8sm01 192.168.149.128 ens33 22 Ubuntu 20.04.2 NO Master Node
k8sm02 192.168.149.129 ens33 22 Ubuntu 20.04.2 NO Master Node
k8sm03 192.168.149.130 ens33 22 Ubuntu 20.04.2 NO Master Node
k8sc01 192.168.149.134 ens33 22 Ubuntu 20.04.2 YES Compute Node
k8sc02 192.168.149.135 ens33 22 Ubuntu 20.04.2 YES Compute Node

事前準備

請在 Master Node 擇一節點操作

下載 DeepOps 軟體包

1
2
git clone --recurse-submodules https://github.com/NVIDIA/deepops.git -b release-21.03
cd deepops

安裝套件及產生 config 資料夾

1
sudo -H ./scripts/setup.sh

編輯建置設定檔 (ini)

1
vim config/inventory

將資料輸入之後存檔離開

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[all]
k8sm01 ansible_host=192.168.149.128 ansible_port=22 ansible_interfaces=ens33
k8sm02 ansible_host=192.168.149.129 ansible_port=22 ansible_interfaces=ens33
k8sm03 ansible_host=192.168.149.130 ansible_port=22 ansible_interfaces=ens33
k8sc01 ansible_host=192.168.149.134 ansible_port=22 ansible_interfaces=ens33
k8sc02 ansible_host=192.168.149.135 ansible_port=22 ansible_interfaces=ens33

######
# KUBERNETES
######
[kube-master]
k8sm01
k8sm02
k8sm03

[etcd]
k8sm01
k8sm02
k8sm03

[kube-node]
k8sc01
k8sc02

[k8s-cluster:children]
kube-master
kube-node

建置 Master 節點

佈署管理節點 (Master Nodes),第一次使用需輸入 ssh(-k) 及 sudo(-K) 密碼

1
ansible-playbook -l kube-master -k -K playbooks/k8s-cluster.yml

運行完成成功畫面,要確認 failed0

確認管理節點皆成功建置完成

1
kubectl get nodes

建置 Compute 節點

佈署計算節點 (Compute Nodes),第一次使用需輸入 ssh(-k) 及 sudo(-K) 密碼

1
ansible-playbook -l k8s-cluster -k -K playbooks/k8s-cluster.yml

運行完成成功畫面,要確認 failed0

設定 Compute 節點的 kubernetes.io/role

1
2
kubectl label --overwrite nodes k8sc01 kubernetes.io/role=compute
kubectl label --overwrite nodes k8sc02 kubernetes.io/role=compute

確認計算節點皆成功建置完成

1
kubectl get nodes

K8s 維護

安裝 Kubernetes Dashboard

創建管理用戶並安裝儀錶板和 token,如日後忘記 token ,同指令可再執行一次即可獲得。

1
sudo bash ./scripts/k8s/deploy_dashboard_user.sh
  • Dashboard: https://< Master Node IP >:31443

安裝 Monitoring

佈署 DCGM、Prometheus 和 Grafana 來監控各節點的資源使用情況

1
sudo bash ./scripts/k8s/deploy_monitoring.sh
  • Grafana: http://< Master Node IP >:30200
  • Prometheus: http://< Master Node IP >:30500
  • Alertmanager: http://< Master Node IP >:30400

增加節點

回到建置設定檔 config/inventory,將新的節點加入後執行以下指令,即可增加節點

1
ansible-playbook -l k8s-cluster -k -K submodules/kubespray/scale.yml

移除節點

將要移除的節點名稱填入,如下範例 (移除 k8sc01 及 k8sc02 兩個節點)

1
ansible-playbook submodules/kubespray/remove-node.yml --extra-vars "node=k8sc01,k8sc02"

升級叢集

TODO

參考資料

  1. DeepOps Github