天天看點

Wayne - 360開源多租戶K8S管理平台(介紹和安裝)

Wayne - 360開源多租戶K8S管理平台(介紹和安裝)

Wayne是筆者無意之間刷文章了解到的,簡單使用之後發現能解決目前眼下諸多問題,出于推動公司容器化程序的原因選擇開始使用,目前所有環境都已經在使用中。借助官方的介紹Wayne 是一個通用的、基于 Web 的 Kubernetes 多叢集管理平台。通過可視化 Kubernetes 對象模闆編輯的方式,降低業務接入成本,擁有完整的權限管理系統,适應多租戶場景,是一款适合企業級叢集使用的釋出平台。

附上:

喵了個咪的部落格:

w-blog.cn

wayne官方Git位址:

https://github.com/Qihoo360/wayne/blob/master/README-CN.md

PS:目前最新版本 v1.8.6,官方暫時不支援版本更新能力,不要輕易嘗試版本更新;

Wayne 已大規模服務于 360 搜尋,承載了内部絕大部分業務,穩定管理了近千個業務,上萬個容器,運作了兩年多時間,經受住了生産的考驗。

一、Wayne介紹

要引入任何一個工具首先需要看到問題,如果盲目的引入工具提出要求,有時候不但達不到效果還增加了研發成本。

當時筆者在公司推動容器化陷入了一個僵局,環境都已經準備好了,但是有很多遺留的包袱需要遷移裡面就涉及到如下的難點了:

  • 基礎yaml檔案難以管理,之前使用git維護不便/更新遲滞
  • 開發水準不一,編寫yaml檔案經常出現各種問題
  • 開發環境需要排查問題登入容器shell,需要檢視日志
  • 使用K8S-Dashbord權限無法把控,開發人員會不小心删除了别人内容
  • 強制資源限制,避免開發使用資源過度,優化不足
  • 和CI/CD對接,自動化更新不依賴于kubectl避免控制權洩露
  • 測試/內建/預發/生産,多環境管理難,原生Dashbord使用繁瑣

當面臨到一定規模的容器化場景都會多多少少遇到這些問題,估計360也是遇到了這些問題但是并沒有特别好的解決方案才開發了這套系統。

多租戶隔離支援LDAP,完備權限體系,命名空間 -> 項目 -> 資源

我們已團隊建設出多個命名空間對應K8S的命名空間,項目作為團隊内部的項目分組,在到對應不同的資源

Wayne - 360開源多租戶K8S管理平台(介紹和安裝)
Wayne - 360開源多租戶K8S管理平台(介紹和安裝)
Wayne - 360開源多租戶K8S管理平台(介紹和安裝)

PS:這裡推薦兩種區分環境的方法:

一種是多環境綁定在一起,通過部署名稱來區分環境,并且分離測試內建(開發自助)和預發生産(運維管理)Wayne執行個體,保障不越權,避免誤操作(推薦);

另外一種就是全部運維管理,通過一套模闆控制所有環境;

基于獨立資料庫的Yaml配置存儲,強制資源限制

Wayne - 360開源多租戶K8S管理平台(介紹和安裝)
Wayne - 360開源多租戶K8S管理平台(介紹和安裝)

OpenApi+Token校驗機制提供足夠靈活性

Wayne - 360開源多租戶K8S管理平台(介紹和安裝)
Wayne - 360開源多租戶K8S管理平台(介紹和安裝)

支援多叢集同時管理,線上WebShell+日志檢視能力

Wayne - 360開源多租戶K8S管理平台(介紹和安裝)
Wayne - 360開源多租戶K8S管理平台(介紹和安裝)

Wayne架構圖

Wayne整體采用前後端分離的方案,其中前端采用 Angular 架構進行資料互動和展示,使用 Ace 編輯器進行 Kubernetes 資源模版編輯。後端采用 Beego 架構做資料接口處理,使用 Client-go 與 Kubernetes 進行互動,資料使用 MySQL 存儲。

Wayne - 360開源多租戶K8S管理平台(介紹和安裝)

二、Wayne安裝

需要準備好 docker 環境 和 docker-compose 可以參考筆者之前的文章:

git clone https://github.com/Qihoo360/wayne.git
cd wayne/hack/docker-compose           

配置檔案修改

wayne分為兩個元件 wayne-backend 和 wayne-frontend

  • wayne-backend:主要API
  • wayne-frontend:WEB界面

鎖定版本,如果使用latest可能會遇到版本更新導緻的不相容,最新版本 v1.8.6 上一穩定版本 v1.7.1都可以選擇

vim docker-compose.yaml

image: 360cloud/wayne-backend:v1.8.6
image: 360cloud/wayne-frontend:v1.8.6           

Wayne采用前後端分離方式,如果需要在内網或外網通路wayne系統需要通路位址配置,本地測試可以先用localhost

vim conf/config.js

window.CONFIG = {
    URL: 'http://yourip:8080',
    RAVEN: false,
    RAVEN_DSN: 'RAVEN_DSN'
};
           

運作程式

docker-compose up -d 

Creating docker-compose_mysql_1 ... done
Creating docker-compose_wayne-backend_1 ... done
Creating docker-compose_wayne-frontend_1 ... done           

通路

http://localhost:4200/

即可,預設使用者名密碼admin:

Wayne - 360開源多租戶K8S管理平台(介紹和安裝)

配置獨立Mysql運作

一般來說我們會使用獨立mysql來存儲中繼資料保障資料的穩定,如果Wayne丢失了資料庫回複會非常的麻煩

删除配置檔案中的mysql和 link

vim docker-compose.yaml

  mysql:
    image: mysql:5.6.41
    environment:
      MYSQL_ROOT_PASSWORD: "root"
    networks:
    - default
    expose:
    - "3306"
    ports:
    - "3306:3306"
  rabbitmq:
    environment:
      RABBITMQ_NODENAME: "rabbit"
      RABBITMQ_DEFAULT_USER: "guest"
      RABBITMQ_DEFAULT_PASS: "guest"
    image: rabbitmq:3.7.8-management
    networks:
    - default
    expose:
    - "5672"
    ports:
    - "5672:5672"

    depends_on:
    - mysql

           

修改配置檔案

vim conf/app.conf

# database configuration:
## mysql
DBName = "wayne"
DBTns = "tcp(mysql:3306)"
DBUser = "root"
DBPasswd = "root"
DBLoc = "Asia%2FShanghai"
DBConnTTL = 30
           

OAuth2 OR LDAP

vim conf/app.conf

# oauth2
[auth.oauth2]
enabled = false
redirect_url = "https://www.wayne.cloud"
client_id = client
client_secret = secret
auth_url = https://example.com/oauth2/v1/authorize
token_url = https://example.com/oauth2/v1/token
api_url = https://example.com/oauth2/v1/userinfo
# If your OAuth 2.0-based authorization service does not have email, name, and dispaly fields, use mapping criteria.
api_mapping = name:name,email:email,display:display

# ldap config
# enable ldap login
[auth.ldap]
enabled = false
ldap_url = ldap://127.0.0.1
ldap_search_dn = "cn=admin,dc=example,dc=com"
ldap_search_password = admin
ldap_base_dn = "dc=example,dc=com"
ldap_filter =
ldap_uid = cn
ldap_scope = 2
ldap_connection_timeout = 30