Rainbond自動部署初始化Schema的數(shù)據(jù)庫步驟教程
為什么使用Rainbond?
我們使用容器的方式部署數(shù)據(jù)庫組件,特別是企業(yè)有大量的項目開發(fā)業(yè)務的,部署的開發(fā)、測試數(shù)據(jù)庫組件較多時。經(jīng)常會遇到以下問題:
- 業(yè)務需要使用數(shù)據(jù)庫,但部署完數(shù)據(jù)庫后,需要在數(shù)據(jù)庫中執(zhí)行創(chuàng)建schema的操作或者一些初始化數(shù)據(jù)的創(chuàng)建。
- 開發(fā)測試多套部署環(huán)境,需要多次重復1的步驟。
- 項目比較多,時間久了項目需要的數(shù)據(jù)庫Schema不清楚。
- 項目交付時數(shù)據(jù)庫Schema管理混亂。
現(xiàn)在如果是使用Go等語言研發(fā)的業(yè)務系統(tǒng),都具備了ORM層自動初始化和更新Schema的能力,如果是這樣本文對你無用。但目前大多數(shù)其他開發(fā)語言的業(yè)務都不具備這種能力。
如果我們把數(shù)據(jù)庫也作為一個業(yè)務中的一個服務模塊來管理的話,我們希望服務啟動后即可直接完成Schema的初始化,直接提供數(shù)據(jù)服務能力。
那么在Rainbond中如何達成這樣的效果呢?
Schema初始化在傳統(tǒng)模式中一般有兩種方案:
在數(shù)據(jù)庫啟動后手動導入;人工通過客戶端操作,沒有自動化程度可言;在業(yè)務服務啟動時連接數(shù)據(jù)庫進行初始化,依賴業(yè)務服務端的能力。
可以看出,這兩種方式都存在各自的弊端,那么有沒有方式能夠讓數(shù)據(jù)庫啟動時自動初始化指定的數(shù)據(jù)呢?答案是 有!
我們以MySQL為例, 官方對于 Docker 有著良好的支持,首先來看 Dockerhub上 Mysql官方鏡像 的一段描述:
在數(shù)據(jù)庫容器首次啟動時,將創(chuàng)建一個指定名稱的新數(shù)據(jù)庫,并使用提供的環(huán)境變量對其進行初始化。 此外,它將執(zhí)行在 /docker-entrypoint-initdb.d 中找到的擴展名為 .sh,.sql 和 .sql.gz 的文件。 文件將按字母順序執(zhí)行。 默認情況下,SQL文件將導入到MYSQL_DATABASE 變量指定的數(shù)據(jù)庫中。因此我們只需要在Mysql鏡像工作機制的基礎上維護好數(shù)據(jù)庫初始化所需要的SQL即可。上文我們說到把數(shù)據(jù)庫也作為一個獨立的服務模塊,我們也可以通過代碼把Sql等腳步管理起來,劃分版本分支。
Rainbond 支持多種組件創(chuàng)建方式,在這里我們采用 從源碼創(chuàng)建組件 的方式,編寫 Dockerfile 并上傳至支持 Git/Svn 協(xié)議的客戶端,即可在平臺直接進行構(gòu)建;這種方式 透明、可復用、并且能夠進行自動化構(gòu)建。
目錄結(jié)構(gòu)
./ └── Dockerfile └── config ├── my.cnf ├── conf.d ├── docker.cnf └── sql ├── init_database └── README.md
Dockerfile文件
#基礎鏡像 FROM mysql:latest MAINTAINER Aaron <Aaron_ops@163.com> #把sql文件拷貝到/docker-entrypoint-initdb.d/目錄下,以便啟動時自動執(zhí)行這個sql COPY ./sql/*.sql /docker-entrypoint-initdb.d #拷貝mysql配置文件 COPY ./config/ /etc/mysql/ #Mysql密碼 ENV MYSQL_ROOT_PASSWORD rainbond #數(shù)據(jù)持久化目錄 VOLUME [ "/var/lib/mysql" ] #端口 EXPOSE 3306
項目地址:https://github.com/Aaron-23/Initialize-db
使用該項目在平臺進行構(gòu)建,Rainbond 將會自動檢測 Dockerfile 中定義的環(huán)境變量,存儲,端口等信息,對這些配置項進行自動化配置,在 Dockerfile 構(gòu)建完畢后自動啟動數(shù)據(jù)庫。
需要注意的是 MySQL 屬于有狀態(tài)服務,所以在構(gòu)建前需將組件類型修改為有狀態(tài)單實例,關(guān)于組件狀態(tài)請參考 組件部署類型。
啟動完成,進入運行中狀態(tài)
通過 Web終端 進入數(shù)據(jù)庫查看相關(guān)數(shù)據(jù)已經(jīng)完成初始化
通過這種方式進行數(shù)據(jù)庫初始化,不需要修改程序代碼,無需借助外部工具,通過平臺的能力快速部署數(shù)據(jù)庫并完成初始化,在后續(xù)使用過程中可以通過性能分析,資源監(jiān)控,實例伸縮等功能完成服務運行時的全生命周期管理,提升開發(fā)效率,增強業(yè)務穩(wěn)定性。
另外我們還可以將此組件發(fā)布到 Rainbond 內(nèi)部組件庫中,后續(xù)開發(fā)、測試和交付過程可以直接一鍵安裝此組件即可獲得數(shù)據(jù)初始完成的數(shù)據(jù)庫服務。
以上 MySQL數(shù)據(jù)庫 僅為參考示例,MongoDB,PostgreSQL等數(shù)據(jù)庫均支持同類型數(shù)據(jù)初始化方式。
Rainbond 云原生應用管理平臺,實現(xiàn)微服務架構(gòu)不用改代碼,管理 Kubernetes 不用學容器,幫企業(yè)實現(xiàn)應用上云,一站式將任何企業(yè)應用持續(xù)交付到 Kubernetes 集群、混合云、多云等基礎設施。是 Rainstore 云原生應用商店的支撐平臺。
以上就是Rainbond自動部署初始化Schema的數(shù)據(jù)庫步驟教程的詳細內(nèi)容,更多關(guān)于Rainbond自動部署初始化Schema數(shù)據(jù)庫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解k8s ConfigMap 中 subPath 字段和 items
volumeMounts.subPath 屬性可用于指定所引用的卷內(nèi)的子路徑,而不是其根路徑,這篇文章主要介紹了詳解k8s ConfigMap 中 subPath 字段和 items 字段,需要的朋友可以參考下2023-03-03Kubernetes控制器中DaemonSet與Job的使用教程
這篇文章主要介紹了Kubernetes控制器中DaemonSet與Job的使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08關(guān)于CentOS7日志文件及journalctl日志查看方法
這篇文章主要介紹了關(guān)于CentOS7日志文件及journalctl日志查看方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03淺析k8s中各組件和kube?apiserver通信時的認證和鑒權(quán)問題
這篇文章主要介紹了k8s中各組件和kube?apiserver通信時的認證和鑒權(quán),本文使用的k8s集群是用kubekey搭建,命令是./kk create cluster --with-kubernetes v1.21.5 --with-kubesphere v3.2.1,需要的朋友可以參考下2022-06-06