本文從啟動、配置、擴容、伸縮、存儲等方面介紹如何使用開普勒雲平台。
一、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
- 授權登陸需要使用者把 https://github.com/settings/profile Public Email 設定上,否則無法授權成功
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
- 項目位址:輸入項目的址
填寫完後會自動擷取項目的tags清單kplcloud/hello
- 選擇版本:選擇擷取回來的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
調整服務時間(菜單欄:工具集->調整時間)
在項目清單中篩選您要修改的項目,點選 修改時間,确認之後會重新開機服務生效。
開源位址:
- Github: https://github.com/kplcloud/kplcloud
- Document: https://docs.nsini.com
- Demo: https://kplcloud.nsini.com
作者:宜人金科-财富技術部-創新團隊
來源:宜信技術學院