自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在Kubernetes中運(yùn)行數(shù)據(jù)庫(kù)?

譯文
云計(jì)算
許多人在Kubernetes中成功地運(yùn)行數(shù)據(jù)庫(kù),這類部署的數(shù)量在與日俱增。

譯者 | 布加迪

審校 | 重樓

關(guān)于Kubernetes中數(shù)據(jù)庫(kù)應(yīng)該在哪里運(yùn)行的爭(zhēng)論一直是技術(shù)界的熱門話題。流行的觀點(diǎn)是構(gòu)建無(wú)狀態(tài)應(yīng)用程序,這表明數(shù)據(jù)庫(kù)最適合使用云提供商的托管服務(wù)。然而,在Kubernetes成功地運(yùn)行數(shù)據(jù)庫(kù)有一些實(shí)用的設(shè)計(jì)模式。

在大多數(shù)云提供商,卷被限制在單個(gè)可用區(qū),這意味著數(shù)據(jù)庫(kù)在設(shè)計(jì)上也被限制在這個(gè)可用區(qū)。大多數(shù)生產(chǎn)集群可能是區(qū)域性或多可用區(qū),對(duì)于無(wú)狀態(tài)應(yīng)用程序而言更是如此。使用節(jié)點(diǎn)選擇器確保數(shù)據(jù)庫(kù)pod位于可用區(qū)(它們的卷可以掛載很重要。

子:

nodeSelector:
 topology.kubernetes.io/zone: europe-west6-b

該配置指定數(shù)據(jù)庫(kù)pod應(yīng)該在' europe-west6-b ' 可用區(qū)中運(yùn)行。

規(guī)劃資源使用情況

由于我們的數(shù)據(jù)庫(kù)被限制在一個(gè)可用區(qū)中,我們必須仔細(xì)規(guī)劃節(jié)點(diǎn)到可用區(qū)的設(shè)計(jì),以避免調(diào)度錯(cuò)誤和不可用問(wèn)題。一種有效的策略是針對(duì)數(shù)據(jù)庫(kù)工作負(fù)載運(yùn)行單獨(dú)的節(jié)點(diǎn)組或節(jié)點(diǎn)池。這可以確保所需的可用區(qū)始終有足夠的資源可用。

例子

  • 為數(shù)據(jù)庫(kù)工作負(fù)載創(chuàng)建專用節(jié)點(diǎn)池。
  • 使用污點(diǎn)和容差來(lái)確保在這些節(jié)點(diǎn)上只調(diào)度數(shù)據(jù)庫(kù)pod。
# Taint nodes to be dedicated to databases

spec:
 taints:
 - key: "dedicated"
 value: "database"
 effect: "NoSchedule"

# Toleration in the DB pod spec
spec:
 tolerations:
 - key: "dedicated"
 operator: "Equal"
 value: "database"
effect: "NoSchedule"

高可用性

托管數(shù)據(jù)庫(kù)服務(wù)通常提供內(nèi)置的高可用性和故障切換功能。為了在Kubernetes中實(shí)現(xiàn)類似的彈性,對(duì)恢復(fù)和可用性策略進(jìn)行細(xì)致的規(guī)劃必不可少。這里有兩種方法

1.使用Kubernetes操作符

Zalando Postgres Operator這樣的Kubernetes操作符提供了高級(jí)功能,比如讀取副本和自動(dòng)故障切換,類似托管數(shù)據(jù)庫(kù)服務(wù)。這些操作符可以顯著簡(jiǎn)化數(shù)據(jù)庫(kù)高可用性的設(shè)置和管理。

Zalando Postgres Operator允許你指定讀副本的數(shù)量,并自動(dòng)管理故障切換。該操作符提供了一個(gè)UI,你可以在其中配置這些設(shè)置,使其成為Kubernetes中管理數(shù)據(jù)庫(kù)高可用性的一種直觀而強(qiáng)大的工具。下面列出了其他一些操作符,其中一些由各自的社區(qū)管理https://operatorhub.io/?category=Database。

2.自助服務(wù)方法

對(duì)于那些喜歡動(dòng)手操作的人而言,特別是針對(duì)NoSQL數(shù)據(jù)庫(kù),這里有一個(gè)循序漸進(jìn)的方法

  • 兩個(gè)pod上掛載數(shù)據(jù)卷確保數(shù)據(jù)卷被主pod和pod都可以訪問(wèn)。
  • pod親緣性使用pod親緣性規(guī)則來(lái)確保主podpod放在一起,同時(shí)尊重約束。
  • Init容器:在啟動(dòng)時(shí),使用從pod中的Init容器從主pod拷貝所有數(shù)據(jù)。
  • 卷掛載約束將從pod上的卷掛載設(shè)置為只讀,以防止數(shù)據(jù)損壞。
  • 使用計(jì)劃任務(wù)(cronjob進(jìn)行重啟創(chuàng)建一個(gè)簡(jiǎn)單的計(jì)劃任務(wù),每六個(gè)小時(shí)刪除舊的pod,允許init容器運(yùn)行并拷貝新數(shù)據(jù)。

示例配置

下面的例展示了如何使用pod親緣性關(guān)聯(lián)設(shè)置Neo4j讀副本、用于數(shù)據(jù)拷貝的init容器以及掛載存在只讀約束卷以確保數(shù)據(jù)完整性。

affinity:
 podAffinity:
 requiredDuringSchedulingIgnoredDuringExecution:
 - labelSelector:
 matchExpressions:
 - key: app
 operator: In
 values:
 - primary-db
 topologyKey: "kubernetes.io/hostname"

initContainers:
 - name: copy-data
 image: busybox
 command: ["sh", "-c", "cp -r /data/* /backup/"]
 volumeMounts:
 - name: data-volume
 mountPath: /data
 - name: backup-volume
 mountPath: /backup

volumes:
 - name: data-volume
 persistentVolumeClaim:
 claimName: primary-db-pvc
 - name: backup-volume
 persistentVolumeClaim:
 claimName: secondary-db-pvc

containers:
 - name: secondary-db
 image: neo4j:latest
 volumeMounts:
 - name: backup-volume
 mountPath: /data
 readOnly: true

備份和恢復(fù)

許多服務(wù)提供商提供了在基于磁盤的卷上調(diào)度重復(fù)快照的方法。這通常是首選的方法,因?yàn)樗菀自O(shè)置,并且恢復(fù)過(guò)程更快。在這種情況下,我們可以定期備份托管數(shù)據(jù)庫(kù)數(shù)據(jù)的卷。

另一種方法是結(jié)合數(shù)據(jù)庫(kù)的專有工具,比如PostgreSQL的pg_dump。

下面是一個(gè)使用Kubernetes計(jì)劃任務(wù)將PostgreSQL配置備份到s3的示例

apiVersion: batch/v1beta1
kind: CronJob
metadata:
 name: postgres-backup
spec:
 schedule: "0 0 * * *"
 jobTemplate:
 spec:
 template:
 spec:
 containers:
 - name: backup
 image: postgres
 command: ["sh", "-c", "pg_dumpall -c -U $PGUSER | gzip > /backup/db_backup.gz && aws s3 cp /backup/db_backup.gz s3://your-bucket/db-backup-$(date +\%F).gz"]
 volumeMounts:
 - name: backup-volume
 mountPath: /backup
 restartPolicy: OnFailure
 volumes:
 - name: backup-volume
 emptyDir: {}

結(jié)語(yǔ)

盡管初始設(shè)置或?qū)W習(xí)曲線可能很陡峭,但在Kubernetes中運(yùn)行數(shù)據(jù)庫(kù)具有很多優(yōu)勢(shì)。一個(gè)不太被提及的好處是成本。在RDS中運(yùn)行db.m4.2xlarge4vCPU和32GB內(nèi)存)實(shí)例的成本大約是1200美元/月,而運(yùn)行一個(gè)類似大小的EC2實(shí)例的成本大約是150美元/月。Kubernetes中的節(jié)點(diǎn)可能運(yùn)行多個(gè)pod,從而進(jìn)一步優(yōu)化資源使用。

