360Kubernetes 管理平臺

Wayne 是什麼?

Wayne 是一個通用的、基於 Web 的 Kubernetes 多集群管理平臺。通過可視化 Kubernetes 對象模板編輯的方式,降低業務接入成本, 擁有完整的權限管理系統,適應多租戶場景,是一款適合企業級集群使用的發佈平臺。

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

命名的起源:360 搜索私有云團隊多數項目命名都來源於 DC 漫畫的角色,Wayne 也不例外,Wayne 是聲名顯赫的超級英雄蝙蝠俠 Bruce Wayne 的名字。

360Kubernetes 管理平臺

架構圖

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

360Kubernetes 管理平臺

Features

  • 基於 RBAC(Role based access control)的權限管理:用戶通過角色與部門和項目關聯,擁有部門角色允許操作部門資源,擁有項目角色允許操作項目資源,更加適合多租戶場景。
  • 簡化 k8s 對象創建:提供基礎 k8s 對象配置文件添加方式,同時支持高級模式直接編輯 Json/Yaml文件創建 k8s 對象。
  • LDAP/OAuth 2.0/DB 多種登錄模式支持:集成企業級 LDAP 登錄及 DB 登錄模式,同時還可以實現 OAuth2 登錄。
  • 支持多集群、多租戶:可以同時管理多個 Kubernetes 集群,並針對性添加特定配置,更方便的多集群、多租戶管理。
  • 提供完整審計模塊:每次操作都會有完整的審計功能,追蹤用於操作歷史,同時支持用戶自定義 webhook。
  • 提供基於 APIKey 的開放接口調用:用戶可自主申請相關 APIKey 並管理自己的部門和項目,運維人員也可以申請全局 APIKey 進行特定資源的全局管理。
  • 保留完整的發佈歷史:用戶可以便捷的找到任何一次歷史發佈,並可輕鬆進行回滾,以及基於特定歷史版本更新 k8s 資源。
  • 具備完善的資源報表:用戶可以輕鬆獲取各項目的資源使用佔比和歷史上線頻次(天級)以及其他基礎數據的報表和圖表。
  • 提供基於嚴密權限校驗的 web shell:用戶可以通過 web shell 的形式進入發佈的 Pod 進行操作,自帶完整的權限校驗。
  • 提供站內通知系統:方便管理員推送集群、業務通知和故障處理報告等。

組件

  • Web UI: 提供完整的業務開發和平臺運維功能體驗。
  • Worker: 擴展一系列基於消息隊列的功能,例如 audit 和 webhook 等審計組件。

文檔

Wayne文檔包含以下三類文檔:

  • 概述:包含 Wayne 的整體介紹,幷包含本項目開發、部署、發版等流程規範和約定,供 Wayne 開發者使用。
  • 管理員後臺指南:指導 kubernetes 集群運維團隊將線上集群和 Wayne 集成起來,並介紹相關管理功能。
  • 業務維護者(開發/運維/測試工程師等)使用指南: 指導上雲業務開發者如何使用 Wayne 部署自己開發的業務到 kubernetes 集群中。

使用Kubernetes部署

生產環境中推薦使用 kubernetes 部署

克隆代碼倉庫

$ go get github.com/Qihoo360/wayne

安裝依賴環境(可選)

Wayne 依賴 MySQL 和 RabbitMQ,其中 MySQL 是必須的服務,用戶存儲系統的各種數據,RabbitMQ 是可選的,主要用戶擴展審計功能使用。

$ kubectl apply -f hack/kubernetes/dependency

數據未進行持久化,生產環境一定要做數據持久化,避免數據丟失

數據庫初始化

  • 自動初始化(推薦)

Wayne啟動會自動創建數據庫並初始化數據,使用自動初始化數據庫的方式請勿手動創建數據庫,否則系統檢測到數據庫已存在會跳過數據初始化步驟!

  • 手動初始化

如果您的環境不允許自動創建數據庫,可以使用手動初始化數據的方式。

1.創建數據庫

CREATE DATABASE `wayne` CHARACTER SET utf8 COLLATE utf8_general_ci;

2.生成創建表結構sql

make sqlall

生成文件在 _dev/wayne.sql

3.生成數據庫初始化sql

make initdata

生成文件在 _dev/wayne-data.sql

配置Configmap

在 hack/kubernetes/wayne/configmap.yaml中按照配置文檔配置好相關的信息(例如數據庫鏈接等信息)

