随着云原生技术的逐渐普及,各种应用及基础服务平台都适时推出针对容器化环境的部署及运维解决方案。作为国产数据库的翘楚,达梦数据库也应运而生推出了自己的数据库云服务平台,但是,这只是一个商业化的解决方案,作为容器编排领域的首选解决方案,Kubernetes容器管理平台也迅速进入了传统运维人员的视线。因此,如何在一个更为基础的平台提供一种更为通用的容器部署解决方案,相信是大多数人较为关切的。本篇文章将为读者带来达梦数据库DM8在Kubernetes下的部署解决方案,并且针对容器环境常见的运维问题进行整理,意图减轻大家对云原生技术因为陌生而产生的抵触感,同时也在剖析部署细节的过程中,让读者能够快速入门部署达梦数据库应用到的Kubernetes相关基础知识。
deployment适用于部署无状态的应用的场景,该种部署方式具备以下特性:
statefulset适用于部署有状态的应用的场景。该种部署方式具备以下特点:
podname-xxx-0
的有序命名方式;podname.headless server name.namespace.svc.cluster.local
。首先厘清pod和container的层级关系:pod是K8S中的最小控制单元,但实际上我们打交道的比较多的是container容器,也就是一个pod里可能不止一个container容器,如果要对应到应用上,应该是一个container对应一个应用。
在创建pod的时候,我们可以为该pod里面的container设置一个或多个环境变量。具体是通过资源对象yaml中的spec.containers[i].env
字段来指定。
例如本篇文章中要用到的yaml中就配置了环境变量,示例如下:
K8S能够支持的后端存储卷类型还是挺丰富的,但是这些存储卷类型之间的区别要理解起来对于刚接触的新手而言还是有一定难度的,因而接下来的一小节将为读者浅析一下这几种存储卷之间的差别,需要说明一下的是,为了降低初次接触K8S读者的上手难度,本篇示例中使用的是较为容易理解的hostPath存储卷。接下来将主要介绍它们之间的区别:
K8S中的service服务的概念有点类似于NGINX的负载均衡的概念,通过定义了pod的访问协议,实现对pod实例的负载均衡访问功能。在K8S中,有如下三种service类型,分别如下:
通过上述篇幅对K8S基础概念的阐述,相信读者朋友们已经对K8S有了一定理解。接下来我们将通过yaml资源清单的方式部署一个DM8数据库实例,从而实现DM8的简单云化。
mkdir /opt/DM8/
cd /opt/DM8
touch dm8-k8s.yaml
vim /opt/DM8/dm8-k8s.yaml
内容如下:
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dm8
namespace: default
spec:
replicas: 1
selector:
matchLabels:
operator.dameng.com/id: ec74204f-f9ab-4c26-beba-1bea6cf70338
serviceName: mostly-equipped-bunny-hl
template:
metadata:
labels:
operator.dameng.com/id: ec74204f-f9ab-4c26-beba-1bea6cf70338
spec:
containers:
- env:
- name: TEMPLATES_PATH
value: /opt/dmdbms/script.d/
- name: BOOTSTRAP_MODEL
value: single
- name: PERSISTENCE_LOGS
value: 'false'
- name: REPLICAS
value: '1'
- name: OBJECT_NAME
value: mostly-equipped-bunny
- name: DM_INI_BAK_PATH
value: /opt/dmdbms/backup
- name: DM_INI_MAX_SESSIONS
value: '100'
- name: DM_INIT_SYSDBA_PWD
value: SYSDBA
- name: DM_INIT_PATH
value: /opt/dmdbms/data
- name: DM_INIT_PAGE_SIZE
value: '8'
- name: DM_INIT_EXTENT_SIZE
value: '16'
- name: DM_INIT_CHARSET
value: '0'
- name: DM_INIT_CASE_SENSITIVE
value: '1'
- name: DM_INI_BAK_USE_AP
value: '2'
image: 'harbor.dameng.com/library/dm8:8.1.1.190-ent-1'
imagePullPolicy: IfNotPresent
name: dm8
ports:
- containerPort: 80
name: dmctl
protocol: TCP
- containerPort: 5236
name: dceadbbj
protocol: TCP
resources:
limits:
cpu: '2'
memory: 4Gi
requests:
cpu: '2'
memory: 4Gi
volumeMounts:
- mountPath: /opt/dmdbms/data
name: dm8-data
volumes:
- hostPath:
path: /opt/dmdbms/data
type: Directory
name: dm8-data
---
apiVersion: v1
kind: Service
metadata:
labels:
operator.dameng.com/id: ec74204f-f9ab-4c26-beba-1bea6cf70338
name: dm8
namespace: default
spec:
ports:
- name: 2k475a
nodePort: 5236
port: 5236
protocol: TCP
targetPort: 5236
selector:
operator.dameng.com/id: ec74204f-f9ab-4c26-beba-1bea6cf70338
type: NodePort
注意:
yaml文件中使用到的镜像harbor.dameng.com/library/dm8:8.1.1.190-ent-1
,具体镜像文件请移步至www.dameng.com
获取,具体操作步骤请参考我的另外一篇博文。
kubectl apply -f /opt/DM8/dm8-k8s.yaml
$ kubectl get sts -A NAMESPACE NAME READY AGE default dm8-0 1/1 23s
$ kubectl get svc|grep -i nodeport default dm8 NodePort 10.105.34.253 <none> 5236:5236/TCP
至此,K8S部署DM8数据库实例就已经完成了。
使用DM数据库管理工具连接:
能正常连接
以上就是本篇文章的全部内容。期待大家的交流、分享。
文章
阅读量
获赞