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导入本地仓库中)

未来计划

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