v2.1
v2.0
v1.0
  1. Release Notes
    1. Release Notes - 2.1.1最新
    1. Release Notes - 2.1.0
    1. Release Notes - 2.0.2
    1. Release Notes - 2.0.1
    1. Release Notes - 2.0.0
  1. 产品介绍
    1. 什么是 KubeSphere
    1. 平台功能
    1. 为什么选择 KubeSphere
    1. 架构说明
    1. 应用场景
    1. 名词解释
  1. 安装指南
    1. 安装说明
      1. 概览
      2. 网络防火墙配置
      3. 集群其它参数配置
    1. 在 Linux 快速安装 KubeSphere
      1. All-in-One 模式
      2. Multi-Node 模式
      3. 完整安装(开启所有功能组件)
    1. 在 Kubernetes 安装 KubeSphere
      1. 准备工作
      2. 在 Kubernetes 安装 KubeSphere
    1. 安装可插拔的功能组件
      1. 可插拔功能组件概览
      2. 安装应用商店
      3. 安装内置的 DevOps 系统
      4. 安装内置的日志系统
      5. 安装微服务治理组件(Service Mesh)
      6. 安装告警通知系统
      7. 安装 Metrics-server 开启 HPA
      8. 验证可插拔功能组件的安装
    1. 集群高可用配置安装
      1. 在青云安装 HA 集群
      2. 在华为云安装 HA 集群
      3. 持久化存储配置说明
    1. 相关工具与插件
      1. 安装内置 Grafana
      2. 访问 SonarQube 和 Jenkins 服务端
      3. 安装 Porter 负载均衡器插件
      4. 安装 QingCloud 负载均衡器插件
    1. 认证配置
      1. 接入 LDAP / AD 域账号(Beta)
    1. 集群运维
      1. 安装后添加新的存储类型
      2. 集群节点扩容
      3. 卸载
  1. 升级指南
    1. 升级必读
    1. All-in-One 升级
    1. Multi-node 升级
  1. 快速入门
    1. 入门必读
    1. 1. 多租户管理快速入门
    1. 2. 应用路由与服务示例
    1. 3. 创建 Wordpress 应用并发布至 K8s
    1. 4. 一键部署应用
    1. 5. 创建简单任务
    1. 6. 设置弹性伸缩 (HPA)
    1. 7. Source-to-Image
    1. 8. Binary-to-Image
    1. 9. 基于Spring Boot项目构建流水线
    1. 10. 图形化构建流水线
    1. 11. Bookinfo 微服务的灰度发布
    1. 12. 使用 Ingress-Nginx 进行灰度发布
    1. 13. 应用商店
  1. 管理员指南
    1. 多租户管理
      1. 多租户管理概述
      2. 角色权限概览
    1. 平台管理
      1. 企业空间管理
      2. 账号管理
      3. 平台角色
    1. 基础设施
      1. 服务组件
      2. 主机管理
      3. 存储类型
    1. 监控中心
      1. 监控概述
      2. 如何利用监控定位问题
      3. 集群状态监控
      4. 应用资源监控
      5. 监控策略 - 节点级别
      6. 监控消息 - 节点级别
    1. 平台设置
      1. 应用仓库
      2. 基于本地仓库搭建应用仓库部署Redis
      3. 上传应用到 KubeSphere 官方仓库
      4. 基于 GitHub 搭建自有应用仓库
      5. 邮件服务器
      6. 日志收集
      7. 添加 Fluentd 作为日志接收者
      8. 添加 Kafka 作为日志接收者
    1. 工具箱
      1. Web Kubectl
      2. 日志收集
    1. DevOps 配置
      1. 系统配置修改
      2. 上传镜像至 Harbor
      3. 流水线配置邮件服务器
      4. Jenkins 系统设置
    1. FAQ
      1. DevOps 运维FAQ
  1. 用户指南
    1. 应用
      1. 应用模板
      2. 自制应用
      3. 流量治理
      4. 熔断
    1. 工作负载
      1. 工作负载概述
      2. 部署
      3. 有状态副本集
      4. 守护进程集
      5. 任务
      6. 定时任务
      7. 设置健康检查器
      8. 工作负载管理
      9. 落盘日志收集
    1. 存储
      1. 存储概述
      2. 存储卷
      3. Local Volume 使用方法
    1. 网络与服务
      1. 服务管理
      2. 灰度发布
      3. 应用路由
    1. 监控告警
      1. 告警策略 - 工作负载级别
      2. 告警消息 - 工作负载级别
    1. 配置中心
      1. 密钥
      2. 配置
      3. 镜像仓库
    1. 项目设置
      1. 基本信息
      2. 成员角色
      3. 项目成员
      4. 外网访问
    1. DevOps 工程
      1. DevOps 工程概述
      2. 管理 DevOps 工程
      3. 流水线
      4. 凭证管理
      5. 添加代码仓库
      6. 访问 SonarQube 并创建 Token
      7. 设置自动触发扫描
      8. Jenkins Agent 说明
      9. 流水线常见问题
  1. 开发者指南
    1. Helm 应用开发
      1. 开发模板规范
      2. Helm 应用开发入门
    1. Source to Image(S2I) 自定义模版开发
      1. S2I 原理及流程介绍
      2. 自定义 S2I 模版
  1. API 文档
    1. API 文档
    1. 如何调用 API
    1. API 常用术语对照
    1. 监控指标说明
  1. 常见问题
    1. 安装常见问题
    1. 存储常见问题
    1. 控制台使用常见问题
    1. DevOps 常见问题
  1. 附录
    1. 部署 Ceph 存储服务端
    1. 部署 GlusterFS 存储服务端
    1. 安装 OpenEBS 创建 LocalPV 存储类型
    1. 云平台配置端口转发和防火墙
