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


分享到:


相關文章: