KubeSphere安装部署2.1.0DEV
KubeSphere安装部署2.1.0DEV版本
1 Kubesphere简介
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-one
和
multi-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 环境准备
- 使用 kubeadm 搭建的 Kubernetes 1.15.3 版本集群,Kubernetes 版本要求为 1.13.0 ≤ K8s Version ≤ 1.16 kubernetes(3):kubeadm安装k8s1.15
- Helm v2.13.1 版本,至少为2.10 kubernetes(27):k8s包管理工具-helm(1)-安装helm
- 使用 NFS 作为集群存储后端 kubernetes(13):k8s数据持久化-pv和pvc—NFS实现
- 使用到的安装脚本地址: https://github.com/kubesphere/ks-installer
- 集群现有的可用内存至少在
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
#执行部署
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
。
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/ 选择性删除