1. 程式人生 > 程式設計 >啟動、配置、擴容、伸縮、儲存,開普勒雲平臺之使用指南

啟動、配置、擴容、伸縮、儲存,開普勒雲平臺之使用指南

本文從啟動、配置、擴容、伸縮、儲存等方面介紹如何使用開普勒雲平臺。

一、Kplcloud是什麼?

kplcloud是一個基於Kubernetes的輕量級PaaS平臺,通過視覺化的介面對應用進行管理,降低應用容器化的對度,從而減少應用容器化的時間成本。

Kplcloud已在宜信服務於宜人財富等多個團隊,穩定運行了近兩年,目前平臺已在生產環境跑著上百個應用,近千個容器。

一、登陸

登陸可以分為三種,分別是LDAP登陸、郵箱密碼登陸、三方授權登陸,咱們沒有註冊功能。下面對這三種登陸方式進行講解。

LDAP與郵箱登陸大同小異,只需要簡單的配置即可。

1.1 LDAP登陸

在app.cfg檔案找到[server]的login_type引數,設定為 ldap並且找到[ldap]塊

[ldap]
ldap_host = 127.0.0.1
ldap_port = 389
ldap_base = DC=yourdomain,DC=corp
ldap_sseSSL = false
ldap_bindDN = 
ldap_bind_password = 
ldap_user_filter = (userPrincipalName=%s)
ldap_group_filter = (&(objectCategory=Group))
ldap_attr = name;mail

[server]
;auth_login 
login_type = ldap
複製程式碼

輸入你家LDAP的相關資訊即可。

不要設定auth_login,應該把它註釋掉。

1.2 郵箱登陸

在app.cfg檔案找到[server]的login_type引數,設定為 email

[server]
;auth_login 
login_type = ldap
複製程式碼

不要設定auth_login,應該把它註釋掉。

1.3 Github授權登陸

通過Github授權登陸需要的app.cfg將[server]下的 auth_login引數設定為github

Github建立OAuth App

  • 開啟github官網,進入https://github.com/settings/developers, 在左側選單欄找到“OAuth Apps”並點選進入
  • 如果沒有OAuth App則點選“New OAuth App”按鈕建立一個新的OAuth App
  • 建立完成之後 找到我們剛剛建立的OAuth App並進入就可以看到Client ID和Client Secret了
  • 將它們複製下來他貼到app.cfg的[server]塊下的client_id和client_secret

  • 設定好Homepage URL和Authorization callback URL

1.4 授權登陸

上面設定好之後, 就可以使用github授權登陸的方式進入平臺了,預設分配的空間及許可權可以在app.cfg檔案下的[server]塊下的default_namespace和default_role_id配置。

[server]
client_id = balabalabalbabiubiubiu
client_secret = balabalabalbabiubiubiu
auth_login = github
default_namespace = default-app
default_role_id = 4C
複製程式碼

二、Dashboard

2.1 工作臺

工作臺是我們進入之後看到的第一個頁面,主要列出以下一些資訊

  • 使用檔案
  • 建立應用入口
  • 空間CPU及記憶體資源使用情況
  • 你可操作的最新的幾個應用
  • 該空間下最近應用的動態
  • 您可操作的空間列表
  • 您規屬於哪些許可權組列表

2.2 全域性監控

監控只是簡易的叢集網路,記憶體、CPU及語言,詳情的監控可以從grafana檢視。

2.3 上線統計

本模組主要是對一些應用釋出的情況進行一些統計,如應用失敗的應用的次數中斷及回滾的次數,點選應用名稱可以看應用詳情。

三、應用管理

3.1 建立應用

建立一個Java應用

在建立應用之前,首先我們要做的是在你的git專案上將Dockerfile檔案提交上去,並且生成一個Tag或releases版本。

Dockerfile 參考

FROM openjdk:latest

COPY xxxx.jar /opt/app

WORKDIR /opt/app
CMD ["java","xxx.jar"]
複製程式碼

進入建立應用頁面,填寫基本資訊

  • 進入“建立專案”頁面
  • 專案英文名填寫專案的“英文名稱” 名稱的規則: ^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
  • 填寫“專案描述” 可不填
  • 提交資訊,進入第二步

填寫詳細資訊

  • 選擇專案語言Java
  • 專案地址:輸入專案的址 kplcloud/hello 填寫完後會自動獲取專案的tags列表
  • 選擇版本:選擇獲取回來的tags版本
  • POMFILE: pom.xml檔案的路徑
  • 構建路徑:這是Dockerfile放到專案所在的路徑地址
  • 容器數量:啟動的Pods數量
  • 容器規格:該Pods的最大記憶體上限
  • 啟動方式:jar 啟動或 tomcat 啟動
  • Args: 選擇jar 啟動會自動生成簡單的 啟動命令,如果是tomcat 啟動則是其他命令 // 考慮去掉這個選項
  • dubbo 服務: 如果是dubbo服務則勾選,會為其開放20880埠
  • 如果選擇了“增加埠” 會列出埠、協議填寫
  • 埠及協議:如果選擇了則會建立Service進行負載,注意埠名稱的格式,必須是xxx-port,可以新增多個埠,但建議一個應用只啟動一個埠。

提交成功之後會顯示如下頁面,管理就可以在稽核頁面進行部署。

(建立Golang/Python/NodeJs/靜態應用的步驟請參看開原始檔。)

3.2 自定義啟動命令

應用服務啟動可以在多個地方進行調整,以下介紹兩種方案,Dockerfile 和 平臺詳情頁調整

Dockerfile CMD啟動方式

看一下簡單的例子:

FROM hub.kpaas.nsini.com/app/hello:v0.0.3

CMD ["/go/bin/hello"]
複製程式碼

啟動命令寫在CMD這個後面,如果後面有多個引數可以以逗號隔開例如: CMD ["static-web","-path","app","-port",":8080"]

平臺詳情頁調整

開啟應用詳情頁:

在詳情這一選卡上找到“命令,引數”,點右邊的編輯icon,彈出對話方塊進行填寫:

填定啟動的命令和引數,引數用逗號隔開。點提交服務會自動重啟動。

注意:在平臺詳情頁修改的命令會覆蓋掉Dockerfile 下的CMD命令。

3.3 日誌採集

日誌採集配置

在應用詳情頁中間有一個叫作“日誌採集”的模組

點選右邊的“新增”按鈕,在彈出的對話方塊中選擇日誌的路徑及正則規則

  • 檔案路徑:你日誌檔案的位置
  • 日誌規則:如果沒有特殊需求的話預設就好

提交後服務會自動重啟動。

日誌採集

如果配置了上面採集器,那麼它會向服務所在的Pod注入一個Filebeat採集器對應用服務的業務日誌進行採集。把採集到的日誌入到kafka叢集,然後logstash進行訊息處理及格式化。

處理完後入到ES叢集,最終我們就可以通過kibana查詢到我們的業務日誌了。

當然kafka、logstash、es得您自己去搭建。

若您可把這幾個服務跑在Kubernetes可以參考我給您生成的yaml 直接apply 進去就能跑。

模版配置

生成filebeat會用到兩個模版,一個是容器的模版FilebeatContainer,另一個是ConfigMap的模版FilebeatConfigMap,您可根據自己的需求調整相應的模版檔案。

3.4 查詢構建應用日誌

構建應用的流程是通過建立應用提交一些資訊進行處理

  • 從git 倉庫獲取tags列表
  • 呼叫jenkins API 將應用的相關引數及版本資訊傳給它並進行構建
  • Jenkins Job執行Shell命令 執行docker build並上傳致Docker 倉庫
  • 平臺監聽到job已經執行完成併成功了,呼叫kubernetes API更新應用的Image地址
  • 監聽升級情況
  • 傳送通知

以上是構建應用的後端流程,而前端就變得比較簡單了。只需要在應用詳情頁點選"Build"按鈕,在彈出的對話方塊中選擇相應用的tags版本並提交就行了,如下圖:

查詢構建日誌

點選詳情頁的build日誌選項卡,會顯示最近的構建記錄,點選左側相應的版本可以檢視該版本的構建情況,也可以對正在鬆建的應用進行中斷,如下圖:

3.5 切換服務模式

服務模式切換比較麻煩,需要您的Kubernetes支援,目前我們使用的是istio的方案,也就是說您需要在你的kubernetes上安裝istio的相關服務,並且在我們的模版管理將istio所需要的幾個模版配置上。才能開啟此功能。

如果您沒有安裝Istio,可跳過此章。

依賴

在"模版管理"選單找到Gateway、VritualService、InitContainer、IstioProxy這幾個模版,根據自己環境的情況進行調整。

  • Gateway: 本平臺設計的模式是一個Namespace所對應一個Gateway,多個Namespace空間就會有多個Gateway,VirtualService選擇的是本Namespace下的Gateway。
  • VirtualService: 在生成應用的對外訪問入口時與Ingress一起生成。

使用過Istio的同學應該都知道,要實現Istio所提供的相關功能需要在Pods裡注入兩個容器,一個是proxy_init,另一個是proxyv2

  • InitContainer: 模版是是初始化設定的yaml,比如將流量通過 iptables的方式轉發給 proxy
  • IstioProxy: 模版就是將pods的所有流量代理的yaml

流程

下圖是我們架構流量進入到我們容器所圖:

  • DNS 將域名解析到VIP
  • VIP 將80的流量轉發邊緣節點的31380埠(這個是IstioIngressGateway控制器的Service的NodePort)
  • 前面我們所說過每個Namespace都會有至少一個對應的Gateway,Gateway的hosts就是xxx.{namespace}.xxx.com
  • VirtualService裡的destination.host 就是Service的名稱。 以上是kplcloud平臺的流程,如果您有需要調整的,只需要修改模版就好,不需要調整程式碼。

