KubeSphere安装部署2.1.0DEV

KubeSphere安装部署2.1.0DEV版本

 

1  Kubesphere简介

https://kubesphere.io/

https://github.com/kubesphere/ks-installer

https://kubesphere.io/zh-CN/install/

https://kubesphere.io/docs/express/zh-CN/basic/

https://www.qikqiak.com/post/install-kubesphere-on-k8s/

KubeSphere是在 Kubernetes 之上构建的企业级分布式多租户容器管理平台,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大减轻开发、测试、运维的日常工作的复杂度,旨在解决 Kubernetes 本身存在的存储、网络、安全和易用性等痛点。除此之外,平台已经整合并优化了多个适用于容器场景的功能模块,以完整的解决方案帮助企业轻松应对敏捷开发与自动化运维、微服务治理、多租户管理、工作负载和集群管理、服务与网络管理、应用编排与管理、镜像仓库管理和存储管理等业务场景。

 

1.1 产品功能

KubeSphere 为用户提供了一个具备极致体验的 Web 控制台,让您能够像使用任何其他互联网产品一样,快速上手各项功能与服务。KubeSphere 目前集成了应用负载、服务与网络、应用管理、资源管理和平台管理共五大模块,以下从专业的角度为您详解各个模块的功能服务:

功能

应用负载管理

对 kubernetes 中的多种 workload 提供向导式管理界面,包括 Deployments,Daemon Sets,Stateful Sets,并提供 HPA 支持。

服务与网络管理

基于原生 API,对 k8s 中的服务 (Service)、应用路由 (ingress) 等功能提供向导式管理界面,快速将应用暴露以供用户访问。高级版将集成 istio 中的 微服务治理、熔断、灰度发布、限流、智能路由等功能提供向导式管理界面。
如果部署在青云平台之上,可以使用插件对接青云的负载均衡器。

应用管理

后端使用开源的 OpenPitrix 服务,为用户提供应用全生命周期管理功能,包括: 应用仓库管理、应用拓扑图、APM、应用变更和发布、应用上下线审批、版本控制、鲁棒性测试等。

资源管理

提供存储、主机、集群以及配额管理。存储既支持主流开源存储解决方案,也可对接青云的块存储和 NeonSAN。可批量添加主机,且对主机平台及系统弱依赖。并且支持镜像仓库管理、镜像复制、权限管理、镜像安全扫描。

平台管理

提供基于角色的细粒度权限多租户管理,平台服务间进行加密通信;提供操作审计日志;可对宿主机以及容器镜像进行安全扫描并发现漏洞。

 

 

1.2  部署模式

KubeSphere 部署支持 all-in-onemulti-node 两种部署模式, KubeSphere Installer 采用 Ansible 对部署目标机器及部署流程进行集中化管理配置。采用预配置模板,可以在部署前通过对相关配置文件进行自定义实现对部署过程的预配置,以适应不同的 IT 环境,帮助您快速部署 KubeSphere。

  • KubeSphere 集群中由于部署服务的不同,分为管理节点和计算节点两个角色。
  • 当进行 all-in-one 模式进行单节点部署时,这个节点既是管理节点,也是计算节点。
  • 当进行 multi-node 模式部署多节点集群时,可在配置文件中设置集群角色。
  • 由于部署过程中需要更新操作系统和从镜像仓库拉取镜像,因此必须能够访问外网。无外网环境需先下载离线安装包安装。
  • 如果是新装系统,在 Software Selection 界面需要把 OpenSSH Server 选上。

2  部署

https://github.com/kubesphere/ks-installer

 

2.1  环境准备

  • 集群现有的可用内存至少在 10G 以上
#  kubectl version | grep Server
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3", GitCommit:"2d3c76f9091b6bec110a5e63777c332469e0cba2", GitTreeState:"clean", BuildDate:"2019-08-19T11:05:50Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}


# helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}

 

 

2.1.1 创建StorageClass

首先需要确保集群中有一个默认的 StorageClass 资源对象,关于 StorageClass 的使用可以查看

kubernetes(14):k8s基于NFS部署storageclass实现pv自动供给

# vim sphere-sc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: kubesphere-data
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: fuseim.pri/ifs

 

 

其中 annotations 下面的 storageclass.kubernetes.io/is-default-class: “true” 是必须的:

# kubectl get sc | grep dynamic
NAME                     PROVISIONER      AGE
kubesphere-data (default)   fuseim.pri/ifs   4h41m

 

 

 

2.2  清理环境

建议先停止已经安装的prometheus/gitlab/Jenkins/sonarqube/harbor/ metrics_server/node-exporter/ Dashboard会有冲突

 

2.3  安装

