微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台

通过采用微服相关架构构建一套以Kubernetes+Docker为自动化运维基础平台,以微服务为服务中心,在此基础之上构建业务中台,并通过Jekins自动构建、编译、测试、发布的自动部署,形成一套完整的自动化运维、发布的快速DevOps平台。

本文是基于Kubernets集群基础上来部署Kubesphere的,搭建Kubernetes集群参见【微服架构基础设施环境平台搭建 -(三)Docker+Kubernetes集群搭建】

Kubesphere详情参见【官方网站】

详情参照Kubesphere官方文档【在 Kubernetes 上最小化安装 KubeSphere】

微服架构基础设施环境平台搭建 系列文章

微服架构基础设施环境平台搭建 -(一)基础环境准备微服架构基础设施环境平台搭建 -(二)Docker私有仓库Harbor服务搭建微服架构基础设施环境平台搭建 -(三)Docker+Kubernetes集群搭建微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台微服架构基础设施环境平台搭建 -(五)Docker常用命令微服架构基础设施环境平台搭建 -(六)Kubesphere 部署Redis服务 & 设置访问Redis密码微服架构基础设施环境平台搭建 -(七)Kubesphere pod内安装vim&ping命令


目录

  • 微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台
  • 一、微服架构采用的技术架构
  • 二、微服架构基础设施平台网络规划
  • 三、部署架构
  • 四、部署NFS提供外部共享存储
  • 1、在ks-harbor服务器部署NFS服务
  • 2、在ks-n1、ks-n2服务器部署NFS客户端
  • 五、为Kubenetes集群配置NFS存储
  • 1、新建sc.yaml
  • 2、执行发布安装
  • 六、安装Kubesphere
  • 1、下载并发布安装Kubesphere
  • 2、通过日志实时显示安装进度
  • 3、登录Web控制台
  • 七、体验Kubesphere平台
  • 1、登录
  • 2、首页
  • 3、集群节点管理
  • 4、监控告警
  • 八、启用DevOps插件
  • 1、进入集群管理
  • 2、定制资源定义
  • 1)、搜索框内输入【clusterconfiguration】
  • 2)、进入ClusterConfiguration详情画面后编辑ks-insaller的YAML
  • 3)、将devops下的enabled值改为true
  • 4)、查看安装进度
  • 九、在Kubesphere上部署一个Harbor上的镜像服务
  • 1、创建企业空间
  • 2、创建项目
  • 3、创建访问Harbor的令牌
  • 4、创建服务


一、微服架构采用的技术架构

序号

技术框架

说明

1

Kubernetes

2

Kubesphere

Kubernetes编排器,管理平台,类似的平台还有Rancher

3

Docker

4

Harbor

Docker私有仓库

5

GitLab

源码库

6

Jekins

自动编译、测试、发布平台

7

Spring Cloud Alibaba

Spring Cloud Alibaba微服体系架构

8

Nacos

Api网关、服务注册发现配置管理中心

9

Sentinel

限流溶断安全中心

10

Seata

分布式事务管理框架

11

Redis

分布式缓存服务

12

ElasticSearch/Solr

数据检索服务

13

Mysql

结构化数据存储

14

Grafana

监控平台

15

Nginx

服务代理、Web服务

二、微服架构基础设施平台网络规划

序号

IP

HostName

操作系统

K8s角色

说明

1

192.168.1.141

ks-m1

CentOS7_x64

控制节点

Kubernetes Master

2

192.168.1.142

ks-m2

CentOS7_x64

控制节点

Kubernetes Master高可用节点,如果不需要高可用,可不部署此服务器

3

192.168.1.143

ks-m3

CentOS7_x64

控制节点

Kubernetes Master高可用节点,如果不需要高可用,可不部署此服务器

4

192.168.1.144

ks-n1

CentOS7_x64

工作节点

Kubernetes Worker

5

192.168.1.145

ks-n2

CentOS7_x64

工作节点

Kubernetes Worker

6

192.168.2.146

ks-harbor

CentOS7_x64

工作节点

Harbor服务+NFS文件服务

三、部署架构

kubesphere部署spring_kubesphere部署spring

四、部署NFS提供外部共享存储

1、在ks-harbor服务器部署NFS服务

yum install -y nfs-common nfs-utils 
# 分配权限
mkdir /nfsdata && chmod 666 /nfsdata && chown nfsnobody /nfsdata
# 配置挂载
vim /etc/exports
/nfsdata *(rw,no_root_squash,no_all_squash,sync)

#systemctl start nfs && systemctl enable nfs  && systemctl status nfs
#启动
systemctl start rpcbind && systemctl start nfs

# 使配置生效
exportfs -r

#检查配置是否生效
exportfs

#重载配置文件,不需要重启服务
exportfs -arv

2、在ks-n1、ks-n2服务器部署NFS客户端

分别在ks-n1、ks-n2执行下面的命令

# 安装nfs
yum install -y nfs-utils

systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server

