环境准备

以三台EulerOS 2.5 64bit 为例:

nameiprole
node1192.168.179.253etcd, master, worker
node2192.168.218.146worker
node3192.168.81.10worker

确保机器已经安装所需依赖软件(离线环境需要有可用yum源或相关rpm包),以yum为例:

yum install ebtables socat ipset conntrack docker -y

确保有可用私有镜像仓库,以docker registry为例(测试用):

docker run -d -p 5000:5000 --name=registry --restart=always --privileged=true --log-driver=none -v /mnt/registry:/var/lib/registry registry:2.7.1

# 为所有节点配置insecure-registries, /etc/docker/daemon.json

{
   "insecure-registries": ["192.168.179.253:5000"]
}

# 重启docker生效
systemctl restart docker

获取安装资源

kk:

curl -O -k https://kubernetes.pek3b.qingstor.com/tools/kubekey/kk

下载二进制文件:

curl -O -k https://kubernetes.pek3b.qingstor.com/tools/kubekey/kubekey.tar.gz

解压资源包:

tar -zxvf kubekey.tar.gz

确保 kk 可执行文件与 kubekey 处于同级目录

找一台有网的机器,通过镜像列表下载 KubeSphere 2.1.1 + Kubernetes 的镜像:

注意:以下Kubernetes 的镜像版本默认是 v1.17.9,可以修改镜像 tag v1.17.9 为其它 K8s 版本,如:v1.15.12、v1.16.13。

openebs_localpv:
  - calico/kube-controllers:v3.15.1
  - calico/node:v3.15.1
  - coredns/coredns:1.6.0
  - kubesphere/k8s-dns-node-cache:1.15.12
  - kubesphere/kube-apiserver:v1.17.9
  - kubesphere/kube-controller-manager:v1.17.9
  - kubesphere/kube-proxy:v1.17.9
  - kubesphere/kube-scheduler:v1.17.9
  - kubesphere/node-disk-manager:0.5.0
  - kubesphere/node-disk-operator:0.5.0
  - kubesphere/provisioner-localpv:1.10.0

ks_minimal_images:
  - kubesphere/ks-console:v2.1.1
  - kubesphere/kubectl:v1.0.0
  - kubesphere/ks-account:v2.1.1
  - kubesphere/ks-devops:flyway-v2.1.0
  - kubesphere/ks-apigateway:v2.1.1
  - kubesphere/ks-apiserver:v2.1.1
  - kubesphere/ks-controller-manager:v2.1.1
  - kubesphere/cloud-controller-manager:v1.4.0
  - kubesphere/ks-installer:v2.1.1
  - quay.azk8s.cn/kubernetes-ingress-controller/nginx-ingress-controller:0.24.1
  - mirrorgooglecontainers/defaultbackend-amd64:1.4
  - gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.3.1
  - kubesphere/configmap-reload:v0.3.0
  - kubesphere/prometheus:v2.5.0
  - kubesphere/prometheus-config-reloader:v0.34.0
  - kubesphere/prometheus-operator:v0.34.0
  - kubesphere/kube-rbac-proxy:v0.4.1
  - kubesphere/kube-state-metrics:v1.7.2
  - kubesphere/node-exporter:ks-v0.16.0
  - kubesphere/addon-resizer:1.8.4
  - kubesphere/k8s-prometheus-adapter-amd64:v0.4.1
  - grafana/grafana:5.2.4
  - redis:5.0.5-alpine
  - haproxy:2.0.4
  - alpine:3.10.4
  - quay.azk8s.cn/coreos/etcd:v3.2.18
  - mysql:8.0.11
  - nginx:1.14-alpine
  - postgres:9.6.8
  - osixia/openldap:1.3.0 
  - minio/minio:RELEASE.2019-08-07T01-59-21Z
  - minio/mc:RELEASE.2019-08-07T23-14-43Z

ks_notification_images:
  - kubesphere/notification:v2.1.0
  - kubesphere/notification:flyway_v2.1.0
  - kubesphere/alerting-dbinit:v2.1.0
  - kubesphere/alerting:v2.1.0
  - kubesphere/alert_adapter:v2.1.0

openpitrix_images:
  - openpitrix/release-app:v0.4.3
  - openpitrix/openpitrix:flyway-v0.4.8
  - openpitrix/openpitrix:v0.4.8
  - openpitrix/runtime-provider-kubernetes:v0.1.3

ks_devops_images:
  - kubesphere/jenkins-uc:v2.1.1
  - jenkins/jenkins:2.176.2
  - jenkins/jnlp-slave:3.27-1
  - kubesphere/builder-base:v2.1.0
  - kubesphere/builder-nodejs:v2.1.0
  - kubesphere/builder-maven:v2.1.0
  - kubesphere/builder-go:v2.1.0
  - sonarqube:7.4-community
  - kubesphere/s2ioperator:v2.1.1
  - kubesphere/s2irun:v2.1.1
  - kubesphere/s2i-binary:v2.1.0
  - kubesphere/tomcat85-java11-centos7:v2.1.0
  - kubesphere/tomcat85-java11-runtime:v2.1.0
  - kubesphere/tomcat85-java8-centos7:v2.1.0
  - kubesphere/tomcat85-java8-runtime:v2.1.0
  - kubesphere/java-11-centos7:v2.1.0
  - kubesphere/java-8-centos7:v2.1.0
  - kubesphere/java-8-runtime:v2.1.0
  - kubesphere/java-11-runtime:v2.1.0
  - kubesphere/nodejs-8-centos7:v2.1.0
  - kubesphere/nodejs-6-centos7:v2.1.0
  - kubesphere/nodejs-4-centos7:v2.1.0
  - kubesphere/python-36-centos7:v2.1.0
  - kubesphere/python-35-centos7:v2.1.0
  - kubesphere/python-34-centos7:v2.1.0
  - kubesphere/python-27-centos7:v2.1.0