廠商無(wú)關(guān)促使許多人在Kubernetes中運(yùn)行數(shù)據(jù)庫(kù)的另一個(gè)主要動(dòng)機(jī)。以最小的調(diào)整在任何平臺(tái)上移動(dòng)工作負(fù)載極具吸引力。

總之,在決定在何處運(yùn)行生產(chǎn)數(shù)據(jù)庫(kù)之前,請(qǐng)考慮利弊。許多人成功地在Kubernetes中運(yùn)行數(shù)據(jù)庫(kù),這部署的數(shù)量在與日俱增。

原文標(biāo)題:How To Run Databases in Kubernetes,作者:Kolawole Olowoporoku

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2019-12-11 14:27:39

數(shù)據(jù)庫(kù)集群Kubernetes

2022-06-29 11:01:17

K8s數(shù)據(jù)庫(kù)Cassandra

2021-12-03 23:21:45

數(shù)據(jù)庫(kù)MySQLKubernetes

2011-03-17 17:27:48

Sybase數(shù)據(jù)庫(kù)引擎

2022-06-27 05:48:24

Kubernetes容器

2011-03-03 10:00:14

ProFTPD建立MySQL

2009-06-01 09:57:43

netbeans連接數(shù)netbeans數(shù)據(jù)庫(kù)netbeans連接m

2021-08-09 09:00:00

Kubernetes云計(jì)算架構(gòu)

2011-03-11 13:26:23

SQL Server數(shù)導(dǎo)入數(shù)據(jù)

2020-11-16 08:56:02

Python

2023-09-05 08:40:57

刪除數(shù)據(jù)庫(kù)Oracle

2011-05-25 00:00:00

數(shù)據(jù)庫(kù)設(shè)計(jì)

2011-04-11 15:19:53

Access 2007數(shù)據(jù)庫(kù)附件

2022-04-22 09:20:06

FreeBSD 13MySQL數(shù)據(jù)庫(kù)

2011-07-25 09:45:51

樹狀結(jié)構(gòu)數(shù)據(jù)庫(kù)存儲(chǔ)

2018-01-26 13:28:48

數(shù)據(jù)庫(kù)數(shù)據(jù)重復(fù)數(shù)據(jù)庫(kù)清理

2024-04-30 14:49:02

云平臺(tái)云數(shù)據(jù)庫(kù)

2009-06-15 13:46:00

netbeans設(shè)置數(shù)據(jù)庫(kù)連接池

2018-03-06 09:30:58

2023-09-05 00:06:45

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)