#用showmount -e查看远程服务器rpc提供的可挂载的nfs信息
showmount -e 192.168.2.146

#创建挂载点目录(可自行定义)
mkdir -p /nfsdata
#执行挂载命令,完成后测试文件是否共享
mount -t nfs 192.168.2.146:/nfsdata /nfsdata
#配置客户端重启时自动挂载
vim /etc/fstab

新增内容

192.168.2.146:/nfsdata  /nfsdata	nfs     defaults	0 0
#查看挂载是否成功
df -h

kubesphere部署spring_kubernetes_02

五、为Kubenetes集群配置NFS存储

本操作所有命令都在ks-m1服务器上执行

1、新建sc.yaml

mkdir /home/hxyl/sc
cd /home/hxyl/sc
vim sc.yaml

sc.yaml的内容

## 创建了一个存储类
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
  archiveOnDelete: "true"  ## 删除pv的时候,pv的内容是否要备份

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2
          # resources:
          #    limits:
          #      cpu: 10m
          #    requests:
          #      cpu: 10m
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: k8s-sigs.io/nfs-subdir-external-provisioner
            - name: NFS_SERVER
              value: 192.168.2.146 ## 指定自己nfs服务器地址
            - name: NFS_PATH  
              value: /nfsdata  ## nfs服务器共享的目录
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.2.146
            path: /nfsdata
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

2、执行发布安装

# 执行发布安装
kubectl apply -f sc.yaml

# 查看nfs-client-provisioner pod 是否安装成功
kubectl get pod -A

kubesphere部署spring_架构_03


kubesphere部署spring_架构_04

六、安装Kubesphere

1、下载并发布安装Kubesphere

# 下载核心文件并将其pod发布到Kubernetes中
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.2/kubesphere-installer.yaml

# 执行完此命令后需要通过下面【2、通过日志实时显示安装进度】命令查看安装进度,大概需要几分钟的时间
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.2/cluster-configuration.yaml

2、通过日志实时显示安装进度

#查看安装进度
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

kubesphere部署spring_kubernetes_05

3、登录Web控制台

说明:

1、访问3个Master节点(ks-m1、ks-m2、ks-m3)任何一个节点的30880端口即可。例如:http://192.168.1.141:30880
2、默认的用户名:admin,默认的密码:P@88w0rd

七、体验Kubesphere平台

说明:
下面部分截图中显示的是3个节点,原因是开始部署的5台虚拟机由于资源有限,服务器跑不动了,导致集群节点不可用,后来,将集群节点由5个降为3个节点:
1、Master节点:ks-m1
2、Worker节点:ks-m2、ks-n1

1、登录

1)、登录画面

kubesphere部署spring_基础设施_06

2)、初次登录时修改初始密码画面

kubesphere部署spring_kubernetes_07

2、首页

1)、登录成功后首页

kubesphere部署spring_kubesphere部署spring_08


2)、平台管理首页

kubesphere部署spring_kubernetes_09

3、集群节点管理

1)、集群节点列表管理画面

kubesphere部署spring_kubesphere部署spring_10


2)、集群节点详情画面

kubesphere部署spring_基础设施_11


kubesphere部署spring_kubesphere部署spring_12


kubesphere部署spring_docker_13

4、监控告警

kubesphere部署spring_docker_14


kubesphere部署spring_kubernetes_15


kubesphere部署spring_基础设施_16


kubesphere部署spring_kubernetes_17

八、启用DevOps插件

1、进入集群管理

登录Web控制台后->平台管理->集群管理

kubesphere部署spring_kubernetes_18

2、定制资源定义

1)、搜索框内输入【clusterconfiguration】

kubesphere部署spring_架构_19

2)、进入ClusterConfiguration详情画面后编辑ks-insaller的YAML

kubesphere部署spring_架构_20

3)、将devops下的enabled值改为true

改值改为true后,点击【确定】后保存并关闭弹窗口,并在稍后会提示“更新成功”

kubesphere部署spring_kubernetes_21

4)、查看安装进度

安装过程会持续几分钟,执行下面命令可以查看实时安装日志

# 在ks-m1上执行
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

九、在Kubesphere上部署一个Harbor上的镜像服务

1、创建企业空间

2、创建项目

3、创建访问Harbor的令牌

项目详情->配置->保密字典

kubesphere部署spring_kubesphere部署spring_22

4、创建服务

项目详情->应用负载->服务

kubesphere部署spring_docker_23

说明

1、无状态服务:无数据数据持久化的服务
2、有状态服务:数据需要持久化的服务

由于我们是要创建mysql服务,所以选有状态

kubesphere部署spring_基础设施_24

kubesphere部署spring_基础设施_25


kubesphere部署spring_kubernetes_26


kubesphere部署spring_docker_27


配置完成后点击【对钩】

kubesphere部署spring_架构_28

kubesphere部署spring_docker_29


kubesphere部署spring_架构_30


kubesphere部署spring_基础设施_31


kubesphere部署spring_基础设施_32

kubesphere部署spring_kubernetes_33