如果使用的是hack/kubernetes/dependency中啟動的MySQL 和 RabbitMQ 服務,可以暫時不修改配置文件。默認配置文件中通過集群內部域名訪問MySQL 和 RabbitMQ。

啟動Wayne

$ kubectl apply -f hack/kubernetes/wayne

現在可以通過 http://yourip:NodePort 訪問Wayne平臺,默認管理員賬號 admin:admin。

由於前後端使用 JWT Token 通信,生產環境一定要重新生成 RSA 文件,確保安全。生成 rsa 加密對命令如下:

$ ssh-keygen -t rsa -b 2048 -f jwtRS256.key
$ # Don't add passphrase
$ openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub

配置集群

參考集群配置配置好 Kubernetes 集群訪問信息。

創建集群

後臺點擊集群列表-> 創建集群

創建集群字段說明:

  • 名稱:集群名稱,英文簡寫,後續會使用此名稱作為集群調用參數,例如 K8S
  • Master : Kubernetes Apiserver 地址
  • kubeConfig: 鏈接 Apiserver 的配置文件。配置示例:
kind: Config
apiVersion: v1
preferences: {}
clusters:
- name: k8s-dev

cluster:
server: 'https://10.10.10.10'
certificate-authority-data: base64encode
users:
- name: admin
user:
client-certificate-data: base64encode
client-key-data: base64encode
contexts:
- name: k8s-dev-context
context:
cluster: k8s-dev
user: admin
namespace: default
current-context: k8s-dev-context

參考 Kubernetes 文檔(https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)

  • 集群狀態:目前有兩種狀態,在線和維護中。集群需要臨時維護時,可以把集群狀態設置為維護中,避免用戶誤操作影響維護中的集群。
  • MetaData:集群元數據(可選)

配置示例

# 可選 
# 由於當前 Wayne 並沒有完全管理 Kubernetes 資源(後續會完全管理 Kubernetes 資源),系統集成了 Kubernetes Dashboard 方便查看 Kubernetes 資源。
# 此地址 schema 必須與平臺一致,例如平臺使用 https 部署,則 kubernetesDashboard 地址也必須為 https
kubernetesDashboard: 'http://10.10.10.10'
# 可選
# 如果配置了此選項,則當前集群創建 PV 時如果類型為 RBD 會自動替換此配置,避免了每次重複填寫 rbd 配置

rbd:
monitors:
- '10.10.10.10:6789'
fsType: xfs
pool: k8s_pool
user: xxx
keyring: xxx
# 可選。
# 如果配置了此選項,則當前集群創建 PV 時如果類型為 cephfs 會自動替換此配置,避免了每次重複填寫 cephfs 配置
cephfs:
monitors:
- 10.10.10.10
user: xxx
secret: xxx
# 可選。
# env:默認增加的環境變量,默認為所有容器添加默認環境變量,如 IDC 等信息。
env:
- name: WAYNE_IDC
value: k8s
# 可選。
# imagePullSecrets:默認增加的拉取鏡像 Secret,如果是從私有倉庫拉取鏡像並且需要拉取權限,可以配置此選項。
imagePullSecrets:
- name: wayne.cloud-secret

配置 Namespace 可訪問集群

必須配置Namespace可訪問集群才可在前臺創建相關的資源。

命名空間配置主要說明如何在 Wayne 平臺上創建和管理命名空間。 由於 Namespace 可訪問集群需在後臺配置後前臺才可使用相應的集群,因此必須先配置 Namespace 的集群才可在前臺創建相關的資源。

創建命名空間

後臺點擊命名空間列表-> 創建命名空間

360Kubernetes 管理平臺

創建命名空間字段說明:

  • 名稱:必填,命名空間名稱。英文中劃線分隔。
  • K8S 命名空間 :必填,對應的 Kubernetes 中 Namespace,如果Kubernetes中沒有相應的 Namespace, 需手動在Kubernetes集群中創建改Namespace。
  • 可用機房:必填,該 Namespace 可以使用的機房。該 Namespace 下的用戶僅可以看到已設置的機房。CPU (核)和內存(G)表示當前 Namespace 最多可使用的資源,0代表無限制。
  • 環境變量配置: 可選,默認增加的環境變量,默認為所有容器添加默認環境變量。會覆蓋集群中配置的 env
  • ImagePullSecrets:可選,默認增加的拉取鏡像 Secret,如果是從私有倉庫拉取鏡像並且需要拉取權限,可以配置此選項。會覆蓋集群中配置的 imagePullSecrets


分享到:


相關文章: