SAS Viya (52)

教學目標

在 AWS 雲端平台中以 Kubernetes 容器叢集中部署 SAS Viya 3.4 平台的心得分享。

重點概念

首先我們在企業中部署 SAS Viya 3.4 平台,除了透過 Ansible 工具進行部署之外,當然我們還能夠透過 Docker 和 Kubernetes 進行部署。其中 Docker 部署的部份僅需要按照官方文件的步驟,就能夠順利完成,請注意 Docker 映像檔 (sas-viya-programming)、金鑰檔案 (license.sas) 和特定資料夾 (sasinside、sasdemo 和 cas) 是否已經建立就沒有太大的問題,當 Docker 部署完成之後僅能夠提供給程式設計師和資料科學家進行 SAS Studio 網站透過 SAS 程式碼完成機器學習的應用,至於能夠做到哪些機器學習的應用,請申請免費試用 SAS® ANALYTICS CLOUD 雲端服務,其中就有針對銀行資料進行機器學習演算法的分析應用教學。然而商業分析師和管理階層則會需要查看報表和更多視覺化非程式碼的業務需求等相關應用,此時僅以 Docker 部署是無法滿足業務需求,因此我們就需要透過 Kubernetes 進行完整部署,本篇主要則是針就以在 AWS 環境透過 kops 工具進行 SAS Viya 3.4 的叢集容器部署。

目前官方文件針對 Kubernetes 部署並沒有詳細步驟,僅有關鍵的重點概念,因此我們需要透過 SAS Software Github 上的 SAS Viya Container Recipes 進行部署,請先透過「git clone」指令下載至執行 Kubernetes 指令客戶端,若是以 AWS 雲端服務中的 EC2 伺服器為客戶端時,若發生「permission denied (publickey)」錯誤訊息,則需要將 EC2 伺服器中登入使用者的 SSH 連線公開金鑰檔「.ssh/id_rsa.pub」內容手動設定至登入的 Github 帳號中,若還是有問題則新增使用者執行「ssh-keygen」重新產生 SSH 連線公開金鑰檔試試。當我們下載 SAS Viya Container Recipes 相關檔案至「/sas-container-recipes」目錄之後,下一步我們必須準備 SAS Viya 3.4 的軟體信件取得 SAS_Viya_deployment_data.zip 檔案,並且上傳至「/sas-container-recipes」目錄中。

下載 SAS Viya Container Recipes 相關檔案

1
$ git clone git@github.com:sassoftware/sas-container-recipes.git

上傳 SAS_Viya_deployment_data.zip 檔案

1
$ cp /tmp/SAS_Viya_deployment_data.zip /sas-container-recipes

接著我們需要註冊 Docker Hub,主要會將建立的多個倉庫 上傳至 Docker Hub 中,當然我們必須安裝 Docker CE 工具才能夠透過腳本指令碼以 SAS_Viya_deployment_data.zip 建立多個倉庫,此時可能會遇到透過 ansible-container 自動化工具無法正常 Push 至 Docker Hub 倉庫的問題,此時我們僅需要修改「/sas-container-recipes/viya-visuals/viya-visuals-build.sh」腳本指令檔中的「ansible-container push —push-to docker-registry —username —password —tag ${SAS_DOCKER_TAG}」指令就能夠解決此問題。

安裝 Docker CE 工具

1
2
3
4
5
6
7
$ sudo su -
$ sudo yum install http://vault.centos.org/centos/7.3.1611/extras/x86_64/Packages/container-selinux-2.9-4.el7.noarch.rpm
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install epel-release
$ sudo yum install docker-ce
$ systemctl restart docker
$ docker -v

建立多個倉庫

1
2
3
4
$ cd /sas-container-recipes
$ docker login
$ chmod +x build.sh
$ ./build.sh --type full --docker-registry-namespace <Docker Hub 使用者 ID>/sas-viya --docker-registry-url docker.io --zip SAS_Viya_deployment_data.zip

再來我們需要透過「aws」工具、「kops」工具和「kubectl」工具在 AWS 雲端環境中搭配 IAM、S3、Route53、EC2 和 ELB 服務建立符合 Kubernetes 操作的環境平台。此時需要在 IAM 建立 kops 帳號,並且取得 Access Token 和 Access Token Secret 以利「aws」工具進行 AWS 服務相關資源的存取,並且在 S3 中建立 Bucket,同時設定 kops 帳號擁有存取的權限,以及購買與設定網域,透過 Route53 購買「.com」網域一年僅需12 美元,購買之後 Route53 就會自動註冊網域,但若是從 GoDaddy 其它網站購買網域,則需要手動設定網域,至於 EC2 則是透過「kops」工具自動進行建立,而 ELB 則是透過「kubectl」工具自動進行建立。

最後當 AWS 環境準備完成之後,我們就能夠按照以下步驟透過指令以 Kubernetes 容器叢集建立 SAS Viya MPP 的完整部署,主要步驟分別為:

  1. 登入 AWS 取得存取權限
  2. 安裝與測試 kops 工具
  3. 安裝與測試 kubectl 工具
  4. 建立 Kubernetes 容器叢集
  5. 更新 Kubernetes 容器叢集
  6. 驗證 Kubernetes 容器叢集
  7. 取得 Kubernetes 容器叢集中的 Node 狀態
  8. 建立 Kubernetes 容器叢集專用的 ELB 負載平衡服務
  9. 取得 Kubernetes 容器叢集中的 Services 狀態
  10. 取得 sasboot 管理者帳號的重設密碼之網站連結

登入 AWS 取得存取權限

1
$ aws configure

安裝與測試 kops 工具

1
2
3
4
$ wget https://github.com/kubernetes/kops/releases/download/1.10.0/kops-linux-amd64
$ chmod +x kops-linux-amd64
$ mv kops-linux-amd64 /usr/local/bin/kops
$ kops

安裝與測試 kubectl 工具

1
2
3
$ curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.11.5/2018-12-06/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ kubectl

建立 Kubernetes 容器叢集

1
$ kops create cluster --name=<叢集名稱>  --state=s3://<S3 儲存桶名稱>  --zones=us-east-1d  --master-size=<EC2 實體類型>  --node-size=<EC2 實體類型>  --node-count=2  --dns-zone=<網域名稱>

更新 Kubernetes 容器叢集

1
$ kops update cluster <叢集名稱> --state=s3://<S3 儲存桶名稱> --yes

驗證 Kubernetes 容器叢集

1
$ kops validate cluster <叢集名稱> --state=s3://<S3 儲存桶名稱>

取得 Kubernetes 容器叢集中的 Node 狀態

1
$ kubectl get nodes

部署 SAS Viya 服務至 Kubernetes 容器叢集

1
2
3
4
$ cd /sas-container-recipes
$ kubectl create -f viya-visuals/working/manifests/kubernetes/configmaps/
$ kubectl create -f viya-visuals/working/manifests/kubernetes/secrets/
$ kubectl create -f viya-visuals/working/manifests/kubernetes/deployments-mpp/

取得 Kubernetes 容器叢集中的 Pod 狀態

1
$ kubectl get pods

建立 Kubernetes 容器叢集專用的 ELB 負載平衡服務

1
$ vi sas-viya-visual.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: Service
metadata:
name: sas-viya-visual
spec:
selector:
app: sas-viya-httpproxy
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
type: LoadBalancer
1
$ kubectl create -f sas-viya-visual.yml

取得 Kubernetes 容器叢集中的 Services 狀態

1
$ kubectl get svc

取得 sasboot 管理者帳號的重設密碼之網站連結

1
2
3
$ kubectl get pods
$ kubectl exec -it <sas-viya-coreservices 之 Pod 名稱> -- /bin/bash
$ grep sasboot `ls -tr /opt/sas/viya/config/var/log/saslogon/default/sas-saslogon_* | tail -n 1`

總結當我們建立 Docker Hub 倉庫之後,每次若要以 Kubernetes 容器叢集部署 SAS Viya 服務,不包括拉下 Docker 映像檔,則僅需要半小時就能夠完成部署,當然我們更能夠透過「kops」工具快速刪除 Kubernetes 容器叢集,以節省 AWS 雲端服務的測試成本,至於有關更多進階的設定,像是 LDAP 設定、SAS Studio 登入、SAS/ACCESS 存取、…,之後有空再進行心得分享。

刪除 Kubernetes 容器叢集

1
$ kops delete cluster --name=<叢集名稱> --state=s3://<S3 儲存桶名稱> --yes

相關資源