容器同城双活数据中心最佳实践

栏目:影视资讯  时间:2022-10-31
手机版

  1

  前言

  目前容器应用已经开始流行起来,特别是在金融行业,很多创新企业已经在生产系统中使用。很多容器应用都是有状态的,比如很多分布式数据库,进入生产系统也就意味这些容器应用也需要高级别的容灾支持。XSKY星辰天合作为国内率先支持CSI(容器存储接口)标准的专业SDS厂商,在容器存储方面有很多成功的案例。而且,星辰天合采用延展集群配合各个版本的Kubernetes(K8s)容器编排软件,帮助用户实现实现容器双活数据中心,助力容器应用支撑核心业务。

  2

  延展集群

  星辰天合延展集群功能为跨地域的业务双活方案提供存储支撑。延展集群需要与业务紧密配合实现业务高可用,本文以对接K8s虚拟化场景为例介绍业务高可用解决方案及其配置方法。

  出于对关键业务容灾,避免业务宕机,保障业务持续可用的目的考虑,很多企业开始兴建双活数据中心,特别是金融行业。XEDP可跨同城数据中心部署存储延展集群,实现数据中心级故障域,存储多副本数据镜像在两个数据中心,保证任何一个数据中心内所有存储节点故障,业务零切换、数据零丢失。

  

  用户搭建XEDP延展集群在双活数据中心,除了需保证存储池跨两站点创建保证业务数据对象多副本,同时需要在两个数据中心平均分配MON角色,并在第三站点部署一个MON仲裁节点。所有站点之间通过高速、低延迟网络连接。每个站点被配置作为一个单独的故障域,MON最小支持配置是1(数据中心A MON数量)+1(数据中心B MON数量)+1(仲裁节点MON数量)(3节点)。当出现数据中心故障(如地域性灾害)时,仍将有超过50%的MON组件可用,从而保障XEDP分布式存储集群的持续可用。XEDP分布式存储的这种特性,使得延展集群成为实现企业数据双活数据中心最简便,且切实可行的方案。

  XEDP分布式存储系统支持将集群内的存储节点放置在不同的数据中心中,确保一个数据对象的多个副本保存在不同地理位置的存储节点上,实现多副本数据高可用。从管理面到底层存储,可运行在二层或三层网络之上,支持不同子网间的部署通信,降低用户网络配置的复杂度。

  3

  容器对接

  k8s集群如何在SDS延展集群之上配置与使用?

  k8s与XSKY SDS之间通过CSI来实现对接。CSI 官方认证:https://kubernetes-csi.github.io/docs/drivers.html

  XSKY CSI Driver分为Block Driver与 NFS driver。管理使用XMS API对接。IO面,Block Driver使用iSCSI协议与k8s node节点通信;NFS driver使用NFS协议与k8s node节点通信。Block volume支持VIP与多路径方式进行卷挂载。

  延展集群中,目前建议CSI iSCSI Driver使用多路径进行对接。

  

  通过在访问路径中添加多个数据中心的多个网关节点来保证多路径链路冗余。当灾难发生,多路径的冗余可以保障数据访问的正常。

  CSI iSCSI Driver配置过程1.k8s平台开启快照、扩容、克隆、raw功能

  k8s默认未开启快照、扩容、克隆、raw功能,需要配置kube-apiserver.yaml、kube-controller-manager.yaml、10-kubeadm.conf 中的参数开启功能。如果k8s新版本功能GA,就不再需要配置。

  版本说明见k8s官网:https://kubernetes-csi.github.io/docs/drivers.html

  添加如下参数:

  1BlockVolume:开启raw卷功能2CSIBlockVolume:开启raw卷功能3VolumeSnapshotDataSource:开启快照功能4ExpandCSIVolumes:开启扩容功能5ExpandInUsePersistentVolumes:开启在线扩容功能6VolumePVCDataSource:开启克隆功能(k8s 1.15.0+版本支持)

  使用rancher对接时,需要在rancher管理界面配置kube-apiserver、kube-controller、kubelet三个服务,上一步中提到的参数。

  2.Secret配置与创建

  此功能用于保存SDS管理用户的用户名与密码,提供给CSI Driver使用。

  3.AccessPath创建

  1# vi cr-ap.yaml2apiVersion: "sds.xsky.com/v1"3kind: AccessPath4metadata:5 name: my-ap #kubernete显示的资源名称6spec:7 name: myap #SDS存储上AccessPath名称8 type: Kubernetes #accesspath类型,默认为Kubernetes9 cluster_info:10 xmsServers: 10.252.90.39 #SDS集群管理节点IP地址,可配置多个,逗号隔开11 secret_name: test-secret #SDS集群secret12secret_namespace: default #secret所属命名空间13 gateway: vm39,vm40,vm41 #配置块网关hostname14 vip_group: #配置vip15 preempt: false #optional #vip是否回切16 vips: #如不需要vip,请配置为vips: [],并使用#号注释下面三行17 - vip: 10.252.90.100 #vip ip18 mask: 24 #vip子网19 default_gateway: vm39 #vip创建节点

  4.StorageClass配置与创建

  描述如何配置StorageClass,及参数解释、定义一个后端存储。

  5.PVC配置与创建

  PVC资源,依赖storageclass,用于定义及自动创建一个后端卷。

  6.POD配置与创建

  Pod是k8s基本资源,Pod中可以跑一个或多个容器,也可以挂载本地或后端存储卷。

  1apiVersion: v12kind: Pod3metadata:4 name: my-pod5spec:6 containers:7 - name: web-server8 image: nginx9 volumeMounts: #挂载文件系统,定义pvc格式化成文件系统形式挂载到pod内(对应PVC中的volumeMode: Filesystem)10 - name: pvc-1 #关联volumes的名称11 mountPath: /var/lib/www/html #指定容器中挂载点12 readOnly: false #readOnly:卷是否只读。true为只读,false为读写,在下面卷上定义也可以1314 # volumeDevices: #挂载裸设备,定义pvc以裸设备形式挂载到pod内(对应PVC中的volumeMode: Block)15 # - devicePath: /dev/xda #绑定到容器盘符16 # name: nginx-storage-block #关联卷的名称1718 volumes: #定义卷信息,指定为pvc卷19 - name: pvc-120 persistentVolumeClaim:21 claimName: my-pvc #指定PVC22 readOnly: false

  7.VolumeSnapshotClass配置与创建

  此资源用于定义快照。

  1 apiVersion: snapshot.storage.k8s.io/v1alpha12 kind: VolumeSnapshotClass3 metadata:4 name: csi-hostpath-snapclass # VolumeSnapshotClass名称5 parameters:6 flatten: "true" # restore时是否断链,true为断链,false为不断链7 use: "true" # 是否允许restore,true为允许,false为不允许8 snapshotter: iscsi.csi.xsky.com9 deletionPolicy: Delete # Retain:保留后端快照 Delete:删除后端快照

  CSI NFS Driver配置过程1.NFS创建

  使用chrome浏览器登录SDS dashboard,分别创建文件客户端&客户端组、文件网关组、文件系统,添加NFS共享 。

  2.StorageClass 配置与创建

  1apiVersion: storage.k8s.io/v12kind: StorageClass3metadata:4 name: csi-nfs-sc5provisioner: com.nfs.csi.xsky6parameters:7 xmsServers: 10.252.3.179,10.252.3.180,10.252.3.181 # SDS管理节点管理IP,建议配置3个,以逗号隔开8 user: admin # SDS管理节点用户名9 password: admin # SDS管理节点密码10shares: 192.168.120.123:/sdsfs/k8s-nfs/ # NFS共享地址,配置多个以逗号隔开11 clientGroupName: "k8s-cluster" # 客户端名称,删除此字段或者字段值为空表示公开共享12reclaimPolicy: Delete # 删除策略13mountOptions:14- vers=3 # vers:支持v3,v4。默认使用v3

  3.PVC 配置与创建

  1apiVersion: v12kind: PersistentVolumeClaim3metadata:4 name: csi-nfs-pvc # PVC名称5spec:6 accessModes:7 - ReadWriteOnce # 访问模式8 # ReadWriteOnce:只允许单节点挂载9 # ReadOnlyMany:允许多节点以只读方式挂载,pod中挂载卷需要配置成只读。10 # ReadWriteMany:允许多节点以读写方式挂载(iscsi不支持,NFS支持)11 resources:12 requests:13 storage: 5Gi14 storageClassName: csi-nfs-sc

  4.pod 配置与创建

  1apiVersion: v12kind: Pod3metadata:4 name: csi-nfs-demopod5spec:6 containers:7 - name: web-server8 image: nginx9 volumeMounts:10 - name: mypvc # 本配置文件定义的卷名称11 mountPath: /var/lib/www/html # 挂载到容器中的目录12 volumes:13 - name: mypvc # 本配置文件定义的卷名称14 persistentVolumeClaim:15 claimName: csi-nfs-pvc # pvc名称16 readOnly: false # true为只读,false为读写

  当XSKY的延展集群用于K8s容器集群容灾,如何进行pvc恢复?

  在K8s这端需要使用到双活运维工具,负载均衡组件之间也通过HA部署方式保证其高可用,如使用Keepalive,或者统一采用 pacemaker+corosync 组件保证容器的高可用和稳定性,主要目的是同步两个集群之间的计算端相关文件。整个k8s集群容灾需要拷贝所有k8s资源,存储则可以通过XSKY延展集群来实现。

  

  步骤如下:

  主Kubernetes集群与备Kubernetes集群部署同一套XSKY CSI Driver,部署方法参考最佳实践手册。

  NFS 对接,网关组需要添加两个中心网关节点。VIP运行在主中心节点。

  iSCSI对接,AP需要关联两个中心网关节点。

  使用双活运维工具备份主k8s集群中的sc,pv,pvc,pod,configmaps,secret相关的配置信息到备K8s集群中

  1# kubectl get sc iscsi-sc -oyaml > sc.yaml2# kubectl get pv pvname -oyaml > pv.yaml3# kubectl get configmaps csi-iscsi-vid-pvname -oyaml > pv-configmaps.yaml4# kubectl get pvc pvcname -oyaml > pvc.yaml5# kubectl get pod podname -oyaml > pod.yaml6# kubectl get secret secretname -oyaml > secret.yaml #iscsi对接需要用到拷贝secret

  修改pv.yaml,注释掉uid与claimRef,persistentVolumeReclaimPolicy修改为Retain。

  1# vim nfs-pv.yaml2apiVersion: v13kind: PersistentVolume4 pv.kubernetes.io/provisioned-by: com.nfs.csi.xsky5 creationTimestamp: "2020-05-12T09:41:07Z"6 finalizers:7 - kubernetes.io/pv-protection8 - external-attacher/com-nfs-csi-xsky9 name: pvc-a5ff70ef-9434-11ea-a29c-fa8f374b550010 resourceVersion: "64802021"11 selfLink: /api/v1/persistentvolumes/pvc-a5ff70ef-9434-11ea-a29c-fa8f374b550012 #uid: b455608e-9434-11ea-a29c-fa8f374b550013spec:14 accessModes:15 - ReadWriteMany16 capacity:17 storage: 5Gi18 #claimRef:19 # apiVersion: v120 # kind: PersistentVolumeClaim21 # name: csi-nfs-pvc22 # namespace: default23 # resourceVersion: "64801647"24 # uid: a5ff70ef-9434-11ea-a29c-fa8f374b550025 csi:26 driver: com.nfs.csi.xsky27 fsType: ext428 volumeAttributes:29 password: admin30 shares: 192.168.120.250:/sdsfs/csi-fs-1/31 storage.kubernetes.io/csiProvisionerIdentity: 1589276173990-8081-com.nfs.csi.xsky32 user: admin33 volumeInfo: '{"id":0,"name":"pvc-a5ff70ef-9434-11ea-a29c-fa8f374b5500","sc":{"id":034,"name":"","xmsServers":"10.252.90.60,10.252.90.101","user":"admin","password":"admin","client_group_name":"","shares":["192.168.120.250:/sdsfs/csi-fs-1/"]},"size":5368709120,"shares":null,"folder_id":11,"quota_tree_id":6,"gateway_group_id":2,"full_share_path":"192.168.120.250:/sdsfs/csi-fs-1/pvc-a5ff70ef-9434-11ea-a29c-fa8f374b5500","share_id":0,"client_group_id":0}' xmsServers: 10.252.90.60,10.252.90.10135 volumeHandle: csi-nfs-vid-pvc-a5ff70ef-9434-11ea-a29c-fa8f374b550036 mountOptions:37 - vers=338 persistentVolumeReclaimPolicy: Retain39 storageClassName: csi-nfs-sc40 volumeMode: Filesystem41status:42 phase: Bound

  备k8s集群恢复sc,pv,pvc,pod。

  1# kubectl create -f sc.yaml2# kubectl create -f pv.yaml3# kubectl create -f configmaps.yaml4# kubectl create -f pvc.yaml5# kubectl create -f pod.yaml

  到此,pvc,pod恢复完成。

  5

  成功案例

  —— 马上消费金融

  

  解决方案:

  提供一套XSKY延展集群部署方案,共12节点,满足马上消费金融存储基础架构部署要求,同时可以配合上层容器、MySQL数据库实现业务平台层高可用建设。

  两中心使用两个延展池,每个k8s集群使用本地为主pg pool。

  使用csi iscsi driver动态对接k8s,提供块存储卷。

  访问路径关联两中心块网关,实现机房容灾。

  块网关配置VIP权重,优先机房内节点切换。

  优点:

  提供块存储卷,较好读写性能。

  动态供应块存储卷,提供卷扩容、快照、clone、raw高级功能。

  访问路径VIP切换约10秒。

  6

  写在后面

  XSKY星辰天合的容器双活解决方案,IO面通过独有的延展集群技术,保证两个数据中心的一致性,并且引入仲裁机制,保障故障的可靠切换。在管理面,星辰天合通过和Kubernetes开源社区和各个容器平台厂商合作,利用K8s的开放性,利用现成的开源组件,实现容器层面和管理面的双活。目前,星辰天合的同城容器双活数据中心方案已经在多个客户生产环境中部署,帮助企业全面向微服务化转型,提供系统的敏捷性,更好应对业务变化带来的挑战。

  END

  扫码联系

  售前专家

上一篇:感慨人生短暂的句子
下一篇:方言是致命伤

最近更新影视资讯