离线安装与在线安装步骤基本一致,离线安装的 Installer 将会在机器创建一个 Docker Local Registry 用作本地镜像仓库。本文将演示在 Linux 机器离线安装 KubeSphere 2.1.1 与 Kubernetes 1.16.7。

注意,离线安装可能会因为依赖问题或操作系统的差异,安装过程可能会遇到与基础环境或依赖相关的问题。若您在安装过程中遇到问题,请在本篇帖子下进行留言说明机器信息与错误日志,我们将在本帖进行跟进。

注意事项:

  • 请确保机器磁盘可用空间不小于 100 G,并建议您在安装前,对 /var/lib/docker(存放本机镜像数据) 和 /mnt/registry(仅本地仓库所在机器) 目录单独挂盘(参考 fdisk 命令),挂盘大小请根据业务规模确定,原则不小于100G。
  • 由于离线部署无法连接公共 apt 或 yum 源,可能会遇到依赖问题,因此建议使用纯净操作系统进行部署。

本安装示例仅作为快速测试部署的演示,因此将使用默认的 OpenEBS 基于 Local Volume 提供持久化存储服务,OpenEBS 支持 动态申请 PV方便初次安装但没有准备存储服务端的场景下进行部署测试。正式环境建议配置使用 KubeSphere 支持的存储类型,并且配置负载均衡器,参考 高可用安装 KubeSphere

前提条件

建议关闭防火墙,若未关闭防火墙则需要开放相关的指定端口,参考 需开放的端口

第一步: 准备主机

离线安装支持单节点与多节点安装,本文以 3 节点安装为例。为防止软件版本冲突,建议您选择多台干净的机器进行安装

说明:

  • 注意!所有节点需要时间同步,否则安装可能会不成功;
  • 若使用 ubuntu 16.04 建议使用其最新的版本 16.04.5;
  • 若使用 ubuntu 18.04,则需使用 root 用户;
  • 若安装 DevOps 功能组件时需保证有一台内存大于 8G 的节点,因为 Jenkins 默认的 JVM 设置会需要 6~8 G 的整块内存,若可用内存不足可能会造成该节点崩溃。
  • 机器配置(所有节点总和):

    • CPU:最小化安装需 2 Cores;完整安装需 8 Cores
    • Memory:最小化安装需 4 GB;完整安装需 16 GB
    • 系统盘:100 GB(执行安装的节点需大于 80 GB)
  • 操作系统:

    • CentOS 7.4 ~ 7.7 (64-bit)

    • Ubuntu 16.04.5/16.04.6/18.04.1/18.04.2/18.04.3 LTS (64-bit)

以下示例介绍 multi-node 模式部署多节点环境,本示例准备了 3 台 CentOS 7.5 的主机并以 root 用户准备安装。登录主机名为 Master 的节点作为任务执行机 Taskbox 来执行安装步骤。

假设主机信息如下所示:

主机 IP主机名集群角色
192.168.0.1mastermaster,etcd
192.168.0.2node1node
192.168.0.3node2node

第二步: 下载 Installer

下载 KubeSphere 2.1.1 离线安装包(约 9.4 G)至待安装机器,进入 conf 目录。

# MD5: 12c0a336ba7d48bf33e7825befab25c2
curl -L https://kubesphere.io/download/offline/latest > kubesphere-all-offline-v2.1.1.tar.gz \
&& tar -zxf kubesphere-all-offline-v2.1.1.tar.gz

第三步:配置节点信息(单节点安装可跳过此步)

3.1. 编辑主机配置文件 conf/hosts.ini,为了对目标机器及部署流程进行集中化管理配置,集群中各个节点在主机配置文件 hosts.ini 中应参考如下配置,建议使用 root 用户进行安装。

cd kubesphere-all-offline-v2.1.1/conf

说明:

  • 若以非 root 用户 (如 ubuntu 用户) 进行安装,[all] 部分可参考配置文件 conf/hosts.ini 的注释中 non-root 用户示例部分编辑。
  • 如果在 taskbox 使用 root 用户无法 ssh 连接到其他机器,也需要参考 conf/hosts.ini 的注释中 non-root 用户示例部分,但执行安装脚本 install.sh 时建议切换到 root 用户。

3.2. 以下示例在 CentOS 7.5 上使用 root 用户安装的 hosts.ini 配置,每台机器信息占一行,不能分行。

root 配置 hosts.ini 示例:

[all]
master ansible_connection=local  ip=192.168.0.1
node1  ansible_host=192.168.0.2  ip=192.168.0.2  ansible_ssh_pass=PASSWORD
node2  ansible_host=192.168.0.3  ip=192.168.0.3  ansible_ssh_pass=PASSWORD

[local-registry]
master

[kube-master]
master

[kube-node]
node1
node2

