Kubernetes安装数据库

Kubernetes安装数据库

在Kubernetes中安装数据库,主要的问题在于如何处理数据存储方式,通常,当我们部署Pod时,它们具有自己的存储空间,但是该存储空间是短暂的-如果容器被杀死了,则其存储空间将随之消失。

StatefulSet

StatefulSet是用于管理有状态应用程序的工作负载。它管理一组Pod的实现和扩展,并保证这些Pod的顺序和唯一性。

像Deployment一样,StatefulSet也管理具有相同容器规范的一组Pod。由StatefulSets维护的Pod具有唯一的,持久的身份和稳定的主机名,而不用管它们位于哪个节点上。如果我们想要一个跨存储的持久性,我们可以创建一个持久性卷并将StatefulSet用作解决方案的一部分。即使StatefulSet中的Pod容易发生故障,存储卷与新Pod进行匹配也很容易。

StatefulSet对于需要以下一项或多项功能的应用程序很有价值:

  • 稳定的唯一网络标识符。
  • 稳定,持久的存储。
  • 有序,顺畅的部署和扩展。
  • 有序的自动滚动更新。

在Kubernetes上部署数据库时,我们需要使用StatefulSet,但是使用StatefulSet有一些局限性:

  • 需要使用持久性存储卷为Pod提供存储。
  • 删除副本或按比例缩小副本将不会删除附加到StatefulSet的存储卷。存储卷确保数据的安全性。
  • StatefulSet当前需要Headless Service 来负责Pod的网络标识。
  • 与Deployment不同,StatefulSet不保证删除StatefulSet资源时删除所有Pod,而Deployment在被删除时会删除与Deployment关联的所有Pod。在删除StatefulSet之前,你必须将pod副本数量缩小到0。

如果需要解决存储的问题,那么我们就必须要将数据持久化,将持久化的数据存储卷和数据库Pod进行关联,即便容器被杀死,那么数据仍然存储在集群中,并且新建的Pod也可以进行相应的数据访问,Kubernetes提供了吃计划存储的资源

  • PV
  • PVC

举个例子创建一个postgres的数据库的Pod
postgres-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  namespace: postgres
  labels:
    app: postgres
data:
  POSTGRES_DB: master		# 关系到用户密码建议使用secret
  POSTGRES_USER: dba
  POSTGRES_PASSWORD: pg_pass

postgres-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres
  namespace: postgres
spec:
  serviceName: "postgres"
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:9.5
          envFrom:
            - configMapRef:
                name: postgres-config
          ports:
            - containerPort: 5432
              name: postgredb
          volumeMounts:			# 将持久化的存储卷挂载到pod中
            - name: postgres-data
              mountPath: /var/lib/postgresql/data
              subPath: postgres
  volumeClaimTemplates:
    - metadata:
        name: postgres-data 
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: nfs-client				# 在storageClass中申请50M的空间做成一块独立的持久化存储卷
        resources:
          requests:
            storage: 50M

nfs-client是一个storageClass,代替了常用的PV和PVC,这里就不做解释了,详细的可以查看storageClass和PV的关系,同样是一个持久化存储的方式。

这样Postgres存储的数据本来默认存储在/var/lib/postgresql/data上,但是我们将其外挂在持久化存储中,那么当这个pod出现故障或者被销毁的时候,创建一个相同的Pod并且将其同样外挂这个持久化存储卷,那么数据便能够展现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值