KubeSphere®️ 2020 All Rights Reserved.

安装 OpenEBS 创建 LocalPV 存储类型

编辑

由于 在已有 Kubernetes 集群之上安装 KubeSphere 需要依赖集群已有的存储类型(StorageClass),若集群还没有准备存储类型(StorageClass),可参考本文档,在 K8s 集群中安装 OpenEBS 并创建 LocalPV 的存储类型,从而可以在集群快速安装测试 KubeSphere。

注意:基于 OpenEBS 创建 LocalPV 的存储类型仅适用于开发测试环境,不建议在生产环境使用。生产环境建议准备符合 Kubernetes 要求的持久化存储(如 GlusterFS、Ceph、NFS、Neonsan 等分布式存储,或云上的块存储),然后再创建对应的 StorageClass。

前提条件

  • 已有 Kubernetes 集群,并安装了 kubectl 或 Helm
  • Pod 可以被调度到集群的 master 节点(可临时取消 master 节点的 Taint)

关于第二个前提条件,是由于安装 OpenEBS 时它有一个初始化的 Pod 需要在 master 节点启动并创建 PV 给 KubeSphere 的有状态应用挂载。因此,若您的 master 节点存在 Taint,建议在安装 OpenEBS 之前手动取消 Taint,待 OpenEBS 与 KubeSphere 安装完成后,再对 master 打上 Taint,以下步骤供参考:

  1. 例如本示例有一个 master 节点,节点名称即 master,可通过以下命令查看节点名称:
$ kubectl get node -o wide
NAME     STATUS   ROLES    AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
master   Ready    master   6d18h   v1.15.5   192.168.0.6    <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   docker://18.9.7
node1    Ready    worker   6d18h   v1.15.5   192.168.0.7    <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   docker://18.9.7
node2    Ready    worker   6d18h   v1.15.5   192.168.0.10   <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   docker://18.9.7
  1. 确认 master 节点是否有 Taint,如下看到 master 节点有 Taint。
$ kubectl describe node master | grep Taint
Taints:             node-role.kubernetes.io/master:NoSchedule
  1. 去掉 master 节点的 Taint:
$ kubectl taint nodes master node-role.kubernetes.io/master:NoSchedule-

此时可参考安装 OpenEBS 的步骤继续操作。

安装 OpenEBS

  1. 创建 OpenEBS 的 namespace,OpenEBS 相关资源将创建在这个 namespace 下:
$ kubectl create ns openebs
  1. 安装 OpenEBS,以下列出两种方法,可参考其中任意一种进行创建:

A. 若集群已安装了 Helm,可通过 Helm 命令来安装 OpenEBS:

helm init

helm install --namespace openebs --name openebs stable/openebs --version 1.5.0

B. 除此之外 还可以通过 kubectl 命令安装:

$ kubectl apply -f https://openebs.github.io/charts/openebs-operator-1.5.0.yaml
  1. 安装 OpenEBS 后将自动创建 4 个 StorageClass,查看创建的 StorageClass:
$ kubectl get sc
NAME                        PROVISIONER                                                AGE
openebs-device              openebs.io/local                                           10h
openebs-hostpath            openebs.io/local                                           10h
openebs-jiva-default        openebs.io/provisioner-iscsi                               10h
openebs-snapshot-promoter   volumesnapshot.external-storage.k8s.io/snapshot-promoter   10h
  1. 如下将 openebs-hostpath 设置为 默认的 StorageClass
$ kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/openebs-hostpath patched
  1. 至此,OpenEBS 的 LocalPV 已作为默认的存储类型创建成功。可以通过命令 kubectl get pod -n openebs 来查看 OpenEBS 相关 Pod 的状态,若 Pod 的状态都是 running,则说明存储安装成功。

创建工作负载测试 StorageClass

  1. 如下创建一个 demo-openebs-hostpath.yaml,其中定义的 Deployment 与 PVC 用作测试,检验 openebs-hostpath 的 StorageClass 是否创建成功:
## 注意,若您的 K8s 版本是 1.15,这里的 apiVersion 需要改为 apps/v1beta1
---
apiVersion: v1
kind: Deployment
metadata:
  name: percona
  labels:
    name: percona
spec:
  replicas: 1
  selector:
    matchLabels:
      name: percona
  template:
    metadata:
      labels:
        name: percona
    spec:
      securityContext:
        fsGroup: 999
      tolerations:
      - key: "ak"
        value: "av"
        operator: "Equal"
        effect: "NoSchedule"
      containers:
        - resources:
            limits:
              cpu: 0.5
          name: percona
          image: percona
          args:
            - "--ignore-db-dir"
            - "lost+found"
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: k8sDem0
          ports:
            - containerPort: 3306
              name: percona
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: demo-vol1
      volumes:
        - name: demo-vol1
          persistentVolumeClaim:
            claimName: demo-vol1-claim
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: demo-vol1-claim
spec:
  storageClassName: openebs-hostpath
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5G
---
apiVersion: v1
kind: Service
metadata:
  name: percona-mysql
  labels:
    name: percona-mysql
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:
      name: percona
  1. 使用 kubectl 命令创建相关资源:
$ kubectl apply -f demo-openebs-hostpath.yaml -n openebs
  1. 如果 PVC 的状态为 Bound 并且 Pod 状态为 running,则说明已经成功挂载,证明了默认的 StorageClass(openebs-hostpath)是正常工作的。接下来可以回到 在已有 Kubernetes 集群之上安装 KubeSphere 继续安装 KubeSphere。
$ kubectl get pvc -n openebs
NAME              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
demo-vol1-claim   Bound    pvc-a50fbb85-760b-488e-aad4-8aef1ff6b57a   5G         RWO            openebs-hostpath   68m

提示:由于在文档开头手动去掉了 master 节点的 Taint,我们可以在安装完 OpenEBS 和 KubeSphere 后,可以将 master 节点 Taint 加上,避免业务相关的工作负载调度到 master 节点抢占 master 资源:

$ kubectl taint nodes master node-role.kubernetes.io/master=:NoSchedule