[etcd]
master

[k8s-cluster:children]
kube-node
kube-master

说明:

  • [all]: 中需要修改集群中各个节点的内网 IP 和主机 root 用户密码:

    • 主机名为 “master” 的节点作为已通过 SSH 连接的 Taskbox 所以无需填写密码;

      • Node 节点的参数比如 node1 和 node2 的 ansible_hostip 都替换为当前 node1 和 node2 的内网 IP,将 >ansible_ssh_pass 相应替换为 node1 和 node2 的 root 用户密码。

      参数解释:

      • ansible_connection: 与主机的连接类型,此处设置为 local 即本地连接
      • ansible_host: 集群中将要连接的主机地址或域名
      • ip: 集群中将要连接的主机 IP
      • ansible_user: 默认的 SSH 用户名 (非 root),例如 ubuntu
      • ansible_become_pass: 默认的 SSH 用户登录密码
      • ansible_ssh_pass: 待连接主机 root 用户的密码
  • [local-registry]:离线安装包中该参数值表示设置哪个节点作为本地镜像仓库,默认值为 master 节点。建议给该节点的 /mnt/registry 单独挂盘 (参考 fdisk 命令),使镜像可保存在持久化存储并节省机器空间。

  • [kube-master][etcd]:应将主机名 “master” 填入 [kube-master] 和 [etcd] 部分,“master” 节点作为 taskbox,用来执行整个集群的安装任务,同时 “master” 节点在 KubeSphere 集群架构中也将作为 Master 节点管理集群和 etcd 节点负责保存集群的数据。

  • [kube-node]:将主机名 “node1″,“node2″ 填入 [kube-node] 部分,作为 KubeSphere 集群的 node 节点。

第四步:开启所有组件(最小化安装可跳过此步)

KubeSphere 默认仅开启最小化安装,若您的机器资源满足上述表格中完整安装的需求,建议您在安装前开启所有组件,体验 KubeSphere 完整的平台功能。

编辑 conf/common.yaml,参考如下说明开启所有组件(将 false 改为 true):

# LOGGING CONFIGURATION
# logging is an optional component when installing KubeSphere, and
# Kubernetes builtin logging APIs will be used if logging_enabled is set to false.
# Builtin logging only provides limited functions, so recommend to enable logging.
logging_enabled: true # 是否安装内置的日志系统
elasticsearch_master_replica: 1  # es 主节点副本数,主节点数不能为偶数
elasticsearch_data_replica: 2  # 数据节点副本数
elasticsearch_volume_size: 20Gi # Elasticsearch 存储卷大小
log_max_age: 7 # 集群内置的 Elasticsearch 中日志保留时间,默认是 7 天
elk_prefix: logstash # 自定义 index 命名方式,index 将以 ks-<elk_prefix>-log 形式命名
kibana_enabled: false # 是否部署内置的 Kibana
#external_es_url: SHOULD_BE_REPLACED # 安装支持对接外部的 Elasticsearch 7.x,可减少资源消耗,此处填写 ES 服务的地址
#external_es_port: SHOULD_BE_REPLACED # 此处填写 ES 服务暴露的端口号

#DevOps Configuration
devops_enabled: true # 是否安装内置的 DevOps 系统(支持流水线、 Source-to-Image 和 Binary-to-Image 等功能)
jenkins_memory_lim: 8Gi # Jenkins 内存限制,默认 8 Gi
jenkins_memory_req: 4Gi # Jenkins 内存请求,默认 4 Gi
jenkins_volume_size: 8Gi # Jenkins 存储卷大小,默认 8 Gi
jenkinsJavaOpts_Xms: 3g # 以下三项为 jvm 启动参数
jenkinsJavaOpts_Xmx: 6g
jenkinsJavaOpts_MaxRAM: 8g
sonarqube_enabled: true # 是否安装内置的 SonarQube (代码静态分析工具)
#sonar_server_url: SHOULD_BE_REPLACED # 安装支持对接外部已有的 SonarQube,此处填写 SonarQube 服务的地址
#sonar_server_token: SHOULD_BE_REPLACED  # 此处填写 SonarQube 的 Token

# Following components are all optional for KubeSphere,
# Which could be turned on to install it before installation or later by updating its value to true
openpitrix_enabled: true       # KubeSphere 应用商店
metrics_server_enabled: true   # KubeSphere HPA(弹性伸缩)
servicemesh_enabled: true      # KubeSphere Service Mesh
notification_enabled: true     # KubeSphere 通知系统
alerting_enabled: true         # KubeSphere 告警系统

第五步: 安装 KubeSphere

KubeSphere 多节点部署会自动化地进行环境和文件监测、平台依赖软件的安装、Kubernetes 和 etcd 集群的自动化部署,以及存储的自动化配置。Installer 默认安装的 Kubernetes 版本v1.16.7

