• 准备工作
  • 部署 KubeSphere
  • 参数说明
  • 未来计划

    KubeSphere 支持在已有 Kubernetes 集群之上部署 KubeSphere。

    准备工作

    1. 确认现有的 Kubernetes 版本在 >=1.13.0,KubeSphere 依赖 Kubernetes 1.13.0 版本之后的新特性,可以在执行 kubectl version 来确认 :
    1. $ kubectl version | grep Server
    2. Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.5", GitCommit:"2166946f41b36dea2c4626f90a77706f426cdea2", GitTreeState:"clean", BuildDate:"2019-03-25T15:19:22Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}

    说明:注意输出结果中的 Server Version 这行,如果显示 GitVersion 大于 v1.13.0,Kubernetes 的版本是可以安装的。如果低于 v1.13.0 ,可以查看 Upgrading kubeadm clusters from v1.12 to v1.13 先升级下 K8s 版本。

    1. 确认已安装 Helm,并且 Helm 的版本至少为 2.10.0。在终端执行 helm version,得到类似下面的输出
      1. $ helm version
      2. Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
      3. Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}

    说明:

    • 如果提示 helm: command not found, 表示还未安装 Helm。参考这篇 Install Helm 安装 Helm, 安装完成后执行 helm init
    • 如果 helm 的版本比较老 (<2.10.0), 需要首先升级,参考 Upgrading Tiller 升级。
    1. 集群现有的可用内存至少在 10G 以上。 如果是执行的 allinone 安装,那么执行 free -g 可以看下可用资源
    1. root@kubernetes:~# free -g
    2. total used free shared buff/cache available
    3. Mem: 16 4 10 0 3 2
    4. Swap: 0 0 0
    1. (非必须) KubeSphere 非常建议配合持久化存储使用,执行 kubectl get sc 看下当前是否设置了默认的 storageclass
    1. root@kubernetes:~$ kubectl get sc
    2. NAME PROVISIONER AGE
    3. ceph kubernetes.io/rbd 3d4h
    4. csi-qingcloud (default) disk.csi.qingcloud.com 54d
    5. glusterfs kubernetes.io/glusterfs 3d4h

    提示:若未设置持久化存储,安装将默认使用 hostpath,该方式能顺利安装,但可能会由于 Pod 漂移带来其它问题,正式环境建议配置 StorageClass 使用持久化存储。

    如果你的 Kubernetes 环境满足以上的要求,那么可以接着执行下面的步骤了。

    部署 KubeSphere

    1. 在 Kubernetes 集群中创建名为 kubesphere-systemkubesphere-monitoring-systemnamespace
    1. $ cat <<EOF | kubectl create -f -
    2. ---
    3. apiVersion: v1
    4. kind: Namespace
    5. metadata:
    6. name: kubesphere-system
    7. ---
    8. apiVersion: v1
    9. kind: Namespace
    10. metadata:
    11. name: kubesphere-monitoring-system
    12. EOF
    1. 创建 Kubernetes 集群 CA 证书的 Secret。

    注:按照当前集群 ca.crt 和 ca.key 证书路径创建(Kubeadm 创建集群的证书路径一般为 /etc/kubernetes/pki

    1. $ kubectl -n kubesphere-system create secret generic kubesphere-ca \
    2. --from-file=ca.crt=/etc/kubernetes/pki/ca.crt \
    3. --from-file=ca.key=/etc/kubernetes/pki/ca.key
    1. 创建 etcd 的证书 Secret。

    注:根据集群实际 etcd 证书位置创建;

    • 若 etcd 已经配置过证书,则参考如下创建:
    1. $ kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs \
    2. --from-file=etcd-client-ca.crt=/etc/kubernetes/pki/etcd/ca.crt \
    3. --from-file=etcd-client.crt=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
    4. --from-file=etcd-client.key=/etc/kubernetes/pki/etcd/healthcheck-client.key
    • 若 etcd 没有配置证书,则创建空 Secret(以下命令适用于 Kubeadm 创建的 Kubernetes 集群环境):
    1. $ kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs
    1. 克隆 kubesphere-installer 仓库至本地。
    1. $ git clone https://github.com/kubesphere/ks-installer.git
    1. 进入 ks-installer,然后在 Kubernetes 集群部署 KubeSphere。
    1. $ cd deploy
    2. $ vim kubesphere-installer.yaml # 根据下方的参数说明列表,编辑 kubesphere-installer.yaml 中 kubesphere-config 为当前集群参数信息。(若etcd 无证书,设置 etcd_tls_enable: False)
    3. $ kubectl apply -f kubesphere-installer.yaml
    1. 查看部署日志。
    1. $ kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l job-name=kubesphere-installer -o jsonpath='{.items[0].metadata.name}') -f
    1. 查看控制台的服务端口,使用 IP:30880 访问 KubeSphere UI 界面,默认的集群管理员账号为 admin/P@88w0rd
    1. $ kubectl get svc -n kubesphere-system
    2. # 查看 ks-console 服务的端口 默认为 NodePort: 30880

    参数说明

    <![if supportMisalignedColumns]> <![endif]>
    参数 描述 默认值
    kube_apiserver_host 当前集群kube-apiserver地址(ip:port)
    etcd_tls_enable 是否开启etcd TLS证书认证(True / False) True
    etcd_endpoint_ips etcd地址,如etcd为集群,地址以逗号分离(如:192.168.0.7,192.168.0.8,192.168.0.9)
    etcd_port etcd端口 (默认2379,如使用其它端口,请配置此参数) 2379
    disableMultiLogin  是否关闭多点登录   (True / False) True
    elk_prefix 日志索引  logstash 
    keep_log_days 日志留存时间(天) 7
    metrics_server_enable 是否安装metrics_server    (True / False) True
    istio_enable 是否安装istio           (True / False) True
    persistence enable 是否启用持久化存储   (True / False)(非测试环境建议开启数据持久化)
    storageClass 启用持久化存储要求环境中存在已经创建好的 StorageClass(默认为空,则使用 default StorageClass) “”
    containersLogMountedPath(可选) 容器日志挂载路径 “/var/lib/docker/containers”
    external_es_url(可选) 外部es地址,支持对接外部es用
    external_es_port(可选) 外部es端口,支持对接外部es用
    local_registry (离线部署使用) 离线部署时,对接本地仓库 (使用该参数需将安装镜像使用scripts/download-docker-images.sh导入本地仓库中)

    未来计划

    • 支持多个公有云的网络插件与存储插件;
    • 组件解耦,做成可插拔式的设计,使安装更轻量,资源消耗率更低。