2.3.1 创建命名空间

首先,在集群中创建名为 kubesphere-system 和 kubesphere-monitoring-system 的namespace:

 

cat <<EOF | kubectl create -f -
---
apiVersion: v1
kind: Namespace
metadata:
  name: kubesphere-system
---
apiVersion: v1
kind: Namespace
metadata:
  name: kubesphere-monitoring-system
EOF

 

2.3.2 创建集群ca证书secret

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

kubectl -n kubesphere-system create secret generic kubesphere-ca  \
--from-file=ca.crt=/etc/kubernetes/pki/ca.crt  \
--from-file=ca.key=/etc/kubernetes/pki/ca.key 

 

2.3.3 创建etcd证书secret

注:以集群实际 etcd 证书位置创建;若 etcd 没有配置证书,则创建空secret

kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs

 

cat /etc/kubernetes/manifests/etcd.yaml
......
livenessProbe:
  exec:
    command:
    - /bin/sh
    - -ec
    - ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt
        --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key
        get foo
......

 

从这里我们也可以获得 etcd 集群相关的证书。

2.3.4 下载代码

git clone https://github.com/kubesphere/ks-installer.git -b master
# 看起来我这边是2.1.0dev版本

 

 

2.3.5   在Kubernetes 集群部署 KubeSphere。

版本不一部署方式也不一样,我这里是通过配置文件确定部署模块的,把Jenkins、gitlab、harbor、sonarqube、监控一堆都部署上

修改cat config.yaml 文件

# ls
controller  deploy  Dockerfile  docs  env  LICENSE  playbooks  README.md  README_zh.md  roles  scripts  src
cd deploy
# ls
config.yaml  kubesphere-installer.yaml
# cat config.yaml
---
apiVersion: v1
data:
  ks-config.yaml: |
    ---
    kubernetes:
      apiserverAddr: 10.6.76.25:6443      # master addr or master's lb addr

    etcd:
      endpointIps: 10.6.76.25
      port: 2379
      tlsEnable: True

    persistence:
      storageClass: "kubesphere-data"

    common:
      enableHA: True
      mysqlVolumeSize: 20Gi
      minioVolumeSize: 20Gi
      etcdVolumeSize: 20Gi
      openldapVolumeSize: 2Gi
      redisVolumSize: 2Gi

    metrics-server:
      enabled: True

    console:
      enableMultiLogin: True  # enable/disable multi login
      port: 30880
      replicas: 1

    monitoring:
      prometheusReplicas: 1
      prometheusMemoryRequest: 400Mi
      prometheusVolumeSize: 20Gi
      grafana:
        enabled: True

    logging:
      enabled: True
      elasticsearchMasterReplica: 1
      elasticsearchDataReplica: 1
      elasticsearchVolumeSize: 20Gi
      logMaxAge: 7
      elkPrefix: logstash
      containersLogMountedPath: ""
      kibana:
        enabled: True

    openpitrix:
      enabled: True

    devops:
      enabled: True
      jenkinsMemoryLim: 2Gi
      jenkinsMemoryReq: 1500Mi
      jenkinsVolumeSize: 8Gi
      jenkinsJavaOpts_Xms: 512m
      jenkinsJavaOpts_Xmx: 512m
      jenkinsJavaOpts_MaxRAM: 2g
      sonarqube:
        enabled: True

    servicemesh:
      enabled: True

    notification:
      enabled: True

    alerting:
      enabled: True

    harbor:
      enabled: True
      domain: harbor.devops.kubesphere.local
    gitlab:
      enabled: True
      domain: gitlab.devops.kubesphere.local

kind: ConfigMap
metadata:
  name: ks-installer
  namespace: kubesphere-system
cat config.yaml

 

#执行部署
kubectl apply -f kubesphere-installer.yaml

 

 

2.3.6   查看部署日志

#这个不同版本也不一样,实在不行就直接 kubectl -n kubesphere-system logs -f 部署的pod

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

 

 

2.3.7   所需镜像

注意查看失败的pod信息,如果有镜像不能正确拉取,可以通过ks-installer/scripts/download-docker-images.sh下载 或者根据提示失败的node上拉取

 

#例如
docker login -u guest -p guest dockerhub.qingcloud.com
docker pull dockerhub.qingcloud.com/gitlab_org/gitlab-unicorn-ce:v11.8.1

 

 

3   登录使用kubesphere

3.1  登录

查看控制台的服务端口,使用 IP:30880 访问 KubeSphere UI 界面,默认的集群管理员账号为 admin/P@88w0rd

 

 

 

 

 

 

 

 

 

 

 

 

3.2  prometheus监控

ks整合了prometheus监控,多种维度监控