说明:

  • 由于 Kubernetes 集群的 Cluster IP 子网网段默认是 10.233.0.0/18,Pod 的子网网段默认是 10.233.64.0/18,因此安装 KubeSphere 的节点 IP 地址范围不应与以上两个网段有重复,若遇到地址范围冲突可在配置文件 conf/common.yaml 修改 kube_service_addresseskube_pods_subnet 的参数。

5.1. 进入安装目录,建议使用 root 用户执行 install.sh 安装脚本:

cd ..
cd scripts
./install.sh

5.2. 输入数字 2 选择第二种 Multi-node 模式开始部署,安装程序会提示您的环境是否前提条件,若满足请输入 “yes” 开始安装。

################################################
         KubeSphere Installer Menu
################################################
*   1) All-in-one
*   2) Multi-node
*   3) Quit
################################################
https://kubesphere.io/               2020-02-23
################################################
Please input an option: 2

5.3. 验证 KubeSphere 集群部署是否成功:

(1) 待安装脚本执行完后,请耐心等待,当看到如下 "Successful" 的日志,则说明 KubeSphere 安装成功。

#####################################################
###              Welcome to KubeSphere!           ###
#####################################################

Console: http://192.168.0.1:30880
Account: admin
Password: P@88w0rd

NOTE:Please modify the default password after login.
#####################################################

提示:如需要再次查看以上的界面信息,可参考 验证安装 的查看安装日志命令。

(2) 安装成功后,浏览器访问对应的 URL,如 http://{$IP}:30880,即可进入 KubeSphere 登录界面,可使用默认的用户名和密码登录 KubeSphere 控制台体验,登录后请立即修改默认密码

注意:登陆 Console 后请在 “集群状态” 查看服务组件的监控状态,待所有组件启动完成后即可开始使用,通常所有服务组件都将在 15 分钟内启动完成。

开启可插拔功能组件

若您仅开启了默认的最小化安装,可通过编辑 ks-installer 的 ConfigMap 开启可选功能组件,详见 KubeSphere 可插拔功能组件概览

kubectl edit cm -n kubesphere-system ks-installer

离线升级至 2.1.1

若您已安装过 2.0.x 或 2.1.0,需要进行离线升级,请在参考上述步骤下载 Installer 后,参考 升级指南 进行升级,与在线升级步骤相同。

    10 天 后

    centos 7.7 basic web server 版,v 2.1.1 离线安装报错 帮看看。
    TASK [etcd : Configure | Check if etcd cluster is healthy] ******************************************************************
    Friday 13 March 2020 09:35:00 +0800 (0:00:00.041) 0:02:30.838 **********
    FAILED - RETRYING: Configure | Check if etcd cluster is healthy (4 retries left).
    FAILED - RETRYING: Configure | Check if etcd cluster is healthy (3 retries left).
    FAILED - RETRYING: Configure | Check if etcd cluster is healthy (2 retries left).
    FAILED - RETRYING: Configure | Check if etcd cluster is healthy (1 retries left).
    fatal: [master -> master]: FAILED! => {
    “attempts”: 4,
    “changed”: false,
    “cmd”: "/usr/local/bin/etcdctl –no-sync –endpoints=https://10.10.94.197:2379 cluster-health | grep -q ’cluster is healt
    “delta”: “0:00:00.015526″,
    “end”: “2020-03-13 09:35:33.207567”,
    “rc”: 1,
    “start”: “2020-03-13 09:35:33.192041”
    }

    STDERR:

    Error: client: etcd cluster is unavailable or misconfigured; error #0: Tunnel or SSL Forbidden

    error #0: Tunnel or SSL Forbidden

    MSG:

    non-zero return code

      Cauchy 谢谢啊,关掉了防火墙,卸载了重新安装终于可以进行到下一步了,但好像又卡住了,30次试完了也没能成功,也没返回啥信息

        nan 你看看是哪些 Pod 有问题?

        kubectl get pod --all-namespaces
        • nan 回复了此帖

          nan 好多pod都起不来 可以先describe看看那些pod为啥起不来 大概率还是机器网络原因

          • nan 回复了此帖

            nan 感谢大佬的帮助,问题终于解决,原因是机器上安装的kubernetes版本冲突了,卸载了yum remove kubelet、yum remove kubeadm、yum remove kubernetes-cni之后,执行uninstall.sh卸载后重新执行install.sh之后就安装成功了,再次感谢大佬的耐心帮助,nice!

            jhh452020 请注意看上面的 3.2 步骤中的配置示例,你漏写了本地的 [local registry] 项

              可以把scripts/os里边xxx.tmp文件删掉,重新执行安装试试

                商业产品与合作咨询