ks_logger_images:
  - kubesphere/elasticsearch-curator:v5.7.6
  - kubesphere/elasticsearch-oss:6.7.0-1
  - kubesphere/fluent-bit:v1.3.2-reload
  - docker.elastic.co/kibana/kibana-oss:6.7.0
  - dduportal/bats:0.4.0
  - docker:19.03
  - kubesphere/fluentbit-operator:v0.1.0
  - kubesphere/fluent-bit:v1.3.5-reload
  - kubesphere/configmap-reload:v0.0.1
  - kubesphere/log-sidecar-injector:1.0

istio_images:
  - istio/kubectl:1.3.3
  - istio/proxy_init:1.3.3
  - istio/proxyv2:1.3.3
  - istio/citadel:1.3.3
  - istio/pilot:1.3.3
  - istio/mixer:1.3.3
  - istio/galley:1.3.3
  - istio/sidecar_injector:1.3.3
  - istio/node-agent-k8s:1.3.3
  - jaegertracing/jaeger-operator:1.13.1
  - jaegertracing/jaeger-agent:1.13
  - jaegertracing/jaeger-collector:1.13
  - jaegertracing/jaeger-query:1.13
  - kubesphere/examples-bookinfo-productpage-v1:1.13.0
  - kubesphere/examples-bookinfo-reviews-v1:1.13.0
  - kubesphere/examples-bookinfo-reviews-v2:1.13.0
  - kubesphere/examples-bookinfo-reviews-v3:1.13.0
  - kubesphere/examples-bookinfo-details-v1:1.13.0
  - kubesphere/examples-bookinfo-ratings-v1:1.13.0

example_images:
  - busybox:1.31.1
  - joosthofman/wget:1.0
  - kubesphere/netshoot:v1.0
  - nginxdemos/hello:plain-text
  - wordpress:4.8-apache
  - mirrorgooglecontainers/hpa-example:latest
  - java:openjdk-8-jre-alpine
  - fluent/fluentd:v1.4.2-2.0
  - perl:latest

将镜像导入离线仓库中

注意:上传镜像时请保持镜像namespace不变 (可将镜像保存为tar文件,放置于push-images.sh同级目录,使用push-images.sh上传)

cd images
./push-images.sh 192.168.179.253:5000

集群安装

创建集群配置文件

./kk create config --with-kubesphere v2.1.1

填写集群配置文件

apiVersion: kubekey.kubesphere.io/v1alpha1
kind: Cluster
metadata:
  name: config-sample
spec:
  hosts:
  - {name: node1, address: 192.168.179.253, internalAddress: 192.168.179.253, password: Huawei@123}
  - {name: node2, address: 192.168.218.146, internalAddress: 192.168.218.146, password: Huawei@123}
  - {name: node3, address: 192.168.81.10, internalAddress: 192.168.81.10, password: Huawei@123}
  roleGroups:
    etcd:
    - node1
    master: 
    - node1
    worker:
    - node1
    - node2
    - node3
  controlPlaneEndpoint:
    domain: lb.kubesphere.local
    address: ""
    port: "6443"
  kubernetes:
    version: v1.17.6
    imageRepo: kubesphere
    clusterName: cluster.local
  network:
    plugin: calico
    kube_pods_cidr: 10.233.64.0/18
    kube_service_cidr: 10.233.0.0/18
  registry:
    privateRegistry: 192.168.179.253:5000
    registryMirrors: []
    insecureRegistries: []
  storage:
    defaultStorageClass: localVolume
    localVolume:
      storageClassName: local

---
apiVersion: v1
data:
  ks-config.yaml: |
    ---
    local_registry: "192.168.179.253:5000"

    persistence:
      storageClass: ""
    etcd:
      monitoring: False
      endpointIps: 192.168.0.7,192.168.0.8,192.168.0.9
      port: 2379
      tlsEnable: True
    common:
      mysqlVolumeSize: 20Gi
      minioVolumeSize: 20Gi
      etcdVolumeSize: 20Gi
      openldapVolumeSize: 2Gi
      redisVolumSize: 2Gi
    metrics_server:
      enabled: False
    console:
      enableMultiLogin: False  # enable/disable multi login
      port: 30880
    monitoring:
      prometheusReplicas: 1
      prometheusMemoryRequest: 400Mi
      prometheusVolumeSize: 20Gi
      grafana:
        enabled: False
    logging:
      enabled: False
      elasticsearchMasterReplicas: 1
      elasticsearchDataReplicas: 1
      logsidecarReplicas: 2
      elasticsearchMasterVolumeSize: 4Gi
      elasticsearchDataVolumeSize: 20Gi
      logMaxAge: 7
      elkPrefix: logstash
      containersLogMountedPath: ""
      kibana:
        enabled: False
    openpitrix:
      enabled: False
    devops:
      enabled: False
      jenkinsMemoryLim: 2Gi
      jenkinsMemoryReq: 1500Mi
      jenkinsVolumeSize: 8Gi
      jenkinsJavaOpts_Xms: 512m
      jenkinsJavaOpts_Xmx: 512m
      jenkinsJavaOpts_MaxRAM: 2g
      sonarqube:
        enabled: False
        postgresqlVolumeSize: 8Gi
    servicemesh:
      enabled: False
    notification:
      enabled: False
    alerting:
      enabled: False

kind: ConfigMap
metadata:
  name: ks-installer
  namespace: kubesphere-system
  labels:
    version: v2.1.1

执行安装

./kk create cluster -f config-sample.yaml 

等待安装完成

2 个月 后
Feynman 更改标题为「KubeKey 离线部署 kubesphere v2.1.1