# kubectl  -n kubesphere-monitoring-system get pod
NAME                                   READY   STATUS    RESTARTS   AGE
kube-state-metrics-6749b6ff4b-5dh62    4/4     Running   0          18h
node-exporter-5ctrs                    2/2     Running   0          18h
node-exporter-gqd84                    2/2     Running   0          18h
node-exporter-q2vdl                    2/2     Running   0          18h
node-exporter-t7wfj                    2/2     Running   0          18h
prometheus-k8s-0                       3/3     Running   27         18h
prometheus-k8s-1                       3/3     Running   1          18h
prometheus-k8s-system-0                3/3     Running   1          18h
prometheus-k8s-system-1                3/3     Running   1          18h
prometheus-operator-799455496d-fwlcb   1/1     Running   0          18h

 

 

 

 

设置一个测试告警

配置起来非常方便

 

 

 

 

 

 

 

邮件发送

 

 

 

 

 

 

 

 

 

3.3  Jenkins

Jenkins 是一款由 Java 开发的开源的持续集成工具,KubeSphere 内置的 Jenkins 服务端可参考如下步骤登录访问。

1、Jenkins Dashboard 服务暴露的端口 (NodePort) 默认为 30180,若在云平台部署 KubeSphere,则需要进行端口转发和添加防火墙规则,确保外网流量能够正常通过该端口。

2、然后访问公网 IP 和端口号即 http://${EIP}:${NODEPORT},Jenkins 已对接了 KubeSphere 的 LDAP,因此可使用用户名 admin 和 KubeSphere 集群管理员的密码 (初始密码为 P@88w0rd) 登录 Jenkins Dashboard。

说明:若部署在私有环境,则可以在集群的任意节点通过 http://{$节点 IP}:30180 进行访问。

 

 

 

 

3.4 sonarqube

https://kubesphere.io/docs/v2.0/zh-CN/installation/sonarqube-jenkins/

SonarQube 是一个开源的代码分析软件,用来持续分析和检测代码的质量,支持检测 Java、C#、C、C++、JavaScript 等二十多种编程语言。通过 SonarQube 可以检测出项目中潜在的 Bug、漏洞、代码规范、重复代码、缺乏单元测试等问题,SonarQube 提供了 UI 界面进行查看和管理。KubeSphere 安装时默认内置了 SonarQube 服务,可参考如下步骤,访问内置 SonarQube。

 

# kubectl get pods,svc  -n kubesphere-devops-system | grep sonarqube

pod/ks-sonarqube-postgresql-5cbb44cc9-64mgb    1/1     Running     0          18h
pod/ks-sonarqube-sonarqube-9bf449458-7mzfw     1/1     Running     0          18h
service/ks-sonarqube-postgresql              ClusterIP   10.104.23.38     <none>        5432/TCP         18h
service/ks-sonarqube-sonarqube               NodePort    10.97.163.216    <none>        9000:30746/TCP   18h

 

 

在浏览器中访问 SonarQube,初次登录的默认账号密码为 admin / admin

创建 SonarQube Token

 

 

 

 

e7a66041f8920011049207b480cef50b54474c8a

 

 

 

 

mvn sonar:sonar \
  -Dsonar.host.url=http://10.6.76.25:32746 \
  -Dsonar.login=e7a66041f8920011049207b480cef50b54474c8a

 

 

3.5 gitlab

https://kubesphere.io/docs/v2.1/zh-CN/installation/gitlab-installation/

 

在浏览器中可以通过 {$域名}:{$NodePort}http://gitlab.devops.kubesphere.local:30080 访问 GitLab 登录页面。默认的 GitLab 用户名和密码为 admin / P@88w0rd

 

这个一定要域名解析啊

 

 

 

 

3.6 harbor

https://kubesphere.io/docs/v2.1/zh-CN/installation/harbor-installation/

可以域名解析 http://harbor.devops.kubesphere.local:30280

输入默认的管理员用户名和密码 admin / Harbor12345 登录 Harbor。

其它用户登录的账号密码与 KubeSphere 的 LDAP 用户账户体系一致。

 

 

 

 

3.7 elk日志中心

 

 

 

 

 

 

3.8 kubectl控制台

相当于命令行

 

 

 

 

 

 

4 卸载

卸载脚本 将从机器中删除 KubeSphere,该操作不可逆,也不会备份任何数据,请谨慎操作。

ks-installer/scripts/kubesphere-delete.sh
helm list #查看未删除的
删除 devops命名空间 sts 有状态服务
#删除持久化存储文件 cd /data/volumes/v1/ 选择性删除

 

posted on 2019-11-01 16:09  光阴8023  阅读(4804)  评论(3编辑  收藏  举报