Wayne 是什么?
Wayne 是一个通用的、基于 Web 的 Kubernetes 多集群管理平台。通过可视化 Kubernetes 对象模板编辑的方式,降低业务接入成本, 拥有完整的权限管理系统,适应多租户场景,是一款适合企业级集群使用的发布平台。
Wayne已大规模服务于360搜索,承载了内部绝大部分业务,稳定管理了近千个业务,上万个容器,运行了两年多时间,经受住了生产的考验。
命名的起源:360 搜索私有云团队多数项目命名都来源于 DC 漫画的角色,Wayne 也不例外,Wayne 是声名显赫的超级英雄蝙蝠侠 Bruce Wayne 的名字。
架构图
整体采用前后端分离的方案,其中前端采用 Angular 框架进行数据交互和展示,使用Ace编辑器进行 Kubernetes 资源模版编辑。后端采用 Beego 框架做数据接口处理,使用 Client-go 与 Kubernetes 进行交互,数据使用 MySQL 存储。
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 集群访问信息。
创建集群
后台点击集群列表-> 创建集群
创建集群字段说明:
名称:集群名称,英文简写,后续会使用此名称作为集群调用参数,例如 K8SMaster : Kubernetes Apiserver 地址kubeConfig: 链接 Apiserver 的配置文件。配置示例:kind: ConfigapiVersion: v1preferences: {}clusters: - name: k8s-dev cluster: server: 'https://10.10.10.10' certificate-authority-data: base64encodeusers: - name: admin user: client-certificate-data: base64encode client-key-data: base64encodecontexts: - name: k8s-dev-context context: cluster: k8s-dev user: admin namespace: defaultcurrent-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 地址也必须为 httpskubernetesDashboard: '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 的集群才可在前台创建相关的资源。
创建命名空间
后台点击命名空间列表-> 创建命名空间
创建命名空间字段说明:
名称:必填,命名空间名称。英文中划线分隔。K8S 命名空间 :必填,对应的 Kubernetes 中 Namespace,如果Kubernetes中没有相应的 Namespace, 需手动在Kubernetes集群中创建改Namespace。可用机房:必填,该 Namespace 可以使用的机房。该 Namespace 下的用户仅可以看到已设置的机房。CPU (核)和内存(G)表示当前 Namespace 最多可使用的资源,0代表无限制。环境变量配置: 可选,默认增加的环境变量,默认为所有容器添加默认环境变量。会覆盖集群中配置的 envImagePullSecrets:可选,默认增加的拉取镜像 Secret,如果是从私有仓库拉取镜像并且需要拉取权限,可以配置此选项。会覆盖集群中配置的 imagePullSecrets