一鍵切換

如下圖,在應用詳情頁面選擇“模式”按鈕,在彈出的對話方塊中選擇"Service Mesh"選專案,後點選提交後Pods會自動重起。

你需要在app.cfg檔案開起ServiceMesh功能

[server]
service_mesh = true
複製程式碼

3.6 擴容

擴容是對Pods的使用資源進行擴容,例如最大使用的CPU及記憶體資源。

在應用的詳情頁面,在右上角找到“擴容”按鈕,並點開。

在彈出的對話方塊中拖動CPU和記憶體,可對其設定一個基礎值及一個最大值,如下圖:

選擇好相應的值後點選“儲存”按鈕後,會重起該應用的所有POD。重啟後的POD可使用的最大CPU及記憶體資源就是您剛剛設定的值。

所對應用以deployment的yaml引數:

requests:
    limits:
        cpu: 1
        memory: 128Mi
    requests:
        cpu: 500m
        memory: 64Mi
複製程式碼

3.7 伸縮

伸縮是對該應用所啟動的pods數量進行一個控制。

同樣進入應用的詳情頁頁,在右上角找到“伸縮”按鈕並點開。

在彈出來的對話方塊中選擇啟動的POD數量,如下圖:

提交之後若數量大於之前的數量,則會啟動缺少的POD數量,若小於之前的值,將會逐步減少應用的POD。

目前給的最大值是8個pod,資源可使用的記憶體是16G,若您的應用超過我們所設定的最大值。想辦法優化吧,64核128G記憶體都不夠用,這種級別的應用不適合用Docker。

這種級別的應用最好是拆了吧。

3.8 掛載持久化儲存卷

本平臺是通過storageclass來動態建立PV。也就是說咱們依賴於storageclass,如果您的Kubernetes不支援相應的儲存試,將無法非常方便的進行掛載。

目前暫不支援掛載多個PVC,或許以後會更新吧。

這裡演示的是用的NFS進行演示,實際使用時可根據自己的需求配置相應的provisioner,其他配置是一樣的不需要調整,只需要在“模版管理” 調整StorageClass和PersistentVolumeClaim模版。

建立持久化儲存卷宣告

在選單找到“配置與儲存”->"持久化儲存卷宣告"。

選擇應用的空間,並點選“建立”按鈕

在彈出的對話方塊中會有幾個選專案:

  • 名稱:儲存卷的名稱(規則: ^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)
  • 容量:可以使用的儲存區大小,最小單位Mi,最大Ti
  • 訪問模式:
    • ReadWriteOnce——該卷可以被單個節點以讀/寫模式掛載
    • ReadOnlyMany——該卷可以被多個節點以只讀模式掛載
    • ReadWriteMany——該卷可以被多個節點以讀/寫模式掛載
  • 儲存類:如果沒有儲存類請檢視建立儲存類

掛載到應用目錄

當儲存卷建立好之後就可以在應用進行掛載了。

同樣的進入應用詳情頁面,找到“持久化儲存”選項卡,如圖:

點選“新增”按鈕,在彈出來的對話方塊加輸入相關資訊:

  • 持久化儲存路徑:該路徑為容器裡的掛載路徑
  • 持久化儲存卷宣告:這裡會列出您可以使用的儲存卷

填寫好路徑及選擇好儲存卷後點選提交,改應用的所有POD的逐步重啟動。

掛載完成之後可以看到所掛載的相關資訊:

最終生成的yaml結果:

volumes:
- name: soup-hello-pvc
  persistentVolumeClaim:
    claimName: test-data
containers:
- volumeMounts: 
  - name: "soup-hello-pvc"
    mountPath: "/soupzhang"
複製程式碼

四、應用稽核部署

如果配置了郵箱,使用者提交稽核之後會給管理員傳送郵件,郵件裡帶有稽核地址。

或者您也可以在應用列表裡找到未稽核的應用進入。

4.1 稽核應用

提交的基礎資訊

生成的kubernetes yaml

程式碼庫中的Dockerfile檔案

駁回

如果管理員覺得提交的有問題,可以進行駁回,駁回填定理由會傳送至提交者的郵箱。

若沒有啥問題,可以點選“開始部署”按鈕。

開始部署之後應用會自動在jenkins上建立一個job,並自動進行build。

五、調整容器時間

在我們專案維護過程中,可能會遇到需要修改伺服器時間,平臺的工具集功能就可以滿足您的需求了~

在這需要注意,此功能依賴faketime,請在宿主機編譯faketime擴充套件。路徑在 /usr/local/lib/libfaketime.so.1

調整服務時間(選單欄:工具集->調整時間)

在專案列表中篩選您要修改的專案,點選 修改時間,確認之後會重啟服務生效。

開源地址:

作者:宜人金科-財富技術部-創新團隊

來源:宜信技術學院