├── .gitignore ├── LICENSE ├── README.md ├── docs ├── about │ └── changelog.md ├── concept.md ├── css │ └── extra.css ├── dev │ ├── dev_manual.md │ └── rest_api.md ├── faq.md ├── img │ ├── KubeOperator-icon.png │ ├── KubeOperator-mixed-arch.png │ ├── components.jpg │ ├── dashboard.png │ ├── dev │ │ ├── swagger-1.png │ │ └── swagger-2.png │ ├── faq │ │ ├── harbor-externalurl.jpg │ │ ├── harbor-nodeport.jpg │ │ ├── harbor-tls.jpg │ │ ├── overview.png │ │ └── what-is-ko.png │ ├── favicon.png │ ├── guidelines │ │ ├── argocd │ │ │ ├── argocd-1.png │ │ │ ├── argocd-2.png │ │ │ ├── argocd-3.png │ │ │ ├── argocd-4.png │ │ │ ├── argocd-deploy05.png │ │ │ ├── argocd-deploy06.png │ │ │ ├── argocd-deploy07.png │ │ │ ├── argocd-deploy08.png │ │ │ ├── argocd-deploy09.png │ │ │ ├── argocd-deploy10.png │ │ │ ├── argocd-deploy11.png │ │ │ ├── argocd-deploy12.png │ │ │ ├── argocd-deploy13.png │ │ │ ├── argocd-deploy14.png │ │ │ ├── argocd-deploy15.png │ │ │ └── argocd-deploy16.png │ │ └── kubeapps │ │ │ ├── gitlab-1.png │ │ │ ├── gitlab-2.png │ │ │ ├── gitlab-3.png │ │ │ ├── gitlab-4.png │ │ │ ├── kubeapps-1.png │ │ │ ├── kubeapps-2.png │ │ │ ├── kubeapps-3.png │ │ │ ├── kubeapps-4.png │ │ │ └── kubeapps-5.png │ ├── ko-region.png │ ├── kubeoperator-white.png │ ├── kubeoperator.jpeg │ ├── region.png │ ├── tutorial │ │ └── vmware.png │ └── user_manual │ │ ├── backup_account │ │ ├── backup-1.png │ │ └── backup-2.png │ │ ├── cluster │ │ ├── cis-scan.png │ │ ├── cluster-backup-1.png │ │ ├── cluster-backup-2.png │ │ ├── cluster-diagnosis.png │ │ ├── cluster-events.png │ │ ├── cluster-import.png │ │ ├── cluster-remove.png │ │ ├── cluster-upgrade.png │ │ ├── deploy-1.png │ │ ├── deploy-2.png │ │ ├── deploy-3.png │ │ ├── deploy-4.png │ │ ├── deploy-5.png │ │ ├── deploy-hosts.png │ │ ├── deploy-log.png │ │ ├── deploy-plan.png │ │ ├── deploy-review.png │ │ ├── istio-1.png │ │ ├── logging-1.png │ │ ├── monitor-1.png │ │ ├── namespace-1.png │ │ ├── node-1.png │ │ ├── node-2.png │ │ ├── node-3.png │ │ ├── node-4.png │ │ ├── node-cordon.png │ │ ├── node-detail.png │ │ ├── overview-1.png │ │ ├── overview-2.png │ │ ├── storage-1.png │ │ └── tools-1.png │ │ ├── hosts │ │ ├── host-add.png │ │ ├── host-detail.png │ │ ├── host-edit.png │ │ ├── host-import-excel.png │ │ ├── host-import.png │ │ ├── host-list.png │ │ └── host-refresh.png │ │ ├── plan │ │ ├── custom-templates.png │ │ ├── ip-pool-add.png │ │ ├── ip-pool-list.png │ │ ├── ip-pool-use.png │ │ ├── plan-1.png │ │ ├── region-1.png │ │ ├── template-fusioncompute.png │ │ ├── template-openstack.png │ │ ├── template-upload.png │ │ ├── template-vsphere.png │ │ ├── virtual-config-list.png │ │ └── zone-1.png │ │ ├── project │ │ ├── project-3.png │ │ ├── project-5.png │ │ ├── project-dashboard.png │ │ └── project-list.png │ │ ├── system_log │ │ └── system-log.png │ │ ├── system_management │ │ ├── key-1.png │ │ ├── key-2.png │ │ ├── ntp.png │ │ └── registry.png │ │ ├── user_management │ │ └── user-1.png │ │ └── version │ │ ├── version-1.png │ │ └── version-2.png ├── index.md ├── installation │ └── install.md ├── quick_start │ ├── cluster_deployment.md │ ├── cluster_import.md │ ├── cluster_planning │ │ ├── automatic.md │ │ └── manual.md │ └── system_settings.md ├── system_arch.md └── user_manual │ ├── argocd.md │ ├── backup_account.md │ ├── cluster.md │ ├── hosts.md │ ├── kubeapps.md │ ├── plan.md │ ├── project.md │ ├── system_log.md │ ├── system_management.md │ ├── user_management.md │ └── version.md ├── mkdocs.yml ├── readthedocs.yml ├── requirements └── requirements.txt └── theme ├── .icons └── Bilibili_Logo_Blue.svg ├── css ├── f2c-header.css └── lightgallery.min.css ├── f2c-header.html ├── fonts ├── lg.svg ├── lg.ttf └── lg.woff ├── img ├── loading.gif └── logo │ ├── banner-nav-CloudExplorer.svg │ ├── banner-nav-DataEase.svg │ ├── banner-nav-FIT2CLOUD.svg │ ├── banner-nav-JumpServer.svg │ ├── banner-nav-KubeOperator.svg │ ├── banner-nav-MeterSphere.svg │ ├── logo-dark-MeterSphere.svg │ ├── logo-light-FIT2CLOUD.svg │ └── logo-light-MeterSphere.svg ├── js ├── jquery-3.5.1.min.js ├── lightgallery.min.js └── mega.js └── main.html /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/* 2 | .DS_Store 3 | site/ 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Python3](https://img.shields.io/badge/python-3.8-green.svg?style=plastic)](https://www.python.org/) 2 | 3 | 本仓库保存了 [KubeOperator 项目]() 的 [官方文档](https://kubeoperator.io/docs/),该文档使用 [MkDocs]() 文档框架下的 [Material for MkDocs]() 主题进行构建。 4 | 5 | ## 本地开发 6 | 7 | ### 克隆本仓库 8 | ```bash 9 | git clone https://github.com/KubeOperator/docs.git 10 | ``` 11 | 12 | ### 安装依赖 13 | ```bash 14 | cd docs 15 | pip install -r requirements/requirements.txt 16 | ``` 17 | 18 | ### 修改文档内容 19 | 20 | 本文档的文档结构定义在 `mkdocs.yml` 文件中,文档的具体内容均在 `docs` 目录中。 21 | 22 | 文档内容使用 markdown 语法编写,若要添加新的文档,需要先在 `mkdocs.yml` 文件中的 `nav` 部分增加对应章节导航。 23 | 24 | ### 本地调试文档 25 | ```bash 26 | mkdocs serve 27 | ``` 28 | 执行上述命令后,可通过 `http://127.0.0.1:8000` 地址查看生成的文档内容,当修改文档后,页面内容会自动更新。 29 | 30 | ### 构建文档 31 | ```bash 32 | mkdocs build 33 | ``` 34 | 35 | 执行上述命令后,会在 `site` 目录下生成文档站点的静态文件,将目录中的内容复制到任意 HTTP 服务器上即可完成文档的部署。 36 | 37 | ## 问题反馈 38 | 39 | 如果您发现文档中存在错误,或对文档内容存在疑问,请提交 GitHub Issue 到 [KubeOperator 项目的主仓库](https://github.com/KubeOperator/KubeOperator/issues) 40 | 41 | ## 帮助完善文档 42 | 43 | ### Fork 文档仓库 44 | 点击仓库右上角的 `fork` 按钮,复制本仓库到自己的 github 账号。 45 | 46 | ### 克隆 fork 后的仓库 47 | ```bash 48 | git clone https://github.com/your-github-account/docs.git 49 | ``` 50 | 51 | ### 本地修改并调试 52 | 53 | ### Push 修改内容到 GitHub 仓库 54 | 55 | ### 提交 Pull Request 到本仓库 56 | -------------------------------------------------------------------------------- /docs/concept.md: -------------------------------------------------------------------------------- 1 | 2 | ## 部署模式 3 | 4 | !!! warning "" 5 | - 手动模式: 用户需要自己准备物理机或虚拟机,存储可选择 NFS 持久化存储,外部 ceph 存储等 6 | - 自动模式: 用户只需要绑定云平台(比如 [VMware][VMware])账号信息,[KubeOperator][KubeOperator] 会根据预先定义的部署计划来自动创建主机实现一键自动化部署 7 | 8 | ## 部署计划 9 | 10 | !!! warning "" 11 | 自动部署模式下,部署计划定义了 [Kubernetes][Kubernetes] 集群的部署细节,包括其部署模型、集群所在的区域、可用区、节点大小类型等 12 | 13 | ## 区域和可用区 14 | 15 | ![region-zone](img/ko-region.png) 16 | 17 | !!! warning "" 18 | 区域(Region)和可用区(AZ)这两个术语来自公有云。每个区域完全独立。每个可用区完全隔离,但同一个区域内的可用区之间使用低时延链路相连。区域和可用区之间的关系如下图所示 19 | 20 | !!! warning "" 21 | 对于公有云厂商提供的托管 [Kubernetes][Kubernetes] 服务,master 节点由公有云厂商托管并维护,其 3 个master 节点会分布在同个区域下面的 3 个不同可用区上面,实现真正的高可用 22 | 23 | !!! warning "" 24 | [KubeOperator][KubeOperator] 借鉴公有云厂商的思路和概念,并应用到 [VMware][VMware]、[OpenStack][OpenStack] 和 [FusionCompute][FusionCompute] 等私有云平台上面。例如,在 [VMware][VMware] 云平台下,区域对应为 Datacenter,可用区对应于 cluster,或者 cluster 下面的 resource pool 25 | 26 | !!! warning "注意事项" 27 | - 如果用户只有一个 vSphere 集群,那么可以在集群下面建立三个 resource pool,每个resource pool 对应于一个可用区 28 | - 如果用户有三个 vSphere 集群,那么每个集群对应于一个可用区 29 | - vSAN 集群不能被多个 vSphere 集群共享,所以 3 个 vSphere 集群,持久化存储仅支持集中存储。 [具体请参考此文档](https://docs.vmware.com/en/VMware-Enterprise-PKS/1.5/vmware-enterprise-pks-15/GUID-vsphere-persistent-storage.html) 30 | 31 | ## 权限模型 32 | 33 | !!! warning "" 34 | 支持通过在项目中设置用户权限等级来管理集群,分为系统管理员、项目管理员、集群管理员 35 | 36 | ### 系统管理员 37 | 38 | !!! warning "" 39 | 默认的 admin 账号可以创建系统管理员 40 | 41 | !!! warning "" 42 | - 管理集群,安装、卸载、升级、扩容、缩容、备份、恢复等等所有集群相关操作 43 | - 管理用户,添加系统管理员和普通用户 44 | - 管理项目,创建新项目,给项目创建集群、指定项目管理员和集群管理员、授权资源等 45 | - 管理版本,启用、禁用 k8s 版本、查看版本详情等 46 | - 管理资源,添加集群所需主机、部署计划、备份账号等 47 | - 系统设置,设置添加仓库、凭据、NTP、邮箱、License等 48 | - 查看系统日志 49 | 50 | ### 项目管理员 51 | 52 | !!! warning "" 53 | - 管理集群,安装、卸载、升级、扩容、缩容、备份、恢复等所有集群相关操作 54 | - 查看版本,查看版本详情 55 | - 查看资源,查看集群所需主机、部署计划、备份账号等 56 | - 查看项目,查看项目管理员和集群管理员、已授权资源等 57 | - 查看系统日志 58 | 59 | ### 集群管理员 60 | 61 | !!! warning "" 62 | - 管理集群,查看集群概览、监控、日志、事件、添加工具、启用CSI扫描等相关操作 63 | - 查看系统日志 64 | 65 | [KubeOperator]:https://kubeoperator.io 66 | [Kubernetes]:https://kubernetes.io 67 | [VMware]:https://www.vmware.com 68 | [OpenStack]:https://www.openstack.org 69 | [FusionCompute]:https://support.huawei.com/enterprise/zh/cloud-computing/fusioncompute-pid-8576912 70 | -------------------------------------------------------------------------------- /docs/css/extra.css: -------------------------------------------------------------------------------- 1 | :root > * { 2 | --md-primary-fg-color: #fc6554; 3 | } 4 | 5 | .md-header { 6 | top: 48px; 7 | } 8 | 9 | .md-footer-nav__link { 10 | padding-top: .8rem; 11 | } 12 | 13 | .md-main__inner { 14 | margin-top: 3rem; 15 | } 16 | 17 | .progress-label { 18 | position: absolute; 19 | text-align: center; 20 | font-weight: 700; 21 | width: 100%; 22 | margin: 0; 23 | line-height: 1.2rem; 24 | white-space: nowrap; 25 | overflow: hidden; 26 | } 27 | 28 | .progress-bar { 29 | height: 1.2rem; 30 | float: left; 31 | background-color: #2979ff; 32 | } 33 | 34 | .progress { 35 | display: block; 36 | width: 100%; 37 | margin: 0.5rem 0; 38 | height: 1.2rem; 39 | background-color: #eeeeee; 40 | position: relative; 41 | } 42 | 43 | .progress.thin { 44 | margin-top: 0.9rem; 45 | height: 0.4rem; 46 | } 47 | 48 | .progress.thin .progress-label { 49 | margin-top: -0.4rem; 50 | } 51 | 52 | .progress.thin .progress-bar { 53 | height: 0.4rem; 54 | } 55 | 56 | .progress-100plus .progress-bar { 57 | background-color: #00e676; 58 | } 59 | 60 | .progress-80plus .progress-bar { 61 | background-color: #fbc02d; 62 | } 63 | 64 | .progress-60plus .progress-bar { 65 | background-color: #ff9100; 66 | } 67 | 68 | .progress-40plus .progress-bar { 69 | background-color: #ff5252; 70 | } 71 | 72 | .progress-20plus .progress-bar { 73 | background-color: #ff1744; 74 | } 75 | 76 | .progress-0plus .progress-bar { 77 | background-color: #f50057; 78 | } 79 | 80 | .md-nav__source { 81 | background-color: #fc6554; 82 | } 83 | 84 | .md-grid { 85 | margin-left: 1rem; 86 | margin-right: auto; 87 | max-width: initial; 88 | } 89 | 90 | .md-top { 91 | margin-top: 2rem; 92 | } 93 | 94 | .md-nav--primary .md-nav__title .md-logo { 95 | display: none; 96 | } 97 | -------------------------------------------------------------------------------- /docs/dev/dev_manual.md: -------------------------------------------------------------------------------- 1 | ## 项目结构 2 | 3 | ### 后端 4 | ``` 5 | . 6 | ├── Dockerfile.amd64 # 构建容器镜像使用的 dockerfile 7 | ├── Makefile # 编译文件 8 | ├── LICENSE 9 | ├── README.md 10 | ├── ROADMAP.md 11 | ├── go.mod 12 | ├── pkg # 主目录 13 | ├── locales # 后端 i18n 翻译目录 14 | ├── docs # REST Api 文档目录 15 | ├── migration # 数据库变更文件目录 16 | ``` 17 | 18 | ### 前端 19 | ``` 20 | . 21 | ├── Dockerfile # 构建容器镜像使用的 dockerfile 22 | ├── LICENSE 23 | ├── README.md 24 | ├── package.json # 包管理文件 25 | ├── src # 主目录 26 | ``` 27 | 28 | ## 配置开发环境 29 | 30 | ### 后端 31 | 32 | !!! warning "" 33 | - KubeOperator 后端使用 iris 框架,并使用 Go mod 作为项目管理工具 34 | - 开发环境 Golang 版本 >= 1.14 35 | 36 | #### 初始化配置 37 | 38 | ##### 数据库初始化 39 | 40 | !!! warning "" 41 | KubeOperator 使用 MySQL 数据库,推荐使用 MySQL 5.7 版本。同时 KubeOperator 对数据库部分配置项有要求,请参考下附的数据库配置,修改开发环境中的数据库配置文件 42 | 43 | !!! warning "" 44 | 45 | ```mysql 46 | [mysqld] 47 | datadir=/var/lib/mysql 48 | 49 | default-storage-engine=INNODB 50 | character_set_server=UTF8MB4 51 | table_open_cache=128 52 | max_connections=2000 53 | max_connect_errors=6000 54 | innodb_file_per_table=1 55 | innodb_buffer_pool_size=1G 56 | max_allowed_packet=64M 57 | transaction_isolation=READ-COMMITTED 58 | innodb_flush_method=O_DIRECT 59 | innodb_lock_wait_timeout=1800 60 | innodb_flush_log_at_trx_commit=0 61 | sync_binlog=0 62 | sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 63 | skip-name-resolve 64 | user=mysql 65 | 66 | [mysql] 67 | default-character-set=utf8 68 | 69 | [mysql.server] 70 | default-character-set=utf8 71 | ``` 72 | 73 | 请参考文档中的建库语句创建 KubeOperator 使用的数据库,server 服务启动时会自动在配置的库中创建所需的表结构及初始化数据。 74 | 75 | !!! warning "" 76 | 77 | ```mysql 78 | CREATE DATABASE `ko` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ 79 | ``` 80 | 81 | ##### KubeOperator 配置文件 82 | 83 | !!! warning "" 84 | KubeOperator 会默认加载该路径下的配置文件 /etc/ko/app.yaml,请参考下列配置创建对应目录及配置文件 85 | 86 | !!! warning "" 87 | 88 | ```yaml 89 | bind: 90 | host: 0.0.0.0 91 | port: 8080 92 | logging: 93 | level: info 94 | out_put: fileAndStd 95 | max_age: 2592000 96 | rotation: 86400 97 | # 数据库配置 98 | db: 99 | # mysql 服务地址,按需修改 100 | host: mysql 101 | port: 3306 102 | user: root 103 | # 明文密码:KubeOperator123@mysql 104 | password: U08BAQEBAQHNm6g24wOpMgv34sNpwR5aBVdvFeSE9+6bydHO/WZLvZXlX9rxiY4V 105 | name: ko 106 | max_open_conns: 200 107 | max_idle_conns: 10 108 | jwt: 109 | secret: iXDgDaEYBzIzustW 110 | exp: 480 111 | job: 112 | timeout: 60 113 | # kobe 组件配置 114 | kobe: 115 | # kobe 服务地址,按需修改 116 | host: kobe 117 | port: 8080 118 | # kotf 组件配置 119 | kotf: 120 | # kotf 服务地址,按需修改 121 | host: kotf 122 | port: 8080 123 | webkubectl: 124 | host: webkubectl 125 | port: 8080 126 | kubepi: 127 | host: kubepi 128 | port: 80 129 | cron: 130 | enable: true 131 | encrypt: 132 | multilevel: 133 | enable: true 134 | secret: WjgBAQEBAQG1bkw4r7ZuaKD1klBxrT+zrRk8KWl+7LE0dli3h+a8gl6er0u8Ks1w 135 | parts: 136 | - dP3hT7dBQhygBCYW 137 | - YIi2czL9wv4tQEZD 138 | ``` 139 | 140 | #### 运行后端服务 141 | 142 | !!! warning "" 143 | 主目录运行 144 | 145 | ``` 146 | go run main.go 147 | ``` 148 | 149 | ### 前端 150 | 151 | !!! warning "" 152 | - [neeko](https://github.com/KubeOperator/neeko) 前端使用了 Vue.js 作为前端框架,ElementUI 作为 UI 框架,并使用 npm 作为包管理工具 153 | - 开发者请先下载 Node.js 作为运行环境(推荐版本:v14.x) 154 | 155 | #### 运行步骤 156 | 157 | !!! warning "" 158 | 部署运行好 KubeOperator API 服务器(前置条件) 159 | 160 | ```bash 161 | 1. 安装依赖 162 | $ npm install 163 | 164 | 2. 运行 165 | $ npm run serve 166 | ``` 167 | 168 | ### 组件 169 | 170 | !!! warning "" 171 | [kobe](https://github.com/KubeOperator/kobe) 和 [kotf](https://github.com/KubeOperator/kotf) 为 grpc 协议组件,使用 protobuf 生成 172 | 173 | #### 配置文件 174 | 175 | ##### kobe 176 | 177 | !!! warning "" 178 | kobe 会默认加载该路径下的配置文件 /etc/kobe/app.yaml,请参考下列配置创建对应目录及配置文件 179 | 180 | ```yaml 181 | server: 182 | host: 0.0.0.0 183 | port: 8080 184 | app: 185 | worker: 10 186 | queue: 2000 187 | 188 | ansible: 189 | timeout: 10 190 | forks: 20 191 | ``` 192 | 193 | ##### kotf 194 | 195 | !!! warning "" 196 | kotf 会默认加载该路径下的配置文件 /etc/kotf/app.yaml,请参考下列配置创建对应目录及配置文件 197 | 198 | ``` 199 | server: 200 | host: 0.0.0.0 201 | port: 8080 202 | ``` 203 | 204 | #### 组件启动 205 | 206 | !!! warning "" 207 | ```bash 208 | go run cmd/server/*.go 209 | ``` -------------------------------------------------------------------------------- /docs/dev/rest_api.md: -------------------------------------------------------------------------------- 1 | 2 | !!! warning "点击帮助,查看 API 文档" 3 | 4 | ![api_swagger](../img/dev/swagger-1.png) 5 | 6 | ![api_swagger](../img/dev/swagger-2.png) 7 | -------------------------------------------------------------------------------- /docs/faq.md: -------------------------------------------------------------------------------- 1 | 2 | ### KubeOperator 的定位 3 | 4 | !!! warning "" 5 | KubeOperator 是一个开源的轻量级 Kubernetes 发行版。与 OpenShift 等重量级 PaaS 平台相比,KubeOperator 只专注于解决一个问题,就是帮助企业规划(Day 0)、部署(Day 1)、运营(Day 2)生产级别的 Kubernetes 集群,并且做到极致。 6 | 7 | ![what-is-ko](img/faq/what-is-ko.png) 8 | 9 | !!! warning "" 10 | 云原生正在快速兴起,三个互相关联的领域在同步进化: 11 | 12 | - 基础设施方面: 从 物理资源 到 虚拟化资源 到 容器化( Kubernetes )资源 的演进 13 | - 开发模式方面: 从 瀑布模型 到 敏捷开发 到 DevOps 的演进 14 | - 应用架构方面: 从 单体架构 到 多层次架构 到 微服务 的演进 15 | 16 | ### 与其他工具的区别 17 | 18 | === "差异" 19 | !!! warning "" 20 | KubeOperator 不仅提供 Day 1 部署功能,还提供 Day 2 的 K8s 集群升级、扩容、监控、检查、备份恢复等功能 21 | 22 | ![overview](img/faq/overview.png) 23 | 24 | === "优势" 25 | !!! warning "" 26 | KubeOperator 的优势包括: 27 | 28 | - 提供可视化的 Web UI,大大降低部署和管理 Kubernetes 的门槛; 29 | - 提供离线的、经过全面验证和测试的安装包; 30 | - 与 VMware、Openstack 和 FusionCompute 等云平台紧密对接,能够实现一键虚机自动创建和部署(基于 Terraform 和 Ansible); 31 | - KubeOperator 会提供经过充分验证的成熟企业级存储和网络方案。 32 | 33 | ### Kubernetes 集群方案 34 | 35 | !!! warning "" 36 | - 基于物理机部署大的 Kubernetes 集群: 通过 namespace 实现租户的隔离 37 | - 基于 IaaS 平台之上部署多个 Kubernetes 集群: 为每个租户分配独立的 Kubernetes 集群 38 | !!! warning "" 39 | 这两种方案各有好处,在 Kubernetes 采纳初期,使用第二种方案更为理性,因为: 40 | 41 | - 如果是单一大集群,升级会影响所有租户,风险比较大; 42 | - IaaS 平台上有成熟的、基于软件定义的存储和网络方案,落地更容易和灵活; 43 | - KubeOperator 与 VMware、Openstack 等 IaaS 方案紧密集成,可以实现全栈的自动化,集群交付快,伸缩快。 44 | 45 | ### KubeOperator 部署方式 46 | 47 | !!! warning "" 48 | 基于 kubeadm 容器化部署 Kubernetes 集群 49 | 50 | ### 原生 Kubernetes 的好处 51 | 52 | !!! warning "" 53 | - KubeOperator 已经通过云原生基金会的 [Kubernetes 软件一致性认证](https://landscape.cncf.io)。 54 | - Kubernetes 迭代很快,且只维护最新的三个大版本。如果采纳其他发行版,可能很容易出现和原生版本脱节的情况。 55 | - 由于 Operator 和 Helm 等日趋成熟,很多发行版的功能,比如 CI/ CD, Istio 等都可以通过 addon 方式部署到 Kubernetes 集群里面。Kubernetes 集群及其里面的应用应该是分离的,各自迭代升级。 56 | 57 | ### KubeOperator 支持的存储 58 | 59 | === "NFS" 60 | !!! warning "" 61 | 手动模式和自动模式下的集群都支持 NFS 作为持久化存储 62 | 63 | === "LocalStorage" 64 | !!! warning "" 65 | 本地持久化存储 66 | 67 | === "External Ceph" 68 | !!! warning "" 69 | 创建成功之后,会在集群中初始化 ceph provisioner 相关 pod 70 | 71 | === "Rook-Ceph" 72 | !!! warning "" 73 | 需要指定 ceph 集群所需磁盘(集群所有节点都必须包含指定的磁盘,如sdb,sdc...) 74 | 75 | === "vSphere" 76 | !!! warning "" 77 | 集群服务器必须在指定 Folder 中(自动模式创建集群默认 Folder 为 kubeoperator),并且服务器名称要和集群 node 节点名称保持一致 78 | 79 | === "[OceanStor](https://github.com/Huawei/eSDK_K8S_Plugin/tree/master/docs/zh)" 80 | 81 | !!! warning "Static and Dynamic PVs 的支持情况取决于所选择的存储。以 vSphere 平台为例,[各种存储选项可以参考此文章](https://docs.vmware.com/en/VMware-Enterprise-PKS/1.5/vmware-enterprise-pks-15/GUID-vsphere-persistent-storage.html)" 82 | 83 | ### Kubernetes 软件一致性认证 84 | 85 | !!! warning "" 86 | 是的。KubeOperator 已经通过认证,具体请参加: https://landscape.cncf.io 87 | 88 | ### KubeOperator 部署机的推荐配置 89 | 90 | !!! warning "" 91 | KubeOperator 部署机配置取决于初始化 k8s 集群节点数量,推荐配置参考如下: 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 |
集群节点数量部署机推荐配置
1-52C 4G
6-104C 8G
11-508C 16G
51-10016C 32G
101-20032C 64G
> 20064C 128G
122 | 123 | ### K8s master 节点的推荐配置 124 | 125 | !!! warning "" 126 | Kubernetes 集群中 master 节点配置取决于 worker 节点数量,推荐配置参考如下: 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 |
worker 节点数量master 推荐配置
1-51C 4G
6-102C 8G
11-1004C 16G
101-2508C 32G
251-50016C 64G
> 50032C 128G
157 | 158 | ### KubeOperator 其他说明 159 | 160 | !!! warning "" 161 | - KubeOperator 自身重启、升级或者挂掉不会影响其创建和管理的 Kubernetes 集群(KubeOperator 是一个 100% 旁路系统,其与被管 Kubernetes 集群完全解耦) 162 | - 重启 Kubernetes 集群节点后,Kubernetes 等服务会自动恢复正常 163 | 164 | ### Harbor 访问故障 165 | 166 | !!! warning "" 167 | 可以通过 Web UI 访问,但是 docker login 不成功 168 | 169 | === "第一步" 170 | !!! warning "" 171 | 开启 TLS,修改 enable = true 172 | ![harbor_tls_enable](./img/faq/harbor-tls.jpg) 173 | 174 | === "第二步" 175 | !!! warning "" 176 | 配置一个固定的 NodePort 端口,端口不要和现有环境冲突即可 177 | ![harbor_tls_enable](./img/faq/harbor-nodeport.jpg) 178 | 179 | === "第三步" 180 | !!! warning "" 181 | 修改 externalURL: https://worker:port , 如图: 172.16.10.100是 worker 节点的IP,30003 是第二个步骤中为 NodePort 设置的固定端口 182 | ![harbor_tls_enable](./img/faq/harbor-externalurl.jpg) 183 | 184 | !!! warning "" 185 | 点击右上角“部署”按钮,进行部署 186 | 187 | !!! warning "" 188 | 在本地 Docker 客户端配置 daemon.json,使之信任 Harbor 私有仓库 189 | ```yaml 190 | { 191 | ... 192 | "insecure-registries" : [ 193 | "172.16.10.100:30003" 194 | ] 195 | ... 196 | } 197 | ``` 198 | 199 | !!! warning "" 200 | 重启 docker 服务后执行 docker login 命令,输入正确的用户名和密码进行登录 201 | ```sh 202 | $ systemctl restart docker 203 | $ docker login 172.16.10.100:30003 204 | Username: admin 205 | Password: 206 | Login Succeeded 207 | ``` 208 | 209 | !!! warning "不论用 Ingress 还是 ClusterIP 对 Harbor 进行服务暴露,externalURL 一定要和实际访问 Harbor 时的 URL 一致,否则 docker login 认证时将会失败" 210 | -------------------------------------------------------------------------------- /docs/img/KubeOperator-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/KubeOperator-icon.png -------------------------------------------------------------------------------- /docs/img/KubeOperator-mixed-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/KubeOperator-mixed-arch.png -------------------------------------------------------------------------------- /docs/img/components.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/components.jpg -------------------------------------------------------------------------------- /docs/img/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/dashboard.png -------------------------------------------------------------------------------- /docs/img/dev/swagger-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/dev/swagger-1.png -------------------------------------------------------------------------------- /docs/img/dev/swagger-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/dev/swagger-2.png -------------------------------------------------------------------------------- /docs/img/faq/harbor-externalurl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/faq/harbor-externalurl.jpg -------------------------------------------------------------------------------- /docs/img/faq/harbor-nodeport.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/faq/harbor-nodeport.jpg -------------------------------------------------------------------------------- /docs/img/faq/harbor-tls.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/faq/harbor-tls.jpg -------------------------------------------------------------------------------- /docs/img/faq/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/faq/overview.png -------------------------------------------------------------------------------- /docs/img/faq/what-is-ko.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/faq/what-is-ko.png -------------------------------------------------------------------------------- /docs/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/favicon.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-1.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-2.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-3.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-4.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy05.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy06.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy07.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy08.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy09.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy10.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy11.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy12.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy13.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy14.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy15.png -------------------------------------------------------------------------------- /docs/img/guidelines/argocd/argocd-deploy16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/argocd/argocd-deploy16.png -------------------------------------------------------------------------------- /docs/img/guidelines/kubeapps/gitlab-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/kubeapps/gitlab-1.png -------------------------------------------------------------------------------- /docs/img/guidelines/kubeapps/gitlab-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/kubeapps/gitlab-2.png -------------------------------------------------------------------------------- /docs/img/guidelines/kubeapps/gitlab-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/kubeapps/gitlab-3.png -------------------------------------------------------------------------------- /docs/img/guidelines/kubeapps/gitlab-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/kubeapps/gitlab-4.png -------------------------------------------------------------------------------- /docs/img/guidelines/kubeapps/kubeapps-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/kubeapps/kubeapps-1.png -------------------------------------------------------------------------------- /docs/img/guidelines/kubeapps/kubeapps-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/kubeapps/kubeapps-2.png -------------------------------------------------------------------------------- /docs/img/guidelines/kubeapps/kubeapps-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/kubeapps/kubeapps-3.png -------------------------------------------------------------------------------- /docs/img/guidelines/kubeapps/kubeapps-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/kubeapps/kubeapps-4.png -------------------------------------------------------------------------------- /docs/img/guidelines/kubeapps/kubeapps-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/guidelines/kubeapps/kubeapps-5.png -------------------------------------------------------------------------------- /docs/img/ko-region.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/ko-region.png -------------------------------------------------------------------------------- /docs/img/kubeoperator-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/kubeoperator-white.png -------------------------------------------------------------------------------- /docs/img/kubeoperator.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/kubeoperator.jpeg -------------------------------------------------------------------------------- /docs/img/region.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/region.png -------------------------------------------------------------------------------- /docs/img/tutorial/vmware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/tutorial/vmware.png -------------------------------------------------------------------------------- /docs/img/user_manual/backup_account/backup-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/backup_account/backup-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/backup_account/backup-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/backup_account/backup-2.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/cis-scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/cis-scan.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/cluster-backup-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/cluster-backup-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/cluster-backup-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/cluster-backup-2.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/cluster-diagnosis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/cluster-diagnosis.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/cluster-events.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/cluster-events.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/cluster-import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/cluster-import.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/cluster-remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/cluster-remove.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/cluster-upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/cluster-upgrade.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/deploy-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/deploy-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/deploy-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/deploy-2.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/deploy-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/deploy-3.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/deploy-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/deploy-4.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/deploy-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/deploy-5.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/deploy-hosts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/deploy-hosts.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/deploy-log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/deploy-log.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/deploy-plan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/deploy-plan.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/deploy-review.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/deploy-review.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/istio-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/istio-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/logging-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/logging-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/monitor-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/monitor-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/namespace-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/namespace-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/node-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/node-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/node-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/node-2.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/node-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/node-3.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/node-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/node-4.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/node-cordon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/node-cordon.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/node-detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/node-detail.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/overview-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/overview-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/overview-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/overview-2.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/storage-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/storage-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/cluster/tools-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/cluster/tools-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/hosts/host-add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/hosts/host-add.png -------------------------------------------------------------------------------- /docs/img/user_manual/hosts/host-detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/hosts/host-detail.png -------------------------------------------------------------------------------- /docs/img/user_manual/hosts/host-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/hosts/host-edit.png -------------------------------------------------------------------------------- /docs/img/user_manual/hosts/host-import-excel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/hosts/host-import-excel.png -------------------------------------------------------------------------------- /docs/img/user_manual/hosts/host-import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/hosts/host-import.png -------------------------------------------------------------------------------- /docs/img/user_manual/hosts/host-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/hosts/host-list.png -------------------------------------------------------------------------------- /docs/img/user_manual/hosts/host-refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/hosts/host-refresh.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/custom-templates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/custom-templates.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/ip-pool-add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/ip-pool-add.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/ip-pool-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/ip-pool-list.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/ip-pool-use.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/ip-pool-use.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/plan-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/plan-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/region-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/region-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/template-fusioncompute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/template-fusioncompute.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/template-openstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/template-openstack.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/template-upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/template-upload.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/template-vsphere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/template-vsphere.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/virtual-config-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/virtual-config-list.png -------------------------------------------------------------------------------- /docs/img/user_manual/plan/zone-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/plan/zone-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/project/project-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/project/project-3.png -------------------------------------------------------------------------------- /docs/img/user_manual/project/project-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/project/project-5.png -------------------------------------------------------------------------------- /docs/img/user_manual/project/project-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/project/project-dashboard.png -------------------------------------------------------------------------------- /docs/img/user_manual/project/project-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/project/project-list.png -------------------------------------------------------------------------------- /docs/img/user_manual/system_log/system-log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/system_log/system-log.png -------------------------------------------------------------------------------- /docs/img/user_manual/system_management/key-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/system_management/key-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/system_management/key-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/system_management/key-2.png -------------------------------------------------------------------------------- /docs/img/user_manual/system_management/ntp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/system_management/ntp.png -------------------------------------------------------------------------------- /docs/img/user_manual/system_management/registry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/system_management/registry.png -------------------------------------------------------------------------------- /docs/img/user_manual/user_management/user-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/user_management/user-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/version/version-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/version/version-1.png -------------------------------------------------------------------------------- /docs/img/user_manual/version/version-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/docs/img/user_manual/version/version-2.png -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | 2 | # 总体介绍 3 | 4 | !!! warning "" 5 | KubeOperator 是一个开源的轻量级 Kubernetes 发行版,专注于帮助企业规划、部署和运营生产级别的 Kubernetes 集群。 6 | 7 | KubeOperator 提供可视化的 Web UI,支持离线环境,支持物理机、VMware、OpenStack 和 FusionCompute 等 IaaS 平台,支持 x86_64 和 ARM64 架构,支持 GPU,内置应用商店,已通过 CNCF 的 Kubernetes 软件一致性认证。 8 | 9 | KubeOperator 使用 Terraform 在 IaaS 平台上自动创建主机(用户也可以自行准备主机,比如物理机或者虚机),通过 Ansible 完成自动化部署和变更操作,支持 Kubernetes 集群 从 Day 0 规划,到 Day 1 部署,到 Day 2 运营的全生命周期管理。 10 | 11 | ## 页面展示 12 | 13 | ![!界面展示](./img/dashboard.png) 14 | 15 | ## 技术优势 16 | 17 | !!! warning "" 18 | 19 | - 按需创建: 调用云平台 API,一键快速创建和部署 [Kubernetes][Kubernetes] 集群 20 | - 按需伸缩: 快速伸缩 [Kubernetes][Kubernetes] 集群,优化资源使用效率 21 | - 按需修补: 快速升级和修补 [Kubernetes][Kubernetes] 集群,并与社区最新版本同步,保证安全性 22 | - 离线部署: 支持完全离线下的 [Kubernetes][Kubernetes] 集群部署 23 | - 自我修复: 通过重建故障节点确保集群可用性 24 | - 全栈监控: 提供从Pod、Node到集群的事件、监控、告警、和日志方案 25 | - Multi-AZ 支持: 将 Master 节点分布在不同的故障域上确保集群高可用 26 | -------------------------------------------------------------------------------- /docs/installation/install.md: -------------------------------------------------------------------------------- 1 | 2 | ## 硬件要求 3 | 4 | === "最小化配置" 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
角色CPU核数内存系统盘数量
部署机48G100G1
Master48G100G1
Worker48G100G1
40 | 41 | === "推荐配置" 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 74 | 75 | 76 | 77 |
角色CPU核数内存系统盘数量
部署机816G100G SSD1
Master816G100G SSD3
Worker816G系统盘: 100G
73 | 数据盘: 300G(/var/lib/docker)
>3
78 | 79 | ## 软件要求 80 | 81 | === "KubeOperator 部署机" 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 128 | 129 | 130 |
需求项具体要求参考(以CentOS7.6为例)
操作系统支持 Docker 的 Linux OScat /etc/redhat-release
CPU 架构支持 x86_64 和 aarch64 uname -m
kernel 版本>=Linux 3.10.0-957.el7.x86_64uname -sr
swap关闭swapoff -a
111 | sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
防火墙关闭systemctl stop firewalld && systemctl disable firewalld
端口所有节点防火墙必须放通 SSH(默认22)、80、8081-8083端口firewall-cmd --zone=public --add-port=80/tcp --permanent
SELinux关闭setenforce 0
127 | sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
131 | 132 | === "K8s 集群节点" 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 |
需求项具体要求参考(以CentOS7.6为例)
操作系统 146 | 147 | CentOS 7.4 - 7.9
148 | RHEL 7.4 - 7.9
149 | Ubuntu 20.04 / 18.04
150 | Kylin v10
151 | openEuler 22.03
152 | EulerOS 2.5(x86_64)
153 | EulerOS 2.8(aarch64) 154 |
155 |
cat /etc/redhat-release
CPU 架构支持 x86_64 和 aarch64 uname -m
kernel 版本>=Linux 3.10.0-957.el7.x86_64uname -sr
swap关闭。如果不满足,系统会有一定几率出现 io 飙升,造成 docker 卡死。kubelet 会启动失败(可以设置 kubelet 启动参数 --fail-swap-on 为 false 关闭 swap 检查)swapoff -a
172 | sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
防火墙关闭。Kubernetes 官方要求systemctl stop firewalld && systemctl disable firewalld
SELinux关闭setenforce 0
183 | sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
时区所有服务器时区必须统一,建议设置为 Asia/Shanghaitimedatectl set-timezone Asia/Shanghai
192 | 193 | ## 安装说明 194 | 195 | === "离线安装" 196 | 197 | !!! warning "请自行下载 KubeOperator 最新版本的离线安装包" 198 | - amd64: https://cloud.189.cn/t/yU7BjimqmUry(访问码:rt1t) 199 | - arm64: https://cloud.189.cn/t/eYrQniJRzuU3(访问码:hxz3) 200 | 201 | !!! warning "" 202 | ```sh 203 | # 解压安装包 204 | tar zxvf KubeOperator-release-{{ kubeoperator.version }}-amd64.tar.gz 205 | # arm64 的包名是 KubeOperator-release-{{ kubeoperator.version }}-arm64.tar.gz 206 | cd KubeOperator-release-{{ kubeoperator.version }} 207 | # 运行安装脚本 208 | /bin/bash install.sh 209 | # 等待安装脚本执行完成后,查看 KubeOperator 状态 210 | koctl status 211 | ``` 212 | 213 | !!! warning "" 214 | ``` 215 | [root@kubeoperator ~]# koctl status 216 | 217 | Name Command State Ports 218 | ------------------------------------------------------------------------------------------------------------------------------------------------ 219 | kubeoperator_kobe sh /root/entrypoint.sh Up (healthy) 8080/tcp 220 | kubeoperator_kotf kotf-server Up (healthy) 8080/tcp 221 | kubeoperator_kubepi kubepi-server Up (healthy) 80/tcp 222 | kubeoperator_mysql /entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp 223 | kubeoperator_nexus sh -c ${SONATYPE_DIR}/star ... Up (healthy) 0.0.0.0:8081->8081/tcp, 0.0.0.0:8082->8082/tcp, 0.0.0.0:8083->8083/tcp 224 | kubeoperator_nginx /docker-entrypoint.sh ngin ... Up (healthy) 0.0.0.0:80->80/tcp 225 | kubeoperator_server ko-server Up (healthy) 8080/tcp 226 | kubeoperator_ui /docker-entrypoint.sh ngin ... Up (healthy) 80/tcp 227 | kubeoperator_webkubectl sh /opt/webkubectl/start-w ... Up (healthy) 228 | ``` 229 | 230 | !!! warning "登录" 231 | ``` 232 | 地址: http://:80 233 | 用户名: admin 234 | 密码: kubeoperator@admin123 235 | ``` 236 | 237 | !!! warning "帮助" 238 | ```sh 239 | koctl --help 240 | ``` 241 | 242 | ## 升级说明 243 | 244 | === "离线升级" 245 | 246 | !!! warning "" 247 | ```sh 248 | # 离线升级需要提前下载离线安装包,并解压到 KubeOperator 部署机 249 | # 进入升级包目录 250 | cd KubeOperator-release-{{ kubeoperator.version }} 251 | # 运行安装脚本 252 | ./koctl upgrade 253 | # 查看 KubeOperator 状态 254 | koctl status 255 | ``` 256 | ``` 257 | -------------------------------------------------------------------------------- /docs/quick_start/cluster_deployment.md: -------------------------------------------------------------------------------- 1 | 2 | ### 集群信息 3 | 4 | !!! warning "" 5 | - 项目: 选择集群所属项目 6 | - 供应商: 支持裸金属(手动模式)和部署计划(自动模式) 7 | - 版本: 支持版本管理中最新的两个 Kubernetes 版本 8 | - 架构: 支持 AMD64 和 ARM64 9 | - Yum 仓库: 支持替换、共存和不操作三种类型 10 | 11 | !!! warning "Yum 仓库" 12 | - 替换: 此操作将会对 K8S 节点服务器原始 yum repo 文件进行备份,之后生成并仅使用 KubeOperator 的 yum repo 13 | - 共存: 此操作将保持K8S节点服务器原始 yum repo 文件不变,同时生成并使用 kubeoperator 的 yum repo 14 | - 不操作: 此操作将保持使用 K8S 节点服务器原始 yum repo 文件,不对K8S节点服务器的 yum repo 做任何操作 15 | 16 | ![deploy-1](../img/user_manual/cluster/deploy-1.png) 17 | 18 | ### 集群设置 19 | 20 | !!! warning "" 21 | - 容器网络: CIDR不能与目标IP段重叠,否则会造成初始化失败 22 | - POD 数量上限/节点: 默认 256 23 | - Service 数量上限/集群: 默认 256 24 | - proxy 模式: 支持 iptables 和 ipvs 25 | - dns 缓存: 支持开启 NodeLocal DNSCache 26 | - kubernetes 审计: 支持开启日志审计功能 27 | 28 | ![deploy-2](../img/user_manual/cluster/deploy-2.png) 29 | 30 | ### 运行时设置 31 | 32 | !!! warning "" 33 | - 容器运行时: 支持 Docker 和 Containerd 34 | - Docker 数据路径: 默认 /var/lib/docker 35 | - Container 子网: 默认 172.17.0.1/16 36 | 37 | ![deploy-3](../img/user_manual/cluster/deploy-3.png) 38 | 39 | ### 容器网络设置 40 | 41 | !!! warning "" 42 | - 网卡名称: 多网卡环境需要指定使用的网卡名称,单网卡环境可不填 43 | - 容器网络: 支持 flannel 、 calico 和 cilium 44 | 45 | !!! warning "vxlan 和 ipip 网络模式" 46 | - 基于隧道,在任何网络环境下都可以正常工作 47 | - 优势是对物理网络环境没有特殊要求,只要宿主机IP层可以路由互通即可 48 | - 劣势是封包和解包耗费CPU性能,且额外的封装导致带宽浪费 49 | 50 | !!! warning "host-gw 和 bgp 网络模式" 51 | - 基于路由,不适用于公有云环境 52 | - 优势是没有封包和解包过程,完全基于两端宿主机的路由表进行转发 53 | - 劣势是要求宿主机在2层网络是互通,且路由表膨胀会导致性能降低 54 | 55 | !!! warning "cilium Overlay" 56 | - 支持 vxlan 和 geneve 57 | - 基于封装的虚拟网络,产生所有主机。目前 VXLAN 和 Geneve 已经完成,但可以启用 Linux 支持的所有封装格式 58 | - 此模式具有最小的基础设施和集成要求。它几乎适用于任何网络基础设施,因为唯一的要求是主机之间的IP连接,这通常已经给出 59 | 60 | !!! warning "cilium Native Routing" 61 | - 使用 Linux 主机的常规路由表。网络必须能够路由应用程序容器的IP地址,此模式适用于高级用户,需要了解底层网络基础结构。 62 | - 适用于(1. 原生 IPv6 网络、2. 与云网络路由器配合使用、3. 如果您已经在运行路由守护进程) 63 | 64 | ![deploy-4](../img/user_manual/cluster/deploy-4.png) 65 | 66 | ### 组件设置 67 | 68 | !!! warning "" 69 | - helm: 支持 v2 和 v3 70 | - ingress 类型: 支持 nginx-ingress 和 traefik-ingress 71 | - 安装 GPU 套件: 按需使用,默认选择禁用 72 | 73 | ![deploy-5](../img/user_manual/cluster/deploy-5.png) 74 | 75 | ### 节点信息 76 | 77 | !!! warning "" 78 | 根据不同的节点角色选择目标主机(手动模式) 79 | 80 | ![deploy-hosts](../img/user_manual/cluster/deploy-hosts.png) 81 | 82 | !!! warning "" 83 | 选择已授权部署计划,设置 Worker 节点数量(自动模式) 84 | 85 | ![deploy-plan](../img/user_manual/cluster/deploy-plan.png) 86 | 87 | ### 确认信息 88 | 89 | ![deploy-review](../img/user_manual/cluster/deploy-review.png) 90 | 91 | ### 日志 92 | 93 | !!! warning "" 94 | 集群创建过程中为 Initializing 状态,点击可查看集群安装进度并支持查看当前任务的实时日志(支持手动暂停任务日志输出) 95 | 96 | ![deploy-log](../img/user_manual/cluster/deploy-log.png) 97 | -------------------------------------------------------------------------------- /docs/quick_start/cluster_import.md: -------------------------------------------------------------------------------- 1 | 2 | ### 基本信息 3 | 4 | !!! warning "" 5 | - 支持导入非 KubeOperator 创建的集群 6 | - 导入非 KubeOperator 创建的集群不支持扩缩容、升级、备份等 Day2 操作 7 | 8 | ![cluster-import](../img/user_manual/cluster/cluster-import.png) 9 | 10 | !!! warning "获取架构" 11 | 选择集群节点的 CPU 架构类型(支持 amd64、arm64 和混合架构三种类型) 12 | 13 | !!! warning "获取 Api Server" 14 | ```shell 15 | cat ~/.kube/config | grep server: | awk '{print $2}' 16 | ``` 17 | 18 | 注意:如果 server IP 为 127.0.0.1,需要将 IP 替换为任意 master 节点 IP 19 | 20 | !!! warning "获取 Router" 21 | 装有 kube-proxy 的任意 K8s 集群节点的 IP 地址 22 | 23 | ```shell 24 | kubectl -n kube-system get pod -o wide | grep kube-proxy 25 | ``` 26 | 27 | 注意:获取任意节点的 IP 地址 28 | 29 | !!! warning "获取 Token" 30 | 31 | === "KubeOperator 创建集群" 32 | 33 | ```shell 34 | kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep ko-admin | awk '{print $1}') | grep token: | awk '{print $2}' 35 | ``` 36 | 37 | === "自建集群" 38 | 39 | !!! warning "" 40 | 创建 Service Account 41 | 42 | ```yaml 43 | apiVersion: v1 44 | kind: ServiceAccount 45 | metadata: 46 | name: kubeoperator-user 47 | namespace: kube-system 48 | ``` 49 | 50 | !!! warning "" 51 | 创建 ClusterRoleBinding 52 | 53 | ```yaml 54 | apiVersion: rbac.authorization.k8s.io/v1 55 | kind: ClusterRoleBinding 56 | metadata: 57 | name: kubeoperator-user 58 | roleRef: 59 | apiGroup: rbac.authorization.k8s.io 60 | kind: ClusterRole 61 | name: cluster-admin 62 | subjects: 63 | - kind: ServiceAccount 64 | name: kubeoperator-user 65 | namespace: kube-system 66 | ``` 67 | 68 | !!! warning "" 69 | 获取 Token 70 | 71 | ```shell 72 | kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubeoperator-user | awk '{print $1}') | grep token: | awk '{print $2}' 73 | ``` 74 | 75 | ### 非 KubeOperator 创建集群 76 | 77 | #### 使用工具 78 | 79 | !!! warning "仓库配置" 80 | - 工具中涉及到的镜像来源于 nexus 镜像仓库。在启用工具之前,需要在所有 K8s 集群节点上对 nexus 镜像仓库进行 http 授信。 81 | 82 | ```shell 83 | vim /etc/docker/daemon.json 84 | ``` 85 | 86 | ```json 87 | { 88 | ... 89 | "insecure-registries" : [ "...", "kubeoperator-ip:8082", "..." ] 90 | ... 91 | } 92 | 93 | 注意:kubeoperator-ip 为 KubeOperator 部署机 IP 94 | ``` 95 | 96 | ```shell 97 | # 重新启动 docker 服务使得配置生效 98 | systemctl restart docker.service 99 | ``` 100 | 101 | ### KubeOperator 创建集群 102 | 103 | #### 获取容器运行时参数 104 | 105 | !!! warning "Docker" 106 | ```shell 107 | # 集群任意节点执行 108 | cat /etc/docker/daemon.json 109 | ``` 110 | 111 | ```json 112 | { 113 | ... 114 | "bip": "172.17.0.1/16", # Container 子网 115 | "data-root": "/var/lib/docker", # Docker 数据路径 116 | ... 117 | } 118 | ``` 119 | 120 | !!! warning "Containerd" 121 | 122 | ```shell 123 | # 集群任意节点执行 124 | cat /etc/containerd/config.toml 125 | ``` 126 | 127 | ```yaml 128 | ... 129 | root = "/var/lib/containerd" # Containerd 数据路径 130 | ... 131 | ``` 132 | 133 | #### 获取容器网络参数 134 | 135 | !!! warning "" 136 | 137 | === "flannel" 138 | 139 | !!! warning "网络模式" 140 | 141 | ```shell 142 | # 集群任意节点执行 143 | kubectl -n kube-system get cm kube-flannel-cfg -o yaml 144 | ``` 145 | 146 | ```json 147 | { 148 | ... 149 | net-conf.json: | 150 | { 151 | "Network": "10.0.0.0/14", 152 | "Backend": { 153 | "Type": "vxlan" # 网络模式为 vxlan 154 | } 155 | } 156 | ... 157 | } 158 | ``` 159 | 160 | !!! warning "多网络设置" 161 | 162 | ```shell 163 | # 集群任意节点执行 164 | kubectl -n kube-system get daemonsets.apps kube-flannel-ds -o yaml 165 | ``` 166 | 167 | ```yaml 168 | ... 169 | containers: 170 | - args: 171 | - --ip-masq 172 | - --kube-subnet-mgr 173 | - --iface=ens192 # 多网络设置为启用,网卡名称为 ens192 174 | ... 175 | ``` 176 | 177 | === "calico" 178 | 179 | !!! warning "网络模式" 180 | 181 | ```shell 182 | # 集群任意节点执行 183 | kubectl -n kube-system get cm calico-config -o yaml 184 | ``` 185 | 186 | ```yaml 187 | ... 188 | containers: 189 | - env: 190 | - name: CALICO_IPV4POOL_IPIP 191 | value: "off" # off 代表网络模式为 bgp,Always 代表网络模式为 ipip 192 | ... 193 | ``` 194 | 195 | !!! warning "多网络设置" 196 | 197 | ```shell 198 | # 集群任意节点执行 199 | kubectl -n kube-system get daemonsets.apps calico-node -o yaml 200 | ``` 201 | 202 | ```yaml 203 | ... 204 | containers: 205 | - env: 206 | - name: DATASTORE_TYPE 207 | value: kubernetes 208 | - name: IP_AUTODETECTION_METHOD 209 | value: interface=ens192 # 多网络设置为网卡,网卡名称为 ens192 210 | value: cidr=192.168.64.0/24 # 多网络设置为网段,网段为 192.168.64.0/24 211 | ... 212 | ``` -------------------------------------------------------------------------------- /docs/quick_start/cluster_planning/automatic.md: -------------------------------------------------------------------------------- 1 | 2 | !!! warning "" 3 | - KubeOperator 推荐使用自动模式部署 Kubernetes 集群 4 | - 在自动模式下,用户需要准备软件定义的 IaaS 云平台,比如 VMware vSphere、Openstack 和 FusionCompute 等 5 | - 本章节以 VMware vSphere 平台作为示例,讲解整个 K8s 集群的规划、部署及管理过程,部署示意图如下图所示: 6 | 7 | ![overview](../../img/tutorial/vmware.png) 8 | 9 | ### IP 池配置 10 | 11 | !!! warning "" 12 | IP 池在创建可用区时使用,池中的 IP 地址将分配给虚拟机 13 | 14 | ![ip-pool-list](../../img/user_manual/plan/ip-pool-list.png) 15 | 16 | #### 添加 IP 池 17 | 18 | !!! warning "" 19 | 创建 IP 池要配置好子网掩码、起止 IP、网关和 DNS 等 20 | 21 | ![ip-pool-add](../../img/user_manual/plan/ip-pool-add.png) 22 | 23 | #### 查看 IP 使用情况 24 | 25 | !!! warning "" 26 | - 列表页点击 IP 使用情况可查看 IP 池中所有 IP 的状态(可达、可用和占用) 27 | - 在 IP 池页面,可手动添加 IP 段、同步 IP 状态等 28 | 29 | ![ip-pool-use](../../img/user_manual/plan/ip-pool-use.png) 30 | 31 | ### 虚拟机配置 32 | 33 | !!! warning "" 34 | - 支持添加和修改虚拟机配置(CPU、内存) 35 | - 默认 small、medium、large、xlarge、2xlarge 和 4xlarge 六种配置 36 | 37 | ![virtual-config-list](../../img/user_manual/plan/virtual-config-list.png) 38 | 39 | ### 自定义模版配置 40 | 41 | !!! warning "" 42 | - 支持 VMware vSphere 和 OpenStack 两种 IaaS 云平台 43 | 44 | ![virtual-config-list](../../img/user_manual/plan/custom-templates.png) 45 | 46 | ### 区域(Region) 47 | 48 | !!! warning "" 49 | - 与公有云中的 Region 概念相似,可以简单理解为地理上的区域 50 | - 创建区域时,首先选择提供商,目前支持 VMware vSphere、OpenStack 和 FusionCompute 51 | - 配置参数时,需要提供 vSphere 环境信息,包括 vCenter 主机,端口,用户名和密码(建议直接绑定带有管理员角色的用户) 52 | - 单击【获取数据中心】,获取并绑定目标数据中心 53 | 54 | ![region-1](../../img/user_manual/plan/region-1.png) 55 | 56 | ### 可用区(Zone) 57 | 58 | !!! warning "" 59 | - 与公有云中的 AZ 概念相似,可以简单理解为 Region 中具体的机房 60 | - 在 vSphere 体系中我们使用不同的 Cluster 或者同个 Cluster 下的不同 Resource Pool 来实现 Zone 的划分 61 | - 选择可用区配置参数时,需要选择计算集群,资源池,存储类型以及网络适配器等信息,这些信息依赖于 vCenter 环境配置 62 | - 支持已有模版、默认模版和自定义模版 63 | 64 | ![zone-1](../../img/user_manual/plan/zone-1.png) 65 | 66 | ### 部署计划(Plan) 67 | 68 | !!! warning "" 69 | - 用来描述在哪个区域下,哪些可用区中,使用什么样的机器规格,部署什么类型的集群的一个抽象概念 70 | - 部署计划配置包括选择可用区(可用区可以单选或多选),并设置 Master 节点,Worker 节点的规格 71 | - 多主多节点集群可以选择多个可用区的部署计划 72 | 73 | ![plan-1](../../img/user_manual/plan/plan-1.png) 74 | 75 | ### 默认模版 76 | 77 | #### 下载 78 | 79 | !!! warning "默认模版" 80 | - 离线环境下,需要手动上传模版文件至 nexus 仓库 81 | - 模版文件下载地址如下: 82 | 83 | !!! warning "vSphere" 84 | - ovf: https://kubeoperator.fit2cloud.com/terraform/images/vsphere/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810.ovf 85 | - vmdk: https://kubeoperator.fit2cloud.com/terraform/images/vsphere/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810-1.vmdk 86 | 87 | !!! warning "OpenStack" 88 | - qcow2: https://kubeoperator.fit2cloud.com/terraform/images/openstack/kubeoperator_centos_7.6.1810-1.qcow2 89 | 90 | !!! warning "FusionCompute" 91 | - ovf: https://kubeoperator.fit2cloud.com/terraform/images/fusioncompute/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810.ovf 92 | - vhd: https://kubeoperator.fit2cloud.com/terraform/images/fusioncompute/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810-vda.vhd 93 | 94 | #### 上传 95 | 96 | !!! warning "" 97 | - 模版文件需要上传至 binary-k8s-raw 仓库 98 | - 仓库默认用户名/密码:admin/admin123 99 | 100 | ![template-upload](../../img/user_manual/plan/template-upload.png) 101 | 102 | !!! warning "vSphere" 103 | - 需上传 ovf 和 vmdk 文件 104 | - 文件路径:/terraform/images/vsphere/kubeoperator_centos_7.6.1810 105 | 106 | ![template-vsphere](../../img/user_manual/plan/template-vsphere.png) 107 | 108 | !!! warning "OpenStack" 109 | - 需上传 qcow2 文件 110 | - 文件路径:/terraform/images/openstack 111 | 112 | ![template-openstack](../../img/user_manual/plan/template-openstack.png) 113 | 114 | !!! warning "FusionCompute" 115 | - 需上传 ovf 和 vhd 文件 116 | - 文件路径:/terraform/images/fusioncompute/kubeoperator_centos_7.6.1810 117 | 118 | ![template-fusioncompute](../../img/user_manual/plan/template-fusioncompute.png) 119 | -------------------------------------------------------------------------------- /docs/quick_start/cluster_planning/manual.md: -------------------------------------------------------------------------------- 1 | 2 | !!! warning "" 3 | - 手动模式下,用户需要自行准备主机 4 | - 本章节以手动模式部署一个开发测试用集群,每台服务器的用途和需求如下表: 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
角色数量操作系统最低配置推荐配置
部署机1CentOS 7.64C 8G4C 16G
Master1CentOS 7.62C 4G4C 8G
Worker1CentOS 7.62C 4G4C 8G
36 | 37 | ### 添加主机 38 | 39 | !!! warning "" 40 | - 推荐使用全新的机器 41 | - KubeOperator 部署机不能作为 Kubernetes 集群节点使用 42 | 43 | ![host-add](../../img/user_manual/hosts/host-add.png) 44 | 45 | ### 主机列表 46 | 47 | !!! warning "" 48 | 主机列表可以看到已添加主机的详细信息,包括 IP、CPU、内存、操作系统等 49 | 50 | ![host-list](../../img/user_manual/hosts/host-list.png) 51 | -------------------------------------------------------------------------------- /docs/quick_start/system_settings.md: -------------------------------------------------------------------------------- 1 | ### 仓库 2 | 3 | !!! warning "" 4 | - CPU 架构: 支持 x86_64 和 aarch64 5 | - 协议: 支持 http 和 https(需手动启用) 6 | - 地址: 默认为部署 KubeOperator 的服务器 IP(将使用 IP:8081 来访问 nexus 仓库) 7 | 8 | ![system](../img/user_manual/system_management/registry.png) 9 | 10 | ### 凭据 11 | 12 | !!! warning "" 13 | - 凭据为 KubeOperator 连接主机资产的凭证。支持添加 password 和 privatekey 两种方式的凭据 14 | - 系统会初始化名称为 kubeoperator 的凭据(自动模式默认模版创建服务器的密码),默认密码为: KubeOperator@2019 15 | 16 | !!! warning "密钥" 17 | - 1、在 KubeOperator 主机通过 ssh-keygen 命令生成 id_rsa 和 id_rsa.pub 密钥对 18 | - 2、将 id_rsa.pub 公钥内容添加到目标主机 .ssh/authorized_keys 文件中 19 | - 3、将 id_rsa 私钥内容添加到凭据密钥框中 20 | 21 | ![password](../img/user_manual/system_management/key-1.png) 22 | 23 | ![key](../img/user_manual/system_management/key-2.png) 24 | 25 | ### NTP 26 | 27 | !!! warning "" 28 | - 支持配置多个 NTP 服务器地址 29 | - 支持手动启用或禁用 NTP 服务器 30 | 31 | ![ntp](../img/user_manual/system_management/ntp.png) 32 | 33 | ### Dashboard 34 | 35 | !!! warning "" 36 | 此处为 admin 用户登录凭据,需要和 Dashboard 用户管理中设置的密码保持一致。 37 | -------------------------------------------------------------------------------- /docs/system_arch.md: -------------------------------------------------------------------------------- 1 | 2 | ## 系统架构 3 | 4 | ![Architecture](https://kubeoperator.io/images/screenshot/ko-framework.svg) 5 | 6 | ## 组件说明 7 | 8 | !!! warning "" 9 | - kubeoperator_server: 提供平台业务管理相关功能的后台服务; 10 | - kubeoperator_ui: 提供平台业务管理相关功能的前台服务; 11 | - kubeoperator_kubepi: 提供 Dashboard 的功能; 12 | - kubeoperator_kobe: 提供执行 Ansible 任务创建 Kubernetes 集群的功能; 13 | - kubeoperator_kotf: 提供执行 Terraform 任务创建虚拟机的功能; 14 | - kubeoperator_webkubectl: 提供在 Web 浏览器中运行 kubectl 命令的功能; 15 | - kubeoperator_nginx: 平台统一入口,并运行控制台的 Web 界面服务; 16 | - kubeoperator_mysql: 数据库管理组件; 17 | - kubeoperator_nexus: 仓库组件,提供 Docker、Helm、Raw、Yum等资源仓库功能; 18 | 19 | !!! warning "" 20 | 各个组件间的关系可参考下图 21 | ![组件说明](./img/components.jpg) -------------------------------------------------------------------------------- /docs/user_manual/argocd.md: -------------------------------------------------------------------------------- 1 | # Argo CD 使用指南 2 | 3 | ## 什么是 Argo CD ? 4 | 5 | !!! warning "" 6 | Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署(CD)工具。Argo CD 可在 Git 存储库更改时自动同步和部署应用程序 7 | 8 | !!! warning "优势" 9 | - 应用定义、配置和环境信息是声明式的,并可以进行版本控制 10 | - 应用部署和生命周期管理是全自动化的、是可审计的,清晰易懂 11 | 12 | Argo CD 在 CI/CD 流程中的位置如下图所示: 13 | 14 | ![argocd-1](../img/guidelines/argocd/argocd-1.png ) 15 | 16 | - 借助 Argo CD 在 Kubernetes 集群上落地 CD 17 | 18 | !!! warning "步骤" 19 | - 将应用的 Git 仓库分为 Application Deployment file 和 Docker file 两个库。Docker file 用于存放应用的核心代码以及 Docker build file,后续将会直接打包成 Docker image;Application Deployment file 可以 Kustomize、Helm、Ksconnet、Jsonnet 等 多种 Kubernetes 包管理工具来定义;以 Helm 为例,Chart 中所使用到的 Image 由 Docker file Code 打包完成后提供 20 | - 使用 Jenkins 或 Gitlab 等 CI 工具进行自动化构建打包,并将 Docker image push 到 Harbor 镜像仓库 21 | - 使用 Argo CD 部署应用。Argo CD 可以独立于集群之外,并且支持管理多个 Kubernetes 集群。在 Argo CD 上配置好应用部署的相关信息后 Argo CD 便可以正常工作,Argo CD 会自动和代码仓库 Application deployment file 的内容进行校验,当代码仓库中应用属性等信息发生变化时,Argo CD 会自动同步更新 Kubernetes 集群中的应用;应用启动时,会从 Harbor 镜像仓库拉取 Docker image 22 | 23 | ## Argo CD 安装指南 24 | 25 | !!! warning "" 26 | - 通过 KubeOperator 应用商店部署 Argo CD 非常简单,我们已经在应用商店直接支持一键部署 Argo CD 27 | 28 | ![kubeapps-4](../img/guidelines/kubeapps/kubeapps-4.png) 29 | 30 | ### 部署 Argo CD 31 | 32 | ![argocd-2](../img/guidelines/argocd/argocd-2.png ) 33 | 34 | ### 修改默认配置 35 | 36 | !!! warning "" 37 | - 根据需要修改默认配置,再点击提交,或者直接使用默认参数提交 38 | 39 | ![argocd-3](../img/guidelines/argocd/argocd-3.png ) 40 | 41 | ### 等待服务就绪 42 | 43 | ![argocd-4](../img/guidelines/argocd/argocd-4.png ) 44 | 45 | ### 访问 Argo CD 46 | 47 | !!! warning "" 48 | - 我们是通过 NodePort 的方式访问 Argo CD ,获取 Argo CD 的 NodePort 信息,需要在该应用的描述信息中按照提示步骤,可以在 Kubernetes 集群任意 master、worker 节点中执行描述中的命令 49 | 50 | ![argocd-6](../img/guidelines/argocd/argocd-deploy05.png ) 51 | 52 | ![argocd-7](../img/guidelines/argocd/argocd-deploy06.png ) 53 | 54 | ## Argo CD 使用指南 55 | 56 | ### 创建 APP 57 | 58 | ![argocd-8](../img/guidelines/argocd/argocd-deploy07.png ) 59 | 60 | ### 填写信息 61 | 62 | !!! warning "" 63 | - 填写应用名称: guestbook ,项目: default ,同步策略: 手动 64 | 65 | ![argocd-9](../img/guidelines/argocd/argocd-deploy08.png ) 66 | 67 | ### 配置来源 68 | 69 | !!! warning "" 70 | - 这里配置的是 Git ,代码仓库的 URL 配置为 Github 上的项目地址: https://github.com/argoproj/argocd-example-apps.git ,Revision 选择: HEAD ,项目路径选择: guestbook 71 | 72 | ![argocd-10](../img/guidelines/argocd/argocd-deploy09.png ) 73 | 74 | ### 选择集群 75 | 76 | !!! warning "" 77 | - 应用部署的目标集群: https://kubernetes.default.svc ,因为此次的 Argo CD 部署在 Kubernetes 集群当中,默认 Argo CD 已经帮我们添加好当前所在的 Kubernetes 集群,直接使用即可。Namespace 选择: my-app , Namespcae 可以在 Kubernetes 集群上使用 # kubectl create namespace my-app 命令来创建 78 | 79 | ![argocd-11](../img/guidelines/argocd/argocd-deploy10.png ) 80 | 81 | ### 单击创建 82 | 83 | ![argocd-12](../img/guidelines/argocd/argocd-deploy11.png ) 84 | 85 | ### 同步(部署) 86 | 87 | !!! warning "" 88 | - 由于尚未部署应用程序,并且尚未创建 Kubernetes 资源,所以 Status 还是 OutOfSync 状态,因此我们还需要点击 SYNC 进行同步(部署)。同时也可以安装 Argo CD 客户端,使用 Argo CD CLI 进行同步 89 | 90 | ``` sh 91 | argocd app sync guestbook 92 | ``` 93 | 94 | ![argocd-12](../img/guidelines/argocd/argocd-deploy12.png ) 95 | 96 | ![argocd-13](../img/guidelines/argocd/argocd-deploy13.png ) 97 | 98 | !!! warning "" 99 | - 等待应用创建完成 100 | 101 | ![argocd-14](../img/guidelines/argocd/argocd-deploy14.png ) 102 | 103 | ![argocd-15](../img/guidelines/argocd/argocd-deploy15.png ) 104 | 105 | !!! warning "" 106 | - 完成后在 Kubernetes 集群中查看应用 107 | 108 | ![argocd-16](../img/guidelines/argocd/argocd-deploy16.png ) 109 | 110 | !!! warning "" 111 | - 想要了解 Argo CD 更多的详细内容,可以前往 Argo CD 官方文档查看 https://argoproj.github.io/argo-cd 112 | -------------------------------------------------------------------------------- /docs/user_manual/backup_account.md: -------------------------------------------------------------------------------- 1 | 2 | !!! warning "" 3 | 支持五种种类的存储,即 aliyun OSS、AWS S3、SFTP、MINIO 和 Azure 4 | 5 | ### 添加 6 | 7 | ![backup-create.png](../img/user_manual/backup_account/backup-1.png) 8 | 9 | ### 列表 10 | 11 | ![backup-list.png](../img/user_manual/backup_account/backup-2.png) 12 | 13 | ### 授权 14 | 15 | !!! warning "" 16 | 授权操作需要在项目管理菜单中实现(资源管理 - 备份账号),可以将备份账号授权到项目或集群 -------------------------------------------------------------------------------- /docs/user_manual/cluster.md: -------------------------------------------------------------------------------- 1 | 2 | ### 概览 3 | 4 | !!! warning "" 5 | - 集中显示了集群基本信息、容量信息和统计信息 6 | - 可下载 kubeconfig 文件(将 kubeconfig 文件中 cluster.server 地址修改为 master 节点 IP) 7 | 8 | ![overview-1](../img/user_manual/cluster/overview-1.png) 9 | 10 | !!! warning "" 11 | 支持在 web 页面执行 kubectl 命令查询集群信息等操作 12 | 13 | ![overview-2](../img/user_manual/cluster/overview-2.png) 14 | 15 | ### 节点 16 | 17 | !!! warning "" 18 | 集中显示了集群所有节点的基础信息 19 | 20 | ![node-1](../img/user_manual/cluster/node-1.png) 21 | 22 | !!! warning "" 23 | 点击节点,可查看节点标签、运行状态等具体信息 24 | 25 | ![node-detail](../img/user_manual/cluster/node-detail.png) 26 | 27 | !!! warning "驱散" 28 | - 驱散成功后,节点将处于不可调度状态 29 | - 安全模式: 如果节点拥有独立的 Pod 或临时的数据,它将被隔离但不会被驱散 30 | - 强制模式: 独立 Pods 和它们的数据将永久删除 31 | 32 | ![node-cordon](../img/user_manual/cluster/node-cordon.png) 33 | 34 | !!! warning "激活" 35 | 撤销已驱散节点的不可调度状态 36 | 37 | ### 命名空间 38 | 39 | !!! warning "" 40 | - 列表显示为集群中现有的 namespace,支持创建和删除操作 41 | - 系统默认和 kube-operator namespace 不支持删除 42 | 43 | ![namespace-1](../img/user_manual/cluster/namespace-1.png) 44 | 45 | ### 存储 46 | 47 | !!! warning "" 48 | 设置存储提供商(provisioner)、存储类(storageclass)、持久卷(PersistentVolume) 49 | 50 | ![storage-1](../img/user_manual/cluster/storage-1.png) 51 | 52 | #### 存储提供商 53 | 54 | !!! warning "" 55 | 支持的类型有 nfs、external-ceph、rook-ceph、vsphere 和 oceanstor(华为 csi) 56 | 57 | !!! warning "" 58 | - nfs: 需要指定 nfs 服务端版本、IP 和共享目录 59 | - external-ceph: 创建成功之后,会在集群中初始化 ceph provisioner 相关 pod 60 | - rook-ceph: 需要指定 ceph 集群所需磁盘(集群所有节点都必须包含指定的磁盘,如sdb,sdc...) 61 | - vsphere: 集群服务器必须在指定 Folder 中(自动模式创建集群默认 Folder 为 kubeoperator),并且服务器名称要和集群 node 节点名称保持一致 62 | - oceanstor: 参考文档: https://github.com/Huawei/eSDK_K8S_Plugin/tree/master/docs/zh 63 | 64 | #### 存储类 65 | 66 | !!! warning "" 67 | 内置 local volume 存储提供商,如需添加其他类型,需要提前创建对应类型的存储提供商 68 | 69 | !!! warning "external-ceph: 需要在 Kubernetes 中创建 admin 及 user 所需的 secret" 70 | 71 | ``` 72 | # 可在 ceph 服务端通过以下命令获得 secret key 73 | ceph auth get-key client.admin 74 | 75 | # 创建 admin secret 76 | kubectl create secret generic ceph-admin-secret \ 77 | --namespace=kube-system \ 78 | --type=kubernetes.io/rbd \ 79 | --from-literal=key=AQCtabcdKvXBORAA234AREkmsrmLdY67i8vxSQ== 80 | ``` 81 | 82 | #### 持久卷 83 | 84 | !!! warning "" 85 | 支持添加 hostpath 和 local volume 两种类型的持久卷,需要提前目标主机创建文件目录 86 | 87 | ### 事件 88 | 89 | !!! warning "" 90 | - 支持查看目标 namespace 下的系统事件 91 | - 支持启用 node-problem-detector 92 | 93 | ![cluster-events](../img/user_manual/cluster/cluster-events.png) 94 | 95 | ### 日志 96 | 97 | !!! warning "" 98 | 需要在【工具】页面开启 ElasticSearch 或 Loki 日志组件(不支持同时开启) 99 | 100 | ![logging-1](../img/user_manual/cluster/logging-1.png) 101 | 102 | ### 监控 103 | 104 | !!! warning "" 105 | 需要在【工具】页面开启 Prometheus 作为 Grafana 默认数据源 106 | 107 | ![monitor-1](../img/user_manual/cluster/monitor-1.png) 108 | 109 | ### 工具 110 | 111 | !!! warning "" 112 | 提供 prometheus、kubeapps、grafana、elasticsearch、loki、dashboard、registry和chartmuseum 八种管理工具,可根据需要自定义安装 113 | 114 | !!! warning "" 115 | - 点击启用按钮,可以设置 namespace 和是否启用存储等参数 116 | - 失败状态下,可点击启用按钮重新设置参数提交(会触发更新操作) 117 | 118 | ![tools-1](../img/user_manual/cluster/tools-1.png) 119 | 120 | ### istio 121 | 122 | !!! warning "" 123 | 默认安装版本为 1.8.0,ingress 和 egress 可根据需要手动开启 124 | 125 | ![istio-1](../img/user_manual/cluster/istio-1.png) 126 | 127 | ### 备份恢复 128 | 129 | !!! warning "" 130 | - 集群备份: 支持立即备份、定时备份(需要在系统设置中设置备份账号,并授权到目标项目) 131 | - 集群恢复: 支持备份列表文件恢复和本地备份文件恢复(上传 etcd 快照文件) 132 | 133 | ![cluster-backup-1](../img/user_manual/cluster/cluster-backup-1.png) 134 | 135 | !!! warning "日志" 136 | 可以查看针对集群的备份、恢复记录以及任务执行异常时的错误日志 137 | 138 | ![cluster-backup-2](../img/user_manual/cluster/cluster-backup-2.png) 139 | 140 | ### CIS 扫描 141 | 142 | !!! warning "" 143 | 通过 CIS 安全扫描功能,可以帮助集群管理员检查Kubernetes集群是否已经安全部署 144 | 145 | ![cis-scan](../img/user_manual/cluster/cis-scan.png) 146 | 147 | ### 集群升级 148 | 149 | !!! warning "" 150 | - 进入【项目】菜单,选中目标集群,点击【升级】按钮,选择要升级到的目标版本 151 | - 升级之前,会先检测当前 kubernetes 集群中 etcd、docker/containerd 和 kubernetes 版本,若检测结果为可升级,将会对 etcd、docker/containerd、kubernetes 进行统一升级,从而保证集群各组件之间的兼容性 152 | - 升级过程中,支持查看任务实时的日志输出 153 | 154 | ![cluster-upgrade](../img/user_manual/cluster/cluster-upgrade.png) 155 | 156 | ### 集群扩容、缩容 157 | 158 | !!! warning "worker 节点扩容" 159 | - 手动模式需要选择要添加的主机(主机需要在项目管理中授权到目标集群,并且主机状态为运行中) 160 | - 自动模式输入要扩容 worker 节点的数量 161 | 162 | ![node-3](../img/user_manual/cluster/node-3.png) 163 | 164 | ![node-2](../img/user_manual/cluster/node-2.png) 165 | 166 | !!! warning "worker 节点缩容" 167 | - 自动模式: 将所选节点在集群中删除,然后删除所选节点虚拟机 168 | - 手动模式: 将所选节点在集群中删除,然后在所选节点执行卸载脚本(删除节点上安装的 k8s 集群所依赖的服务) 169 | - 强制删除: 将忽略脚本执行过程中的错误信息,强制删除数据 170 | 171 | ![node-4](../img/user_manual/cluster/node-4.png) 172 | 173 | !!! warning "注意" 174 | 手动模式节点删除成功后,要手动重启该节点来删除虚拟网卡等信息 175 | 176 | ### 集群诊断、修复 177 | 178 | !!! warning "诊断" 179 | - 检测节点可连接性 180 | - 检测集群 Token 是否匹配 181 | - 检测集群 API 是否已就绪 182 | - 检测集群节点是否同步 183 | - 检测集群代理 IP 是否匹配 184 | 185 | ![cluster-diagnosis](../img/user_manual/cluster/cluster-diagnosis.png) 186 | 187 | !!! warning "修复" 188 | 存在异常状态的情况下,可点击修复按钮来修复相关问题 189 | 190 | ### 集群卸载 191 | 192 | !!! warning "" 193 | - 自动模式: 删除 KubeOperator 创建的虚拟机 194 | - 手动模式: 在集群所有节点执行卸载任务,删除安装 k8s 集群所依赖的服务(集群卸载完成后,要手动重启节点来删除虚拟网卡等信息) 195 | - 强制删除: 如果 k8s 集群存在失联状态的节点,可勾选强制删除来删除集群 196 | 197 | ![cluster-remove](../img/user_manual/cluster/cluster-remove.png) -------------------------------------------------------------------------------- /docs/user_manual/hosts.md: -------------------------------------------------------------------------------- 1 | 2 | !!! warning "" 3 | 手动模式创建集群,用户需要自行准备主机 4 | 5 | ### 列表 6 | 7 | !!! warning "" 8 | - 主机列表可以查看已添加主机的详细信息,包括 IP、CPU、内存、操作系统等 9 | - 点击主机,查看主机基础信息和磁盘信息 10 | 11 | ![host-list](../img/user_manual/hosts/host-list.png) 12 | 13 | ![host-detail](../img/user_manual/hosts/host-detail.png) 14 | 15 | ### 添加 16 | 17 | !!! warning "" 18 | - 集群节点推荐使用全新的服务器 19 | - KubeOperator 部署机不能作为 Kubernetes 集群节点使用 20 | 21 | ![host-add](../img/user_manual/hosts/host-add.png) 22 | 23 | ### 编辑 24 | 25 | !!! warning "" 26 | 支持编辑非绑定状态的主机 27 | 28 | ![host-edit](../img/user_manual/hosts/host-edit.png) 29 | 30 | ### 导入 31 | 32 | !!! warning "" 33 | 点击批量导入按钮,点击下载模版链接下载excel模版并添加主机信息 34 | 35 | ![host-import](../img/user_manual/hosts/host-import.png) 36 | 37 | ![host-import-excel](../img/user_manual/hosts/host-import-excel.png) 38 | 39 | ### 授权 40 | 41 | !!! warning "" 42 | 授权操作需要在项目管理菜单中实现(资源管理 - 备份账号),可以将主机授权到项目或集群 43 | 44 | ### 同步 45 | 46 | !!! warning "" 47 | 如果主机状态异常或主机配置有手动更新,可以点击同步按钮来实现主机状态和配置的一致 48 | 49 | ![host-refresh](../img/user_manual/hosts/host-refresh.png) 50 | 51 | ### 批量操作 52 | 53 | !!! warning "" 54 | 支持批量修改主机凭据和端口 55 | -------------------------------------------------------------------------------- /docs/user_manual/kubeapps.md: -------------------------------------------------------------------------------- 1 | ## Kubeapps 使用指南 2 | 3 | ### 什么是 KubeApps ? 4 | 5 | !!! warning "" 6 | Kubeapps 是一个应用商店,可以通过 Web UI 在 Kubernetes 集群中部署和管理应用程序 7 | 8 | !!! warning "主要功能" 9 | - 从 Helm Chart 仓库中浏览并部署 Helm Chart 应用 10 | - 集群中已有 Helm chart 应用的查看、升级和卸载 11 | - 支持自定义 Helm Chart 仓库(比如 ChartMuseum 和 JFrog Artifactory 等) 12 | - 基于 Kubernetes RBAC 的身份验证和授权 13 | 14 | ### 安装 KubeApps 15 | 16 | !!! warning "" 17 | 进入目标集群,在【工具】tab页面点击启用 KubeApps。根据需要自定义存储 18 | 19 | ![kubeapps-2](../img/guidelines/kubeapps/kubeapps-2.png) 20 | 21 | ### 使用 KubeApps 22 | 23 | !!! warning "" 24 | KubeApps 安装完成后,单击 【转到】 按钮,可以安全地访问 KubeApps Dashboard 25 | 26 | ![kubeapps-3](../img/guidelines/kubeapps/kubeapps-3.png) 27 | 28 | ### 部署应用 29 | 30 | !!! warning "" 31 | 在 Dashboard 中的【Catalog】页中可以看到系统默认自带的应用,可选择一个应用程序部署 32 | 33 | ![kubeapps-4](../img/guidelines/kubeapps/kubeapps-4.png) 34 | 35 | 36 | !!! warning "" 37 | 首选根据用户需要选择一个 namespace,这里选择 kube-operator,然后单击部署应用,可以看到【应用商店】里面目前支持的应用列表。选择 GitLab 应用后,在应用页面右侧单击“Deploy”按钮 38 | 39 | ![gitlab-1](../img/guidelines/kubeapps/gitlab-1.png) 40 | 41 | !!! warning "" 42 | 系统将提示输入应用程序的名称,还可以看到目前版本,以及 GitLab 应用 YAML 配置文件,用户可根据自身需求修改该配置文件 43 | 44 | ![gitlab-2](../img/guidelines/kubeapps/gitlab-2.png) 45 | 46 | !!! warning "" 47 | 根据实际情况,自定义存储(storageClass)、Ingress等变量 48 | 49 | !!! warning "" 50 | 在最下面点击 “Submit” 按钮,该应用程序将被部署,部署成功后,应用变为就绪状态 51 | 52 | ![gitlab-3](../img/guidelines/kubeapps/gitlab-3.png) 53 | 54 | !!! warning "" 55 | 要获取 GitLab 用户名和密码, 请参考部署页面的 “Notes” 部分。如果 Service 类型为 Ingress,要将该 URL 添加到本地 hosts 解析 56 | 57 | ### 删除应用 58 | 59 | !!! warning "" 60 | 部署完成的应用如果要删除,可以在【Applications】进入 GitLab 应用后,单击右侧 “Delete” 按钮确定即可删除 61 | 62 | ![gitlab-4](../img/guidelines/kubeapps/gitlab-4.png) 63 | 64 | ### 添加存储库 65 | 66 | !!! warning "" 67 | KubeApps 支持添加外部应用仓库,在【Configuration】下拉菜单“App Repositories“页面,单击“Add App Repository” 68 | 69 | ![kubeapps-5](../img/guidelines/kubeapps/kubeapps-5.png) 70 | 71 | ### 推送 chart 镜像(离线包安装集群可选) 72 | 73 | !!! warning "" 74 | 包括 Argo CD、Gitlab、Harbor、Jenkins、Weave Scope 和 Sonarqube 镜像,用户可以根据需要下载并安装 75 | 76 | !!! warning "" 77 | 安装包下载链接: https://github.com/KubeOperator/charts/releases 78 | 79 | #### 安装步骤: 80 | 81 | !!! warning "" 82 | ```sh 83 | # 首先登录 kubeoperator 部署机,进入 /tmp (或其他自定义)目录,将离线包拷贝到该目录中 84 | cd /tmp 85 | 86 | # 解压文件到本目录 87 | tar zxvf gitlab.tar.gz && cd gitlab 88 | 89 | # 执行 install.sh 文件,将镜像推送到nexus仓库 90 | /bin/bash install.sh start 91 | 92 | # 选择是否使用外部Docker Image Registry y/n 93 | # 没有外部镜像仓库的情况下,可以选择 "n" 来使用 kubeoperator 部署节点的 nexus 仓库 registry.kubeoperator.io:8083) 94 | # nexus 默认用户名密码为: admin/admin123 95 | ``` 96 | -------------------------------------------------------------------------------- /docs/user_manual/plan.md: -------------------------------------------------------------------------------- 1 | ### IP 池配置 2 | 3 | !!! warning "" 4 | IP 池在创建可用区时使用,池中的 IP 地址将分配给虚拟机 5 | 6 | ![ip-pool-list](../img/user_manual/plan/ip-pool-list.png) 7 | 8 | #### 添加 IP 池 9 | 10 | !!! warning "" 11 | 创建 IP 池要配置好子网掩码、起止 IP、网关和 DNS 等 12 | 13 | ![ip-pool-add](../img/user_manual/plan/ip-pool-add.png) 14 | 15 | #### 查看 IP 使用情况 16 | 17 | !!! warning "" 18 | - 列表页点击 IP 使用情况可查看 IP 池中所有 IP 的状态(可达、可用和占用) 19 | - 在 IP 池页面,可手动添加 IP 段、同步 IP 状态等 20 | 21 | ![ip-pool-use](../img/user_manual/plan/ip-pool-use.png) 22 | 23 | ### 虚拟机配置 24 | 25 | !!! warning "" 26 | - 支持添加和修改虚拟机配置(CPU、内存) 27 | - 默认 small、medium、large、xlarge、2xlarge 和 4xlarge 六种配置 28 | 29 | ![virtual-config-list](../img/user_manual/plan/virtual-config-list.png) 30 | 31 | ### 自定义模版配置 32 | 33 | !!! warning "" 34 | - 支持 VMware vSphere 和 OpenStack 两种 IaaS 云平台 35 | 36 | ![custom-templates](../img/user_manual/plan/custom-templates.png) 37 | 38 | ### 区域(Region) 39 | 40 | !!! warning "" 41 | - 与公有云中的 Region 概念相似,可以简单理解为地理上的区域 42 | - 创建区域时,首先选择提供商,目前支持 VMware vSphere、OpenStack 和 FusionCompute 43 | - 配置参数时,需要提供 vSphere 环境信息,包括 vCenter 主机,端口,用户名和密码(建议直接绑定带有管理员角色的用户) 44 | - 单击【获取数据中心】,获取并绑定目标数据中心 45 | 46 | ![region-1](../img/user_manual/plan/region-1.png) 47 | 48 | ### 可用区(Zone) 49 | 50 | !!! warning "" 51 | - 与公有云中的 AZ 概念相似,可以简单理解为 Region 中具体的机房 52 | - 在 vSphere 体系中我们使用不同的 Cluster 或者同个 Cluster 下的不同 Resource Pool 来实现 Zone 的划分 53 | - 选择可用区配置参数时,需要选择计算集群,资源池,存储类型以及网络适配器等信息,这些信息依赖于 vCenter 环境配置 54 | - 支持已有模版、默认模版和自定义模版 55 | 56 | ![zone-1](../img/user_manual/plan/zone-1.png) 57 | 58 | ### 部署计划(Plan) 59 | 60 | !!! warning "" 61 | - 用来描述在哪个区域下,哪些可用区中,使用什么样的机器规格,部署什么类型的集群的一个抽象概念 62 | - 部署计划配置包括选择可用区(可用区可以单选或多选),并设置 Master 节点,Worker 节点的规格 63 | - 多主多节点集群可以选择多个可用区的部署计划 64 | 65 | ![plan-1](../img/user_manual/plan/plan-1.png) 66 | 67 | ### 默认模版 68 | 69 | #### 下载 70 | 71 | !!! warning "默认模版" 72 | - 离线环境下,需要手动上传模版文件至 nexus 仓库 73 | - 模版文件下载地址如下: 74 | 75 | !!! warning "vSphere" 76 | - ovf: https://kubeoperator.fit2cloud.com/terraform/images/vsphere/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810.ovf 77 | - vmdk: https://kubeoperator.fit2cloud.com/terraform/images/vsphere/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810-1.vmdk 78 | 79 | !!! warning "OpenStack" 80 | - qcow2: https://kubeoperator.fit2cloud.com/terraform/images/openstack/kubeoperator_centos_7.6.1810-1.qcow2 81 | 82 | !!! warning "FusionCompute" 83 | - ovf: https://kubeoperator.fit2cloud.com/terraform/images/fusioncompute/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810.ovf 84 | - vhd: https://kubeoperator.fit2cloud.com/terraform/images/fusioncompute/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810-vda.vhd 85 | 86 | #### 上传 87 | 88 | !!! warning "" 89 | - 模版文件需要上传至 binary-k8s-raw 仓库 90 | - 仓库默认用户名/密码:admin/admin123 91 | 92 | ![template-upload](../img/user_manual/plan/template-upload.png) 93 | 94 | !!! warning "vSphere" 95 | - 需上传 ovf 和 vmdk 文件 96 | - 文件路径:/terraform/images/vsphere/kubeoperator_centos_7.6.1810 97 | 98 | ![template-vsphere](../img/user_manual/plan/template-vsphere.png) 99 | 100 | !!! warning "OpenStack" 101 | - 需上传 qcow2 文件 102 | - 文件路径:/terraform/images/openstack 103 | 104 | ![template-openstack](../img/user_manual/plan/template-openstack.png) 105 | 106 | !!! warning "FusionCompute" 107 | - 需上传 ovf 和 vhd 文件 108 | - 文件路径:/terraform/images/fusioncompute/kubeoperator_centos_7.6.1810 109 | 110 | ![template-fusioncompute](../img/user_manual/plan/template-fusioncompute.png) 111 | -------------------------------------------------------------------------------- /docs/user_manual/project.md: -------------------------------------------------------------------------------- 1 | 2 | !!! warning "" 3 | - 系统会初始化一个默认项目: kubeoperator 4 | - 左侧导航为 项目 - 集群 树(设置成员、资源 和 Dashboard 时,均需区分项目或集群) 5 | 6 | ### 创建项目 7 | 8 | !!! warning "" 9 | - 系统管理员可以创建项目 10 | - 不同项目的集群除系统管理员外是不可见的 11 | 12 | ![project-list](../img/user_manual/project/project-list.png) 13 | 14 | ### 成员管理 15 | 16 | !!! warning "" 17 | 管理员可将用户设置为项目管理员或集群管理员 18 | 19 | ![project-3](../img/user_manual/project/project-3.png) 20 | 21 | ### 资源管理 22 | 23 | !!! warning "" 24 | - 资源包括主机、部署计划和备份账号 25 | - 手动模式集群进行 Worker 节点扩容时,需要先将主机授权到目标集群 26 | - 备份账号需要授权到目标集群后才能正常启用集群备份/恢复功能 27 | 28 | ![project-5](../img/user_manual/project/project-5.png) 29 | 30 | ### Dashboard 31 | 32 | !!! warning "" 33 | - 此处为集群列表 Dashboard 系统登录用户及凭据 34 | - 若项目和集群同时存在绑定的 Dashboard 用户,则集群绑定用户优先 35 | 36 | ![project-dashboard](../img/user_manual/project/project-dashboard.png) 37 | -------------------------------------------------------------------------------- /docs/user_manual/system_log.md: -------------------------------------------------------------------------------- 1 | 2 | !!! warning "" 3 | - 支持查看所有用户的操作记录(记录了用户、操作、操作内容、创建时间等信息) 4 | - 支持根据名称、操作内容、时间等条件模糊查询 5 | 6 | ![system-log.png](../img/user_manual/system_log/system-log.png) 7 | -------------------------------------------------------------------------------- /docs/user_manual/system_management.md: -------------------------------------------------------------------------------- 1 | ### 仓库 2 | 3 | !!! warning "" 4 | - CPU 架构: 支持 x86_64 和 aarch64 5 | - 协议: 支持 http 和 https(需手动启用) 6 | - 地址: 默认为部署 KubeOperator 的服务器 IP(将使用 IP:8081 来访问 nexus 仓库) 7 | 8 | #### 端口 9 | 10 | !!! warning "" 11 | - 8081: nexus 仓库管理端口 12 | - 8082: docker group 仓库端口(适用于 docker pull 操作) 13 | - 8083: docker hosted 仓库端口(适用于 docker push 操作) 14 | !!! warning "开启/关闭" 15 | - 出于安全考虑,可以手动关闭 nexus 对外暴露的端口 16 | - ./kubeoperator/docker-compose.yml,将对应的端口注释,koctl restart 重启服务即可 17 | 18 | #### 密码 19 | 20 | !!! warning "" 21 | 默认用户名/密码: admin/admin123(建议修改) 22 | !!! warning "修改密码" 23 | - 登录 nexus 系统修改默认密码 24 | - 将修改后的密码同步到 KubeOperator 仓库(KubeOperator 系统设置 - 仓库 - 编辑 - 修改密码) 25 | 26 | #### group 仓库 27 | 28 | !!! warning "" 29 | - 四个 proxy 仓库: 30 | !!! warning "" 31 | - docker hub: https://registry-1.docker.io 32 | - quay.io: https://quay.io 33 | - elastic: https://docker.elastic.co 34 | - aliyun: https://registry.cn-qingdao.aliyuncs.com 35 | - 一个 hosted 类型仓库: 36 | !!! warning "" 37 | - kubeoperator 38 | 39 | #### hosted 仓库 40 | 41 | !!! warning "" 42 | 该类型仓库支持用户手动 push 镜像 43 | !!! warning "push 镜像" 44 | - docker login ip:8083 -u admin -p admin123 45 | - docker tag nginx:alpine ip:8083/nginx:alpine 46 | - docker push ip:8083/nginx:alpine 47 | 48 | ![registry](../img/user_manual/system_management/registry.png) 49 | 50 | !!! warning "注意" 51 | 如果部署K8S集群时需要K8S节点采用 x86_64 和 arm64 混合部署,则需要添加两个不同CPU架构的仓库 52 | 53 | !!! warning "自定义 Nexus 仓库端口" 54 | - v3.9.0 版本开始,KubeOperator 支持用户自定义 Nexus 仓库端口 55 | - 修改 ./kubeoperator.conf 配置文件,koctl restart 重启服务后生效 56 | - 在 系统设置 - 仓库设置 的高级设置中完成仓库端口的变更 57 | 58 | ### 凭据 59 | 60 | !!! warning "" 61 | - 凭据为 KubeOperator 连接主机资产的凭证。支持添加 password 和 privatekey 两种方式的凭据 62 | - 系统会初始化名称为 kubeoperator 的凭据(自动模式默认模版创建服务器的密码),默认密码为: KubeOperator@2019 63 | 64 | !!! warning "密钥" 65 | - 1、在 KubeOperator 主机通过 ssh-keygen 命令生成 id_rsa 和 id_rsa.pub 密钥对 66 | - 2、将 id_rsa.pub 公钥内容添加到目标主机 .ssh/authorized_keys 文件中 67 | - 3、将 id_rsa 私钥内容添加到凭据密钥框中 68 | 69 | ![password](../img/user_manual/system_management/key-1.png) 70 | 71 | ![key](../img/user_manual/system_management/key-2.png) 72 | 73 | ### NTP 74 | 75 | !!! warning "" 76 | - 支持配置多个 NTP 服务器地址 77 | - 支持手动启用或禁用 NTP 服务器 78 | 79 | ![ntp](../img/user_manual/system_management/ntp.png) 80 | 81 | ### Dashboard 82 | 83 | !!! warning "" 84 | 此处为 admin 用户登录凭据,需要和 Dashboard 用户管理中设置的密码保持一致。 85 | 86 | ### LDAP 87 | 88 | !!! warning "" 89 | LDAP 支持 使用 LADP 与 Windows AD 的用户作为 KubeOperator 登录用户。 90 | 91 | !!! warning "选项说明" 92 | | name | explain | 93 | | :---------- | :----------------------------------------| 94 | | 地址 | serverurl | 95 | | 端口 | 389 | 96 | | 用户名 | CN=account,CN=Users,DC=ko,DC=com | 97 | | 密码 | ******** | 98 | | 用户过滤 DN | dc=kubeoperator,dc=com | 99 | | 用户过滤器 | ((objectClass=organizationalPerson)) | 100 | | 用户属性映射 | {"Name": "cn", "Email": "mail"} | 101 | 102 | ### 消息 103 | 104 | !!! warning "" 105 | 必须设置才能使用与消息订阅相关的功能 106 | 107 | !!! warning "邮箱" 108 | | 名称 | 示例 | 备注 | 109 | | ---------- | ---------------- | ---------------------------------- | 110 | | SMTP地址 | smtp.qq.com | 服务商提供的 smtp 服务器 | 111 | | 端口 | 25 | 通常是 `25` | 112 | | 用户名 | 296015668@qq.com | 通常是 `user@domain.com` | 113 | | 密码 | **************** | 每次 `测试连接` 都需要重新输入密码 | 114 | | 测试用户 | 296015668@qq.com | `测试连接` 必须要输入 | 115 | 116 | !!! warning "" 117 | - 企业微信: [企业微信基本概念](https://developer.work.weixin.qq.com/document/path/90665) 118 | - 钉钉: [钉钉机器人消息发送设置](https://open.dingtalk.com/document/group/assign-a-webhook-url-to-an-internal-chatbot) 119 | -------------------------------------------------------------------------------- /docs/user_manual/user_management.md: -------------------------------------------------------------------------------- 1 | 2 | !!! warning "提示" 3 | - 请妥善保管账号密码,不要将密码泄露给他人 4 | - 为了提高 KubeOperator 账号的安全性,建议您定期修改密码 5 | 6 | !!! warning "修改建议" 7 | - 请勿使用简单密码登录,建议密码设为8-30位 8 | - 密码至少同时包含下列四种字符中的两种: 9 | - 1) 大写字母 10 | - 2) 小写字母 11 | - 3) 数字 12 | - 4) 非字母数字字符(如!、@、#等) 13 | - 密码中不得包含登录用户名 14 | - 密码修改两个月至少修改一次 15 | 16 | !!! warning "超级管理员" 17 | 用户名: admin, 初始密码: kubeoperator@admin123 18 | 19 | ### 添加 20 | 21 | !!! warning "" 22 | - 超级管理员可以添加管理员或者普通用户 23 | - 管理员可以添加普通用户 24 | 25 | ![admin-user](../img/user_manual/user_management/user-1.png) 26 | 27 | ### 授权 28 | 29 | !!! warning "" 30 | 添加普通用户后(初始状态没有任何权限),需要在【项目管理】菜单中将其添加为项目管理员或集群管理员 31 | 32 | ### 编辑 33 | 34 | !!! warning "" 35 | - 超级管理员可以修改用户角色并重置用户密码 36 | - 管理员可以修改普通用户邮箱 37 | - 超级管理员或者管理员可以针对用户进行删除、禁用和启用等操作 38 | 39 | ### 修改密码 40 | 41 | !!! warning "" 42 | 点击右上角用户下拉按钮,选择个人设置 - 修改密码 43 | -------------------------------------------------------------------------------- /docs/user_manual/version.md: -------------------------------------------------------------------------------- 1 | 2 | ### 版本详情 3 | 4 | !!! warning "" 5 | 点击详情按钮,支持查看 Kubernetes 各组件的版本信息 6 | 7 | ![version-2](../img/user_manual/version/version-2.png) 8 | 9 | ### 版本启用 10 | 11 | !!! warning "" 12 | 开启目标版本后,才支持创建该版本的 Kubernetes 集群 13 | 14 | ![version-1](../img/user_manual/version/version-1.png) 15 | 16 | ### 离线包 17 | 18 | !!! warning "" 19 | 离线包中默认携带一个最新的 Kubernetes 版本。如果当前是离线环境,则需要手动执行脚本来生成目标版本的 Kubernetes 离线包,并将其推送至 nexus 仓库 20 | 21 | #### 构建离线包 22 | 23 | !!! warning "" 24 | KubeOperator 支持的 Kubernetes 版本 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 |
K8S 版本
v1.22.6v1.22.8v1.22.10v1.22.12
v1.20.4v1.20.6v1.20.8v1.20.10v1.20.12v1.20.14
v1.18.4v1.18.6v1.18.8v1.18.10v1.18.12v1.18.14v1.18.15v1.18.18v1.18.20
68 | 69 | !!! warning "" 70 | 执行构建离线包的服务器需要能够访问互联网 71 | 72 | !!! warning "" 73 | ```sh 74 | # 使用git下载项目源码文件 75 | git clone https://github.com/KubeOperator/K8SVersionManage.git 76 | cd K8SVersionManage 77 | # 切换到目标分支(与 KubeOperator 版本分支保持一致) 78 | git checkout v3.16 79 | # 例:打包 v1.20.6 版本的离线包。可根据实际情况修改构建对应版本到离线包 80 | bash build.sh v1.20.6 81 | ``` 82 | !!! warning "" 83 | build 完成后,会生成类似 v1.20.6_offline.tar.gz的离线包 84 | 85 | #### 推送离线包 86 | 87 | !!! warning "" 88 | - 将生成的目标版本离线包上传至 KubeOperator 部署机,运行 upload.sh 脚本 89 | - 如有修改 nexus 仓库默认的 8081-8083 端口,在离线包解压后需要手动将 upload.sh 脚本中端口修改为目标端口 90 | 91 | ```sh 92 | # 解压离线包 93 | tar zxvf v1.20.6_offline.tar.gz 94 | # 执行上传脚本 95 | cd v1.20.6_offline 96 | # 例:推送 v1.20.6 版本的离线包 97 | bash upload.sh 98 | ``` 99 | 100 | !!! warning "" 101 | - 仓库地址:KubeOperator 默认仓库地址(registry.kubeoperator.io) 102 | - 仓库用户名:KubeOperator 默认仓库用户名(admin) 103 | - 仓库密码:KubeOperator 默认仓库密码(admin123) 104 | -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: 'KubeOperator 文档' 2 | site_url: 'https://kubeoperator.io' 3 | site_author: 'wanghe' 4 | site_description: 'KubeOperator 是一个开源的轻量级 Kubernetes 发行版' 5 | 6 | repo_name: 'KubeOperator/KubeOperator' 7 | repo_url: 'https://github.com/KubeOperator/KubeOperator' 8 | edit_uri: '' 9 | 10 | theme: 11 | name: 'material' 12 | logo: 'img/kubeoperator-white.png' 13 | favicon: 'img/KubeOperator-icon.png' 14 | language: 'zh' 15 | palette: 16 | - scheme: default 17 | accent: 'red' 18 | toggle: 19 | icon: material/weather-sunny 20 | name: Switch to dark mode 21 | - scheme: slate 22 | accent: 'red' 23 | toggle: 24 | icon: material/weather-night 25 | name: Switch to light mode 26 | features: 27 | - navigation.instant 28 | - navigation.tracking 29 | - navigation.indexes 30 | - navigation.top 31 | - search.suggest 32 | - search.highlight 33 | - search.share 34 | - header.autohide 35 | font: false 36 | custom_dir: 'theme' 37 | icon: 38 | repo: fontawesome/brands/github 39 | 40 | nav: 41 | - 总体介绍: index.md 42 | - 主要概念: concept.md 43 | - 系统架构: system_arch.md 44 | - 安装部署: installation/install.md 45 | - 快速入门: 46 | - 系统设置: quick_start/system_settings.md 47 | - 集群规划: 48 | - 手动模式: quick_start/cluster_planning/manual.md 49 | - 自动模式: quick_start/cluster_planning/automatic.md 50 | - 集群部署: quick_start/cluster_deployment.md 51 | - 集群导入: quick_start/cluster_import.md 52 | - 使用指南: 53 | - 集群: user_manual/cluster.md 54 | - 主机: user_manual/hosts.md 55 | - 自动模式: user_manual/plan.md 56 | - 备份账号: user_manual/backup_account.md 57 | - 版本管理: user_manual/version.md 58 | - 项目管理: user_manual/project.md 59 | - 用户管理: user_manual/user_management.md 60 | - 系统日志: user_manual/system_log.md 61 | - 系统设置: user_manual/system_management.md 62 | - 开发文档: 63 | - 开发环境搭建: dev/dev_manual.md 64 | - API 文档: dev/rest_api.md 65 | - 更新日志: about/changelog.md 66 | 67 | markdown_extensions: 68 | - admonition 69 | - abbr 70 | - attr_list 71 | - def_list 72 | - footnotes 73 | - meta 74 | - toc: 75 | permalink: ⚓︎ 76 | - pymdownx.arithmatex: 77 | generic: true 78 | - pymdownx.betterem: 79 | smart_enable: all 80 | - pymdownx.caret 81 | - pymdownx.critic 82 | - pymdownx.details 83 | - pymdownx.emoji: 84 | emoji_index: !!python/name:materialx.emoji.twemoji 85 | emoji_generator: !!python/name:materialx.emoji.to_svg 86 | options: 87 | custom_icons: 88 | - theme/.icons 89 | - pymdownx.inlinehilite 90 | - pymdownx.keys 91 | - pymdownx.superfences: 92 | custom_fences: 93 | - name: mermaid 94 | class: mermaid 95 | format: !!python/name:pymdownx.superfences.fence_code_format 96 | - pymdownx.saneheaders 97 | - pymdownx.magiclink: 98 | repo_url_shortener: true 99 | repo_url_shorthand: true 100 | - pymdownx.mark 101 | - pymdownx.smartsymbols 102 | - pymdownx.snippets: 103 | check_paths: true 104 | - pymdownx.tabbed: 105 | alternate_style: true 106 | - pymdownx.tasklist: 107 | custom_checkbox: true 108 | - pymdownx.tilde 109 | 110 | extra: 111 | kubeoperator: 112 | version: v3.16.4 113 | search: 114 | separator: '[\s\-\.]+' 115 | language: 'zh' 116 | Content-Encoding: gzip 117 | generator: false 118 | version: 119 | default: master 120 | provider: mike 121 | social: 122 | - icon: fontawesome/brands/github 123 | link: https://github.com/KubeOperator 124 | - icon: fontawesome/solid/envelope 125 | link: mailto:support@fit2cloud.com 126 | - icon: fontawesome/brands/skype 127 | link: tel://400-052-0755 128 | 129 | extra_css: 130 | - css/extra.css 131 | 132 | copyright: Copyright © 2014-2024 杭州飞致云信息科技有限公司, All Rights Reserved. 京ICP备15023818号 133 | plugins: 134 | - search 135 | - macros 136 | -------------------------------------------------------------------------------- /readthedocs.yml: -------------------------------------------------------------------------------- 1 | build: 2 | image: latest 3 | 4 | requirements_file: requirements/requirements.txt 5 | -------------------------------------------------------------------------------- /requirements/requirements.txt: -------------------------------------------------------------------------------- 1 | mkdocs-material>=8.4.0 2 | mkdocs-macros-plugin>=0.7.0 3 | mike>=1.1.2 4 | -------------------------------------------------------------------------------- /theme/.icons/Bilibili_Logo_Blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /theme/css/f2c-header.css: -------------------------------------------------------------------------------- 1 | .sticky{position: fixed;top: 0;right: 0;left: 0;z-index: 10;} 2 | /*! CSS Used from: https://metersphere.io/css/bootstrap.min.css */ 3 | *,::after,::before{box-sizing:border-box;} 4 | h4,h5{margin-top:0;margin-bottom:.5rem;} 5 | img{vertical-align:middle;border-style:none;} 6 | svg{overflow:hidden;vertical-align:middle;} 7 | button{border-radius:0;} 8 | button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color;} 9 | button{margin:0;font-family:inherit;font-size:inherit;line-height:inherit;} 10 | button{overflow:visible;} 11 | button{text-transform:none;} 12 | [type=button],button{-webkit-appearance:button;} 13 | [type=button]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none;} 14 | h4,h5{margin-bottom:.5rem;font-weight:500;line-height:1.2;} 15 | h4{font-size:1.5rem;} 16 | h5{font-size:1.25rem;} 17 | .container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto;} 18 | @media (min-width:576px){ 19 | .container{max-width:540px;} 20 | } 21 | @media (min-width:768px){ 22 | .container{max-width:720px;} 23 | } 24 | @media (min-width:992px){ 25 | .container{max-width:960px;} 26 | } 27 | @media (min-width:1200px){ 28 | .container{max-width:1140px;} 29 | } 30 | @media (min-width:576px){ 31 | .container{max-width:540px;} 32 | } 33 | @media (min-width:768px){ 34 | .container{max-width:720px;} 35 | } 36 | @media (min-width:992px){ 37 | .container{max-width:960px;} 38 | } 39 | @media (min-width:1200px){ 40 | .container{max-width:1140px;} 41 | } 42 | .row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px;} 43 | .col-6,.col-lg-3,.col-md-6{position:relative;width:100%;padding-right:15px;padding-left:15px;} 44 | .col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%;} 45 | @media (min-width:768px){ 46 | .col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%;} 47 | } 48 | @media (min-width:992px){ 49 | .col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%;} 50 | } 51 | .card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem;} 52 | .card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem;} 53 | .bg-white{background-color:#fff!important;} 54 | .border-0{border:0!important;} 55 | .rounded{border-radius:.25rem!important;} 56 | .rounded-circle{border-radius:50%!important;} 57 | .d-inline-block{display:inline-block!important;} 58 | .shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;} 59 | .shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;} 60 | .mb-1{margin-bottom:.25rem!important;} 61 | .mt-3{margin-top:1rem!important;} 62 | .mt-4{margin-top:1.5rem!important;} 63 | .pr-0{padding-right:0!important;} 64 | .pl-0{padding-left:0!important;} 65 | .pt-2{padding-top:.5rem!important;} 66 | .text-center{text-align:center!important;} 67 | .text-muted{color:#6c757d!important;} 68 | @media print{ 69 | *,::after,::before{text-shadow:none!important;box-shadow:none!important;} 70 | a:not(.btn){text-decoration:underline;} 71 | img{page-break-inside:avoid;} 72 | p{orphans:3;widows:3;} 73 | .container{min-width:992px!important;} 74 | } 75 | /*! CSS Used from: https://metersphere.io/css/magnific-popup.css */ 76 | button::-moz-focus-inner{padding:0;border:0;} 77 | /*! CSS Used from: https://metersphere.io/css/mega.css */ 78 | @media (max-width:767px){ 79 | .visible-xs{display:block!important;} 80 | } 81 | @media print{ 82 | .hidden-print{display:none!important;} 83 | } 84 | .mega-nav-sandbox{width:100%;} 85 | .mega-nav-sandbox *{letter-spacing:0;line-height:1.42857143;margin-bottom:0;margin-top:0;text-transform:none;} 86 | .mega-nav-sandbox h4,.mega-nav-sandbox h5{line-height:1.1;font-size: 24px;} 87 | .mega-nav-sandbox .mega-nav-banner{background-color:black;color:white;font-family:"klavika-web", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:16px;min-height:3em;} 88 | .mega-nav-sandbox .mega-nav-banner,.mega-nav-sandbox .mega-nav-banner>.container{align-items:center;display:flex;} 89 | .mega-nav-sandbox .mega-nav-banner .text-muted{color:#ffffff;} 90 | .mega-nav-sandbox .mega-nav-banner-logo>img{height:40px;} 91 | .mega-nav-sandbox .mega-nav-banner-item:first-child{display:none;} 92 | .mega-nav-sandbox .mega-nav-banner-item:last-child{margin-left:auto;} 93 | .mega-nav-sandbox .mega-nav-tagline{align-items:center;display:inline-flex;margin-bottom:0;vertical-align:-1px;} 94 | .mega-nav-sandbox .mega-nav{display:inline-block;font-family:"klavika-web", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;line-height:1.35714;} 95 | .mega-nav-sandbox .mega-nav h4,.mega-nav-sandbox .mega-nav h5,.mega-nav-sandbox .mega-nav p{margin-top:0;} 96 | .mega-nav-sandbox .mega-nav img{max-width:100%;} 97 | .mega-nav-sandbox .mega-nav,.mega-nav-sandbox .mega-nav *{box-sizing:border-box;} 98 | .mega-nav-sandbox .mega-nav .visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;} 99 | .mega-nav-sandbox .mega-nav-icon{display:inline-block;fill:currentColor;height:1em;stroke:currentColor;width:1em;} 100 | .mega-nav-sandbox .mega-nav-icon-angle-right{height:0.8em;transform:rotate(-90deg);width:0.8em;color:#8492a6;} 101 | .mega-nav-sandbox .open>.mega-nav-ctrl .mega-nav-icon-angle-right{transform:rotate(0);} 102 | .mega-nav-sandbox .mega-nav-ctrl{background-color:transparent;border:0;margin-left:0.5em;padding:0;text-align:center;vertical-align:middle;} 103 | .mega-nav-sandbox .mega-nav-ctrl:active,.mega-nav-sandbox .mega-nav-ctrl:focus,.mega-nav-sandbox .mega-nav-ctrl:hover,.mega-nav-sandbox .mega-nav-ctrl:visited{outline:none;} 104 | .mega-nav-sandbox .mega-nav-ctrl-items{align-items:center;display:flex;padding-top:1px;} 105 | .mega-nav-sandbox .mega-nav-icon-outline{border:1px solid #8492a6;margin-top:-1px;padding:0.5em;} 106 | .mega-nav-sandbox .mega-nav-icon-outline .mega-nav-icon{display:block;} 107 | .mega-nav-sandbox .mega-nav-body-ct{bottom:0;display:none;left:0;overflow-y:auto;position:fixed;right:0;top:0;z-index:1100;} 108 | .mega-nav-sandbox .mega-nav.open .mega-nav-body-ct{display:block;} 109 | .mega-nav-sandbox .mega-nav-body{background-color:white;box-shadow:0 2px 16px rgba(79,99,122,0.2);color:black;margin:1em;padding:1em;} 110 | .mega-nav-sandbox .mega-nav-body-footer{color:#a4b1b2;display:none;} 111 | .mega-nav-sandbox .mega-nav-close{background-color:transparent;border:1px solid currentColor;float:right;margin-left:1em;margin-bottom:1em;padding:0.5em;text-align:center;} 112 | .mega-nav-sandbox .mega-nav-close:hover,.mega-nav-sandbox .mega-nav-close:focus{color:#333333;outline:none;} 113 | .mega-nav-sandbox .mega-nav-close:active{outline:none;} 114 | .mega-nav-sandbox .mega-nav-close .mega-nav-icon{display:block;} 115 | @media (min-width: 570px){ 116 | .mega-nav-sandbox .mega-nav-body{padding:2em 2em 1em;} 117 | } 118 | @media (min-width: 768px){ 119 | .mega-nav-sandbox .mega-nav-banner-item:first-child{display:block;} 120 | } 121 | @media (min-width: 992px){ 122 | .mega-nav-sandbox .mega-nav{position:relative;} 123 | .mega-nav-sandbox .mega-nav::before{border-bottom:1em solid white;border-left:0.71429em solid transparent;border-right:0.71429em solid transparent;content:' ';display:none;height:0;left:50%;position:absolute;top:100%;transform:translateX(-50%);width:0;z-index:1101;} 124 | .mega-nav-sandbox .mega-nav-body-ct{bottom:auto;left:auto;overflow:visible;position:absolute;right:0;top:100%;width:940px;} 125 | .mega-nav-sandbox .mega-nav-body{margin:1em 0 0;} 126 | .mega-nav-sandbox .mega-nav-body-header{text-align:center;} 127 | .mega-nav-sandbox .mega-nav-body-header-item:last-child{margin-left:auto;} 128 | .mega-nav-sandbox .mega-nav-body-footer{display:block;padding-top:1em;} 129 | .mega-nav-sandbox .mega-nav-close{display:none;} 130 | } 131 | @media (min-width: 1200px){ 132 | .mega-nav-sandbox .mega-nav-body-ct{width:1140px;} 133 | } 134 | /*! CSS Used from: https://metersphere.io/css/style.css */ 135 | .text-muted{color:#8492a6!important;font-weight:600;} 136 | .rounded{border-radius:6px!important;} 137 | .card .card-body{padding:1.5rem;} 138 | .shadow{-webkit-box-shadow:0 0 3px rgba(60, 72, 88, 0.15)!important;box-shadow:0 0 3px rgba(60, 72, 88, 0.15)!important;} 139 | .shadow-lg{-webkit-box-shadow:0 10px 25px rgba(60, 72, 88, 0.15)!important;box-shadow:0 10px 25px rgba(60, 72, 88, 0.15)!important;} 140 | h4,h5{font-family:"Nunito", sans-serif;line-height:1.5;font-weight:600;} 141 | ::-moz-selection{background:rgba(47, 85, 212, 0.9);color:#ffffff;} 142 | ::selection{background:rgba(47, 85, 212, 0.9);color:#ffffff;} 143 | a{text-decoration:none!important;} 144 | @media (max-width: 991px){ 145 | #topnav .container{width:auto;} 146 | } 147 | .explore-feature{-webkit-transition:all 0.5s ease;transition:all 0.5s ease;} 148 | .explore-feature .icon{height:80px;width:80px;line-height:80px;-webkit-transition:all 0.5s ease;transition:all 0.5s ease;} 149 | .explore-feature:hover{-webkit-box-shadow:0 10px 25px rgba(60, 72, 88, 0.15)!important;box-shadow:0 10px 25px rgba(60, 72, 88, 0.15)!important;} 150 | .explore-feature:hover .icon{color:#2f55d4!important;} 151 | /*! CSS Used from: https://metersphere.io/css/colors/default.css */ 152 | .explore-feature:hover .icon{color:#783887!important;} 153 | ::selection{background-color:rgba(255, 91, 105, 0.9);} 154 | /*! CSS Used from: https://metersphere.io/css/index.css */ 155 | p{font-family:-apple-system, BlinkMacSystemFont, "Neue Haas Grotesk Text Pro", "Arial Nova", "Segoe UI", "Helvetica Neue", ".PingFang SC", "PingFang SC", "Source Han Sans SC", "Noto Sans CJK SC", "Source Han Sans CN", "Noto Sans SC", "Source Han Sans TC", "Noto Sans CJK TC", "Hiragino Sans GB", sans-serif;} 156 | h4,h5{font-family:-apple-system, BlinkMacSystemFont, "Neue Haas Grotesk Text Pro", "Arial Nova", "Segoe UI", "Helvetica Neue", ".PingFang SC", "PingFang SC", "Source Han Sans SC", "Noto Sans CJK SC", "Source Han Sans CN", "Noto Sans SC", "Source Han Sans TC", "Noto Sans CJK TC", "Hiragino Sans GB", sans-serif;line-height:1.5;font-weight:300;margin-bottom:0;} 157 | .card{background:none;} 158 | @media (max-width: 768px){ 159 | .mega-nav-sandbox .mega-nav-body{background-color:white;box-shadow:0 2px 16px rgba(79,99,122,0.2);color:black;margin:1em;padding:1em!important;} 160 | } 161 | .mega-nav-sandbox .mega-nav-body{background-color:white;box-shadow:0 2px 16px rgba(79,99,122,0.2);color:black;margin-top:1em;padding:1em;padding-left:100px;padding-right:100px;} 162 | .explore-feature .icon-size{height:30px;width:30px;line-height:30px;-webkit-transition:all 0.5s ease;transition:all 0.5s ease;} 163 | .explore-feature .product-text-color{color:#6c757d;} 164 | .explore-feature:hover .bg-js{background-color:#2b937c;color:white!important;} 165 | .explore-feature:hover .bg-ms{background-color:#783887;color:white!important;} 166 | .explore-feature:hover .bg-ko{background-color:#fc6554;color:white!important;} 167 | .explore-feature:hover .bg-f2c{background-color:#00355d;color:white!important;} 168 | .card .header-card-body{padding:1rem!important;} 169 | /*! CSS Used fontfaces */ 170 | @font-face{font-family:'Nunito';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAnsSUbOvISTs.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;} 171 | @font-face{font-family:'Nunito';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAnsSUZevISTs.woff2) format('woff2');unicode-range:U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;} 172 | @font-face{font-family:'Nunito';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAnsSUbuvISTs.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;} 173 | @font-face{font-family:'Nunito';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAnsSUb-vISTs.woff2) format('woff2');unicode-range:U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;} 174 | @font-face{font-family:'Nunito';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAnsSUYevI.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;} 175 | @font-face{font-family:'Nunito';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofIOOaBXso.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;} 176 | @font-face{font-family:'Nunito';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofIMeaBXso.woff2) format('woff2');unicode-range:U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;} 177 | @font-face{font-family:'Nunito';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofIOuaBXso.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;} 178 | @font-face{font-family:'Nunito';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofIO-aBXso.woff2) format('woff2');unicode-range:U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;} 179 | @font-face{font-family:'Nunito';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofINeaB.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;} 180 | @font-face{font-family:'Nunito';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofA6sKUbOvISTs.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;} 181 | @font-face{font-family:'Nunito';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofA6sKUZevISTs.woff2) format('woff2');unicode-range:U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;} 182 | @font-face{font-family:'Nunito';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofA6sKUbuvISTs.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;} 183 | @font-face{font-family:'Nunito';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofA6sKUb-vISTs.woff2) format('woff2');unicode-range:U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;} 184 | @font-face{font-family:'Nunito';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofA6sKUYevI.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;} 185 | @font-face{font-family:'Nunito';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAjsOUbOvISTs.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;} 186 | @font-face{font-family:'Nunito';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAjsOUZevISTs.woff2) format('woff2');unicode-range:U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;} 187 | @font-face{font-family:'Nunito';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAjsOUbuvISTs.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;} 188 | @font-face{font-family:'Nunito';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAjsOUb-vISTs.woff2) format('woff2');unicode-range:U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;} 189 | @font-face{font-family:'Nunito';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAjsOUYevI.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;} 190 | 191 | .footer-start-box{position:fixed;bottom:75px!important;right:30px!important;width:100px!important;height:45px!important;padding:13px;border-radius:20px;box-shadow:0 8px 16px 0 rgba(46,37,111,.32);background-image:linear-gradient(109deg,#FB6454,#FB6454);color:#fff;cursor:pointer;text-align:center;} 192 | -------------------------------------------------------------------------------- /theme/css/lightgallery.min.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:lg;src:url(../fonts/lg.ttf?22t19m) format("truetype"),url(../fonts/lg.woff?22t19m) format("woff"),url(../fonts/lg.svg?22t19m#lg) format("svg");font-weight:400;font-style:normal;font-display:block}.lg-icon{font-family:lg!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lg-actions .lg-next,.lg-actions .lg-prev{border-radius:2px;color:#999;cursor:pointer;display:block;font-size:22px;margin-top:-10px;padding:8px 10px 9px;position:absolute;top:50%;z-index:1080;outline:0;border:none;background-color:transparent}.lg-actions .lg-next.disabled,.lg-actions .lg-prev.disabled{pointer-events:none;opacity:.5}.lg-actions .lg-next:hover,.lg-actions .lg-prev:hover{color:#FFF}.lg-actions .lg-next{right:20px}.lg-actions .lg-next:before{content:"\e095"}.lg-actions .lg-prev{left:20px}.lg-actions .lg-prev:after{content:"\e094"}@-webkit-keyframes lg-right-end{0%,100%{left:0}50%{left:-30px}}@-moz-keyframes lg-right-end{0%,100%{left:0}50%{left:-30px}}@-ms-keyframes lg-right-end{0%,100%{left:0}50%{left:-30px}}@keyframes lg-right-end{0%,100%{left:0}50%{left:-30px}}@-webkit-keyframes lg-left-end{0%,100%{left:0}50%{left:30px}}@-moz-keyframes lg-left-end{0%,100%{left:0}50%{left:30px}}@-ms-keyframes lg-left-end{0%,100%{left:0}50%{left:30px}}@keyframes lg-left-end{0%,100%{left:0}50%{left:30px}}.lg-outer.lg-right-end .lg-object{-webkit-animation:lg-right-end .3s;-o-animation:lg-right-end .3s;animation:lg-right-end .3s;position:relative}.lg-outer.lg-left-end .lg-object{-webkit-animation:lg-left-end .3s;-o-animation:lg-left-end .3s;animation:lg-left-end .3s;position:relative}.lg-toolbar{z-index:1082;left:0;position:absolute;top:0;width:100%;background-color:rgba(0,0,0,.45)}.lg-toolbar .lg-icon{color:#999;cursor:pointer;float:right;font-size:24px;height:47px;line-height:27px;padding:10px 0;text-align:center;width:50px;text-decoration:none!important;outline:0;background:0 0;border:none;box-shadow:none;-webkit-transition:color .2s linear;-o-transition:color .2s linear;transition:color .2s linear}.lg-toolbar .lg-icon:hover{color:#FFF}.lg-toolbar .lg-close:after{content:"\e070"}.lg-toolbar .lg-download:after{content:"\e0f2"}.lg-sub-html{background-color:rgba(0,0,0,.45);bottom:0;color:#EEE;font-size:16px;left:0;padding:10px 40px;position:fixed;right:0;text-align:center;z-index:1080}.lg-sub-html h4{margin:0;font-size:13px;font-weight:700}.lg-sub-html p{font-size:12px;margin:5px 0 0}#lg-counter{color:#999;display:inline-block;font-size:16px;padding-left:20px;padding-top:12px;vertical-align:middle}.lg-next,.lg-prev,.lg-toolbar{opacity:1;-webkit-transition:-webkit-transform .35s cubic-bezier(0,0,.25,1) 0s,opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear;-moz-transition:-moz-transform .35s cubic-bezier(0,0,.25,1) 0s,opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear;-o-transition:-o-transform .35s cubic-bezier(0,0,.25,1) 0s,opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear;transition:transform .35s cubic-bezier(0,0,.25,1) 0s,opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear}.lg-hide-items .lg-prev{opacity:0;-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}.lg-hide-items .lg-next{opacity:0;-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}.lg-hide-items .lg-toolbar{opacity:0;-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-object{-webkit-transform:scale3d(.5,.5,.5);transform:scale3d(.5,.5,.5);opacity:0;-webkit-transition:-webkit-transform 250ms cubic-bezier(0,0,.25,1) 0s,opacity 250ms cubic-bezier(0,0,.25,1)!important;-moz-transition:-moz-transform 250ms cubic-bezier(0,0,.25,1) 0s,opacity 250ms cubic-bezier(0,0,.25,1)!important;-o-transition:-o-transform 250ms cubic-bezier(0,0,.25,1) 0s,opacity 250ms cubic-bezier(0,0,.25,1)!important;transition:transform 250ms cubic-bezier(0,0,.25,1) 0s,opacity 250ms cubic-bezier(0,0,.25,1)!important;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-item.lg-complete .lg-object{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}.lg-outer .lg-thumb-outer{background-color:#0D0A0A;bottom:0;position:absolute;width:100%;z-index:1080;max-height:350px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1) 0s;-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1) 0s;-o-transition:-o-transform .25s cubic-bezier(0,0,.25,1) 0s;transition:transform .25s cubic-bezier(0,0,.25,1) 0s}.lg-outer .lg-thumb-outer.lg-grab .lg-thumb-item{cursor:-webkit-grab;cursor:-moz-grab;cursor:-o-grab;cursor:-ms-grab;cursor:grab}.lg-outer .lg-thumb-outer.lg-grabbing .lg-thumb-item{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing}.lg-outer .lg-thumb-outer.lg-dragging .lg-thumb{-webkit-transition-duration:0s!important;transition-duration:0s!important}.lg-outer.lg-thumb-open .lg-thumb-outer{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.lg-outer .lg-thumb{padding:10px 0;height:100%;margin-bottom:-5px}.lg-outer .lg-thumb-item{cursor:pointer;float:left;overflow:hidden;height:100%;border:2px solid #FFF;border-radius:4px;margin-bottom:5px}@media (min-width:1025px){.lg-outer .lg-thumb-item{-webkit-transition:border-color .25s ease;-o-transition:border-color .25s ease;transition:border-color .25s ease}}.lg-outer .lg-thumb-item.active,.lg-outer .lg-thumb-item:hover{border-color:#a90707}.lg-outer .lg-thumb-item img{width:100%;height:100%;object-fit:cover}.lg-outer.lg-has-thumb .lg-item{padding-bottom:120px}.lg-outer.lg-can-toggle .lg-item{padding-bottom:0}.lg-outer.lg-pull-caption-up .lg-sub-html{-webkit-transition:bottom .25s ease;-o-transition:bottom .25s ease;transition:bottom .25s ease}.lg-outer.lg-pull-caption-up.lg-thumb-open .lg-sub-html{bottom:100px}.lg-outer .lg-toggle-thumb{background-color:#0D0A0A;border-radius:2px 2px 0 0;color:#999;cursor:pointer;font-size:24px;height:39px;line-height:27px;padding:5px 0;position:absolute;right:20px;text-align:center;top:-39px;width:50px;outline:0;border:none}.lg-outer .lg-toggle-thumb:after{content:"\e1ff"}.lg-outer .lg-toggle-thumb:hover{color:#FFF}.lg-outer .lg-video-cont{display:inline-block;vertical-align:middle;max-width:1140px;max-height:100%;width:100%;padding:0 5px}.lg-outer .lg-video{width:100%;height:0;padding-bottom:56.25%;overflow:hidden;position:relative}.lg-outer .lg-video .lg-object{display:inline-block;position:absolute;top:0;left:0;width:100%!important;height:100%!important}.lg-outer .lg-video .lg-video-play{width:84px;height:59px;position:absolute;left:50%;top:50%;margin-left:-42px;margin-top:-30px;z-index:1080;cursor:pointer}.lg-outer .lg-has-vimeo .lg-video-play{background:url(../img/vimeo-play.png) no-repeat}.lg-outer .lg-has-vimeo:hover .lg-video-play{background:url(../img/vimeo-play.png) 0 -58px no-repeat}.lg-outer .lg-has-html5 .lg-video-play{background:url(../img/video-play.png) no-repeat;height:64px;margin-left:-32px;margin-top:-32px;width:64px;opacity:.8}.lg-outer .lg-has-html5:hover .lg-video-play{opacity:1}.lg-outer .lg-has-youtube .lg-video-play{background:url(../img/youtube-play.png) no-repeat}.lg-outer .lg-has-youtube:hover .lg-video-play{background:url(../img/youtube-play.png) 0 -60px no-repeat}.lg-outer .lg-video-object{width:100%!important;height:100%!important;position:absolute;top:0;left:0}.lg-outer .lg-has-video .lg-video-object{visibility:hidden}.lg-outer .lg-has-video.lg-video-playing .lg-object,.lg-outer .lg-has-video.lg-video-playing .lg-video-play{display:none}.lg-outer .lg-has-video.lg-video-playing .lg-video-object{visibility:visible}.lg-progress-bar{background-color:#333;height:5px;left:0;position:absolute;top:0;width:100%;z-index:1083;opacity:0;-webkit-transition:opacity 80ms ease 0s;-moz-transition:opacity 80ms ease 0s;-o-transition:opacity 80ms ease 0s;transition:opacity 80ms ease 0s}.lg-progress-bar .lg-progress{background-color:#a90707;height:5px;width:0}.lg-progress-bar.lg-start .lg-progress{width:100%}.lg-show-autoplay .lg-progress-bar{opacity:1}.lg-autoplay-button:after{content:"\e01d"}.lg-show-autoplay .lg-autoplay-button:after{content:"\e01a"}.lg-outer.lg-css3.lg-zoom-dragging .lg-item.lg-complete.lg-zoomable .lg-image,.lg-outer.lg-css3.lg-zoom-dragging .lg-item.lg-complete.lg-zoomable .lg-img-wrap{-webkit-transition-duration:0s;transition-duration:0s}.lg-outer.lg-use-transition-for-zoom .lg-item.lg-complete.lg-zoomable .lg-img-wrap{-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.25,1) 0s;-moz-transition:-moz-transform .3s cubic-bezier(0,0,.25,1) 0s;-o-transition:-o-transform .3s cubic-bezier(0,0,.25,1) 0s;transition:transform .3s cubic-bezier(0,0,.25,1) 0s}.lg-outer.lg-use-left-for-zoom .lg-item.lg-complete.lg-zoomable .lg-img-wrap{-webkit-transition:left .3s cubic-bezier(0,0,.25,1) 0s,top .3s cubic-bezier(0,0,.25,1) 0s;-moz-transition:left .3s cubic-bezier(0,0,.25,1) 0s,top .3s cubic-bezier(0,0,.25,1) 0s;-o-transition:left .3s cubic-bezier(0,0,.25,1) 0s,top .3s cubic-bezier(0,0,.25,1) 0s;transition:left .3s cubic-bezier(0,0,.25,1) 0s,top .3s cubic-bezier(0,0,.25,1) 0s}.lg-outer .lg-item.lg-complete.lg-zoomable .lg-img-wrap{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}.lg-outer .lg-item.lg-complete.lg-zoomable .lg-image{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.25,1) 0s,opacity .15s!important;-moz-transition:-moz-transform .3s cubic-bezier(0,0,.25,1) 0s,opacity .15s!important;-o-transition:-o-transform .3s cubic-bezier(0,0,.25,1) 0s,opacity .15s!important;transition:transform .3s cubic-bezier(0,0,.25,1) 0s,opacity .15s!important;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}#lg-zoom-in:after{content:"\e311"}#lg-actual-size{font-size:20px}#lg-actual-size:after{content:"\e033"}#lg-zoom-out{opacity:.5;pointer-events:none}#lg-zoom-out:after{content:"\e312"}.lg-zoomed #lg-zoom-out{opacity:1;pointer-events:auto}.lg-outer .lg-pager-outer{bottom:60px;left:0;position:absolute;right:0;text-align:center;z-index:1080;height:10px}.lg-outer .lg-pager-outer.lg-pager-hover .lg-pager-cont{overflow:visible}.lg-outer .lg-pager-cont{cursor:pointer;display:inline-block;overflow:hidden;position:relative;vertical-align:top;margin:0 5px}.lg-outer .lg-pager-cont:hover .lg-pager-thumb-cont{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.lg-outer .lg-pager-cont.lg-pager-active .lg-pager{box-shadow:0 0 0 2px #fff inset}.lg-outer .lg-pager-thumb-cont{background-color:#fff;color:#FFF;bottom:100%;height:83px;left:0;margin-bottom:20px;margin-left:-60px;opacity:0;padding:5px;position:absolute;width:120px;border-radius:3px;-webkit-transition:opacity .15s ease 0s,-webkit-transform .15s ease 0s;-moz-transition:opacity .15s ease 0s,-moz-transform .15s ease 0s;-o-transition:opacity .15s ease 0s,-o-transform .15s ease 0s;transition:opacity .15s ease 0s,transform .15s ease 0s;-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}.lg-outer .lg-pager-thumb-cont img{width:100%;height:100%}.lg-outer .lg-pager{background-color:rgba(255,255,255,.5);border-radius:50%;box-shadow:0 0 0 8px rgba(255,255,255,.7) inset;display:block;height:12px;-webkit-transition:box-shadow .3s ease 0s;-o-transition:box-shadow .3s ease 0s;transition:box-shadow .3s ease 0s;width:12px}.lg-outer .lg-pager:focus,.lg-outer .lg-pager:hover{box-shadow:0 0 0 8px #fff inset}.lg-outer .lg-caret{border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px dashed;bottom:-10px;display:inline-block;height:0;left:50%;margin-left:-5px;position:absolute;vertical-align:middle;width:0}.lg-fullscreen:after{content:"\e20c"}.lg-fullscreen-on .lg-fullscreen:after{content:"\e20d"}.lg-outer #lg-dropdown-overlay{background-color:rgba(0,0,0,.25);bottom:0;cursor:default;left:0;position:fixed;right:0;top:0;z-index:1081;opacity:0;visibility:hidden;-webkit-transition:visibility 0s linear .18s,opacity .18s linear 0s;-o-transition:visibility 0s linear .18s,opacity .18s linear 0s;transition:visibility 0s linear .18s,opacity .18s linear 0s}.lg-outer.lg-dropdown-active #lg-dropdown-overlay,.lg-outer.lg-dropdown-active .lg-dropdown{-webkit-transition-delay:0s;transition-delay:0s;-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;visibility:visible}.lg-outer.lg-dropdown-active #lg-share{color:#FFF}.lg-outer .lg-dropdown{background-color:#fff;border-radius:2px;font-size:14px;list-style-type:none;margin:0;padding:10px 0;position:absolute;right:0;text-align:left;top:50px;opacity:0;visibility:hidden;-moz-transform:translate3d(0,5px,0);-o-transform:translate3d(0,5px,0);-ms-transform:translate3d(0,5px,0);-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-webkit-transition:-webkit-transform .18s linear 0s,visibility 0s linear .5s,opacity .18s linear 0s;-moz-transition:-moz-transform .18s linear 0s,visibility 0s linear .5s,opacity .18s linear 0s;-o-transition:-o-transform .18s linear 0s,visibility 0s linear .5s,opacity .18s linear 0s;transition:transform .18s linear 0s,visibility 0s linear .5s,opacity .18s linear 0s}.lg-outer .lg-dropdown:after{content:"";display:block;height:0;width:0;position:absolute;border:8px solid transparent;border-bottom-color:#FFF;right:16px;top:-16px}.lg-outer .lg-dropdown>li:last-child{margin-bottom:0}.lg-outer .lg-dropdown>li:hover .lg-icon,.lg-outer .lg-dropdown>li:hover a{color:#333}.lg-outer .lg-dropdown a{color:#333;display:block;white-space:pre;padding:4px 12px;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px}.lg-outer .lg-dropdown a:hover{background-color:rgba(0,0,0,.07)}.lg-outer .lg-dropdown .lg-dropdown-text{display:inline-block;line-height:1;margin-top:-3px;vertical-align:middle}.lg-outer .lg-dropdown .lg-icon{color:#333;display:inline-block;float:none;font-size:20px;height:auto;line-height:1;margin-right:8px;padding:0;vertical-align:middle;width:auto}.lg-outer,.lg-outer .lg,.lg-outer .lg-inner{height:100%;width:100%}.lg-outer #lg-share{position:relative}.lg-outer #lg-share:after{content:"\e80d"}.lg-outer #lg-share-facebook .lg-icon{color:#3b5998}.lg-outer #lg-share-facebook .lg-icon:after{content:"\e904"}.lg-outer #lg-share-twitter .lg-icon{color:#00aced}.lg-outer #lg-share-twitter .lg-icon:after{content:"\e907"}.lg-outer #lg-share-googleplus .lg-icon{color:#dd4b39}.lg-outer #lg-share-googleplus .lg-icon:after{content:"\e905"}.lg-outer #lg-share-pinterest .lg-icon{color:#cb2027}.lg-outer #lg-share-pinterest .lg-icon:after{content:"\e906"}.lg-outer .lg-img-rotate{position:absolute;padding:0 5px;left:0;right:0;top:0;bottom:0;-webkit-transition:-webkit-transform .3s cubic-bezier(.32,0,.67,0) 0s;-moz-transition:-moz-transform .3s cubic-bezier(.32,0,.67,0) 0s;-o-transition:-o-transform .3s cubic-bezier(.32,0,.67,0) 0s;transition:transform .3s cubic-bezier(.32,0,.67,0) 0s}.lg-rotate-left:after{content:"\e900"}.lg-rotate-right:after{content:"\e901"}.lg-icon.lg-flip-hor,.lg-icon.lg-flip-ver{font-size:26px}.lg-flip-hor:after{content:"\e902"}.lg-flip-ver:after{content:"\e903"}.lg-group:after,.lg-group:before{display:table;content:"";line-height:0}.lg-group:after{clear:both}.lg-outer{position:fixed;top:0;left:0;z-index:1050;opacity:0;outline:0;-webkit-transition:opacity .15s ease 0s;-o-transition:opacity .15s ease 0s;transition:opacity .15s ease 0s}.lg-outer *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lg-outer.lg-visible{opacity:1}.lg-outer.lg-css3 .lg-item.lg-current,.lg-outer.lg-css3 .lg-item.lg-next-slide,.lg-outer.lg-css3 .lg-item.lg-prev-slide{-webkit-transition-duration:inherit!important;transition-duration:inherit!important;-webkit-transition-timing-function:inherit!important;transition-timing-function:inherit!important}.lg-outer.lg-css3.lg-dragging .lg-item.lg-current,.lg-outer.lg-css3.lg-dragging .lg-item.lg-next-slide,.lg-outer.lg-css3.lg-dragging .lg-item.lg-prev-slide{-webkit-transition-duration:0s!important;transition-duration:0s!important;opacity:1}.lg-outer.lg-grab img.lg-object{cursor:-webkit-grab;cursor:-moz-grab;cursor:-o-grab;cursor:-ms-grab;cursor:grab}.lg-outer.lg-grabbing img.lg-object{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing}.lg-outer .lg{position:relative;overflow:hidden;margin-left:auto;margin-right:auto;max-width:100%;max-height:100%}.lg-outer .lg-inner{position:absolute;left:0;top:0;white-space:nowrap}.lg-outer .lg-item{background:url(../img/loading.gif) center center no-repeat;display:none!important}.lg-outer.lg-css .lg-current,.lg-outer.lg-css3 .lg-current,.lg-outer.lg-css3 .lg-next-slide,.lg-outer.lg-css3 .lg-prev-slide{display:inline-block!important}.lg-outer .lg-img-wrap,.lg-outer .lg-item{display:inline-block;text-align:center;position:absolute;width:100%;height:100%}.lg-outer .lg-img-wrap:before,.lg-outer .lg-item:before{content:"";display:inline-block;height:50%;width:1px;margin-right:-1px}.lg-outer .lg-img-wrap{position:absolute;padding:0 5px;left:0;right:0;top:0;bottom:0}.lg-outer .lg-item.lg-complete{background-image:none}.lg-outer .lg-item.lg-current{z-index:1060}.lg-outer .lg-image{display:inline-block;vertical-align:middle;max-width:100%;max-height:100%;width:auto!important;height:auto!important}.lg-outer.lg-show-after-load .lg-item .lg-object,.lg-outer.lg-show-after-load .lg-item .lg-video-play{opacity:0;-webkit-transition:opacity .15s ease 0s;-o-transition:opacity .15s ease 0s;transition:opacity .15s ease 0s}.lg-outer.lg-show-after-load .lg-item.lg-complete .lg-object,.lg-outer.lg-show-after-load .lg-item.lg-complete .lg-video-play{opacity:1}.lg-outer .lg-empty-html,.lg-outer.lg-hide-download #lg-download{display:none}.lg-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1040;background-color:#000;opacity:0;-webkit-transition:opacity .15s ease 0s;-o-transition:opacity .15s ease 0s;transition:opacity .15s ease 0s}.lg-backdrop.in{opacity:1}.lg-css3.lg-no-trans .lg-current,.lg-css3.lg-no-trans .lg-next-slide,.lg-css3.lg-no-trans .lg-prev-slide{-webkit-transition:none 0s ease 0s!important;-moz-transition:none 0s ease 0s!important;-o-transition:none 0s ease 0s!important;transition:none 0s ease 0s!important}.lg-css3.lg-use-css3 .lg-item,.lg-css3.lg-use-left .lg-item{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}.lg-css3.lg-fade .lg-item{opacity:0}.lg-css3.lg-fade .lg-item.lg-current{opacity:1}.lg-css3.lg-fade .lg-item.lg-current,.lg-css3.lg-fade .lg-item.lg-next-slide,.lg-css3.lg-fade .lg-item.lg-prev-slide{-webkit-transition:opacity .1s ease 0s;-moz-transition:opacity .1s ease 0s;-o-transition:opacity .1s ease 0s;transition:opacity .1s ease 0s}.lg-css3.lg-slide.lg-use-css3 .lg-item{opacity:0}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-prev-slide{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-next-slide{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-current{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-current,.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-next-slide,.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-moz-transition:-moz-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s}.lg-css3.lg-slide.lg-use-left .lg-item{opacity:0;position:absolute;left:0}.lg-css3.lg-slide.lg-use-left .lg-item.lg-prev-slide{left:-100%}.lg-css3.lg-slide.lg-use-left .lg-item.lg-next-slide{left:100%}.lg-css3.lg-slide.lg-use-left .lg-item.lg-current{left:0;opacity:1}.lg-css3.lg-slide.lg-use-left .lg-item.lg-current,.lg-css3.lg-slide.lg-use-left .lg-item.lg-next-slide,.lg-css3.lg-slide.lg-use-left .lg-item.lg-prev-slide{-webkit-transition:left 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-moz-transition:left 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:left 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:left 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s} -------------------------------------------------------------------------------- /theme/f2c-header.html: -------------------------------------------------------------------------------- 1 |
2 | 12 |
13 |
14 |
15 |
16 | 17 |
18 |
19 |

20 | 了解 FIT2CLOUD 飞致云旗下开源产品 21 |

22 |
23 | 33 | 34 | 126 |
127 |
128 |
129 |
130 |
131 |
132 | -------------------------------------------------------------------------------- /theme/fonts/lg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | { 8 | "fontFamily": "lg", 9 | "majorVersion": 1, 10 | "minorVersion": 0, 11 | "fontURL": "https://github.com/sachinchoolur/lightGallery", 12 | "copyright": "sachin", 13 | "license": "MLT", 14 | "licenseURL": "http://opensource.org/licenses/MIT", 15 | "description": "Font generated by IcoMoon.", 16 | "version": "Version 1.0", 17 | "fontId": "lg", 18 | "psName": "lg", 19 | "subFamily": "Regular", 20 | "fullName": "lg" 21 | } 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /theme/fonts/lg.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/theme/fonts/lg.ttf -------------------------------------------------------------------------------- /theme/fonts/lg.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/theme/fonts/lg.woff -------------------------------------------------------------------------------- /theme/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KubeOperator/docs/00545d73fca5ab583829d9aeedaadb0a2b600ac1/theme/img/loading.gif -------------------------------------------------------------------------------- /theme/img/logo/banner-nav-CloudExplorer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 23 | 28 | 33 | 36 | 37 | 39 | 44 | 49 | 52 | 54 | 56 | 58 | 63 | 64 | 66 | 71 | 72 | 74 | 76 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /theme/img/logo/banner-nav-DataEase.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 11 | 12 | 14 | 15 | 16 | 20 | 24 | 28 | 29 | 33 | 34 | 39 | 40 | 41 | 43 | 44 | 45 | 53 | 54 | 56 | 57 | 59 | 60 | 61 | 63 | 64 | 65 | 67 | 68 | 69 | 71 | 72 | 73 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /theme/img/logo/banner-nav-FIT2CLOUD.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /theme/img/logo/banner-nav-JumpServer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 14 | 18 | 22 | 24 | 25 | 27 | 33 | 41 | 42 | 43 | 48 | 53 | 58 | 60 | 62 | 65 | 66 | -------------------------------------------------------------------------------- /theme/img/logo/banner-nav-KubeOperator.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 39 | 43 | 49 | 54 | 58 | 63 | 68 | 73 | 78 | 80 | 82 | 85 | 86 | -------------------------------------------------------------------------------- /theme/img/logo/banner-nav-MeterSphere.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 11 | 12 | 14 | 19 | 24 | 29 | 34 | 37 | 39 | 41 | 49 | 54 | 57 | 58 | 59 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 72 | 73 | 74 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /theme/img/logo/logo-dark-MeterSphere.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 11 | 12 | 13 | 15 | 20 | 25 | 30 | 35 | 38 | 40 | 42 | 50 | 55 | 58 | 59 | 60 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 73 | 74 | 75 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /theme/img/logo/logo-light-FIT2CLOUD.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /theme/img/logo/logo-light-MeterSphere.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 12 | 17 | 22 | 27 | 32 | 35 | 37 | 39 | 47 | 52 | 55 | 56 | 57 | 59 | 60 | 61 | 62 | 63 | 65 | 66 | 67 | 68 | 69 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /theme/main.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block header %} 4 | {{ super() }} 5 | {% endblock %} 6 | 7 | {% block styles %} 8 | 9 | 10 | {{ super() }} 11 | 12 | {% endblock styles %} 13 | 14 | {% block footer %} 15 | 29 | 38 | {% endblock footer %} 39 | 40 | {% block libs %} 41 | {{ super() }} 42 | 43 | 44 | 45 | {% endblock libs %} 46 | 47 | {% block scripts %} 48 | {{ super() }} 49 | 55 | {% endblock scripts %} 56 | --------------------------------------------------------------------------------