微服架构基础设施环境平台搭建 -(四)在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命令
目录
一、微服架构采用的技术架构
序号 | 技术框架 | 说明 |
---|---|---|
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文件服务 |
三、部署架构
四、部署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
五、为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
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
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)、登录画面
2)、初次登录时修改初始密码画面
2、首页
1)、登录成功后首页
2)、平台管理首页
3、集群节点管理
1)、集群节点列表管理画面
2)、集群节点详情画面
4、监控告警
八、启用DevOps插件
1、进入集群管理
登录Web控制台后->平台管理->集群管理
2、定制资源定义
1)、搜索框内输入【clusterconfiguration】
2)、进入ClusterConfiguration详情画面后编辑ks-insaller的YAML
3)、将devops下的enabled值改为true
改值改为true后,点击【确定】后保存并关闭弹窗口,并在稍后会提示“更新成功”
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的令牌
项目详情->配置->保密字典
4、创建服务
项目详情->应用负载->服务
说明
1、无状态服务:无数据数据持久化的服务
2、有状态服务:数据需要持久化的服务
由于我们是要创建mysql服务,所以选有状态
配置完成后点击【对钩】