實作給你看:如何在Kubernetes內部署MongoDB

閱讀時間約 10 分鐘

本篇來說明如何在Kubernetes cluster內部署一個MongoDB,相信這種DB解決方案的部署應該都快變成管理員的日常工作之一了,今天透過這個操作演示,讓大家了解在實務上如何把MongoDB成功建立起來,並且還要可以進行基本操作。

raw-image

本篇將分成以下重點進行說明:

  1. 取得Manifests
  2. 建立volume
  3. 部署實務
  4. 基本操作
  5. 結論

1.取得Manifests

#-----------------------------------------------
# S1-1. 取得所有manifests
#-----------------------------------------------
[master]# git clone https://github.com/scriptcamp/kubernetes-mongodb.git
[master]# tree .
[master]# kubectl create ns mongodb
raw-image
#-----------------------------------------------
# S1-2. 建立Secrets
# 使用password來保護DB
#-----------------------------------------------
[master]# vim mongodb-secrets.yaml
apiVersion: v1
data:
password: cGFzc3dvcmQxMjM= #password123
username: YWRtaW51c2Vy #adminuser
kind: Secret
metadata:
creationTimestamp: null
name: mongo-creds

[master]# kubectl create -f mongodb-secrets.yaml
#-----------------------------------------------
# S1-3. 解開加密物件
# k8s會將所有的secret以base64進行加密,使用以下方式進行解密
#-----------------------------------------------
[master]# echo "cGFzc3dvcmQxMjM=" | base64 --decode
password123

2.建立Volume

建立PVC,從storageclass自動綁定PV

#-----------------------------------------------
# S2-1. 建立PVC
#-----------------------------------------------
[master]# vim mongodb-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
spec:
storageClassName: "managed-nfs-storage"
accessModes:
- ReadWriteOnce
volumeName: pv
resources:
requests:
storage: 1Gi

[master]# kubectl create -f mongodb-pvc.yaml
[master]# kubectl get pvc
raw-image

3. 部署實務

本LAB建立的MongoDB為Standalone類型,只有一個Pod。

#-----------------------------------------------
# S3-1. 建立Deployment
#-----------------------------------------------
[master]# vim mongodb-deployment.yaml
[master]# kubectl create -f mongodb-deployment.yaml
[master]# kubectl get pod -o wide
raw-image
#-----------------------------------------------
# S3-2. 建立svc (此處使用nodeport)
#-----------------------------------------------
[master]# vim mongodb-nodeport-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: mongo
name: mongo-nodeport-svc
spec:
ports:
- port: 27017
protocol: TCP
targetPort: 27017
nodePort: 32001
selector:
app: mongo
type: NodePort

[master]# kubectl create -f mongodb-nodeport-svc.yaml
[master]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mongo-nodeport-svc NodePort 10.103.143.51 <none> 27017:32001/TCP 100m
#-----------------------------------------------
# S3-3. 確認
#-----------------------------------------------
[master]# kubectl exec -it mongo-5d8b9d77f6-vd4tz /bin/bash
root@mongo-5d8b9d77f6-vd4tz:/# mongosh --host 10.107.88.15 --port 32001 -u adminuser -p password123
=> 出現以下畫面即完成連線
raw-image

4.基本操作

#---------------------------------------------
# S4-1. Create mongodb client pod
#---------------------------------------------
[master]# vim mongodb-new-client.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: mongo-client
name: mongo-client
spec:
replicas: 1
selector:
matchLabels:
app: mongo-client
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: mongo-client
spec:
containers:
- image: localhost/mongodb:latest
name: mongo-client
env:
- name: mongo-client_INITDB_ROOT_USERNAME
value: 'dummy'
- name: mongo-client_INITDB_ROOT_PASSWORD
value: 'dummy'

[master]# kubectl create -f mongodb-new-client.yaml
#---------------------------------------------
# S4-2. 進入client pod,執行基本操作
#---------------------------------------------
[master]# kubectl exec -it mongo-client-6cb867d578-8pdw6 /bin/bash
root@mongo-client-6cb867d578-8pdw6:/# mongosh --host 10.107.88.15 --port 32001 -u adminuser -p password123

(Display list of DBs)
# show dbs
(Get into DB)
# use db1
(Display a list of collections inside the ‘db1’ database)
# show collections
(Insert data into the db1 database)
# db.blogs.insert({name: "devopscube" })
(Display data from db1 database)
# db.blogs.find()
raw-image

5. 結論

本篇簡單說明如何部署MongoDB並且執行基本測試,要注意的是mongo這個指令已經被mongosh取代,執行時要注意不要用錯。

部署單一的MongoDB pod算是不會太困難,希望大家有空也可以自已部署來試試看。

本篇到此為止,下期再見~~


Reference:

15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
本文將介紹Gitlab與GitHub的差異,以及在本地環境部署Gitlab的流程與實作。文章內容包括版本管理系統的選擇,Gitlab的基本功能,以及使用Docker進行部署的詳細步驟。
本文介紹了在K8S Cluster出現問題時,透過ETCD的備份來還原Cluster的方法。包括ETCD的資料類型、備份、還原以及相關建議,並提出了自動進行ETCD備份作業和備份存放位置的重要性。
本文將探討Kubernetes內部DNS解析的相關流程,並介紹如何利用DNS來找到服務。透過瞭解DNS的工作原理,可以讓應用服務的問題處理更有效率,並提供基本測試與結論。
本篇將介紹Minio的功能和如何與Harbor進行整合,並說明這樣做的好處。包括Minio的優勢及Harbor x Minio的部署和測試。
本文闡述了Kubernetes內部網路通訊的基本概念,從容器到服務的溝通流程,並討論了Kubernetes使用的各種技術。重要的是,管理Kubernetes叢集時理解這些基本概念是極其重要的。
在Kubernetes cluster上建立Jenkins,並且使用動態方式建立Jenkins Agent。透過K8S解決傳統的Jenkins一對多架構的問題,最終建立基本Pipeline在Jenkins Web UI上,簡單驗證Jenkins engine正常運行。
本文將介紹Gitlab與GitHub的差異,以及在本地環境部署Gitlab的流程與實作。文章內容包括版本管理系統的選擇,Gitlab的基本功能,以及使用Docker進行部署的詳細步驟。
本文介紹了在K8S Cluster出現問題時,透過ETCD的備份來還原Cluster的方法。包括ETCD的資料類型、備份、還原以及相關建議,並提出了自動進行ETCD備份作業和備份存放位置的重要性。
本文將探討Kubernetes內部DNS解析的相關流程,並介紹如何利用DNS來找到服務。透過瞭解DNS的工作原理,可以讓應用服務的問題處理更有效率,並提供基本測試與結論。
本篇將介紹Minio的功能和如何與Harbor進行整合,並說明這樣做的好處。包括Minio的優勢及Harbor x Minio的部署和測試。
本文闡述了Kubernetes內部網路通訊的基本概念,從容器到服務的溝通流程,並討論了Kubernetes使用的各種技術。重要的是,管理Kubernetes叢集時理解這些基本概念是極其重要的。
在Kubernetes cluster上建立Jenkins,並且使用動態方式建立Jenkins Agent。透過K8S解決傳統的Jenkins一對多架構的問題,最終建立基本Pipeline在Jenkins Web UI上,簡單驗證Jenkins engine正常運行。
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
之前改過學生履歷,有發現大家好像很容易寫不出來,或是就算寫了也是描述有點模糊,看不出來具體細節或是實際工作成果 我自己偷觀察了在外商工作的員工寫的英文履歷,用以下的例子幫大家整理出幾個英文履歷寫作原則喔!
Thumbnail
以報酬率30%計算 交易12次變23.29倍 交易24次變542倍 交易36次變12646倍 交易48次變294632倍 以報酬率40%計算 交易12次變56.69倍 交易24次變3214倍 交易36次變182225倍 交易48次變10331079倍 以報酬率50%計算 交易12次變129倍 交易2
Thumbnail
昨晚我問了 ChatGPT:我該做什麼努力,寫作才不會輸給你。AI時代,作為醫療人員、講師與作家該如何活下去。
Thumbnail
談到城市裡適合約會的場所,就不能不提「階梯」。有階梯的地方,人們可以好好地累積情感和關係,沒有車輛會來打擾,可以自在隨心地漫步。有時候,階梯也會變成有點具備性意味的場所,例如電影《愛你九週半》的男女主角就有一場在後巷階梯上的著名愛情戲。階梯不僅可以是隱含權力意味的空間,也可以是促成微妙互動關係的空間
Thumbnail
你有沒有曾經在閱讀一本書的時候想起某個人,或是看見一個人的時候想起某本書呢? 每個人都有故事,都值得細細品味;每本書都有靈魂,都能和不同狀態下的自己來場深度交流。 如果每個人都有本和自己氣質相符的書,你的會是哪本呢?
Thumbnail
人要及時給自己做減法的這個道理,我相信大家都懂這個道理的,我呢,也是懂得,但是最近這段時間,因爲自己沒有及時給自己做減法,浪費了很多時間和精力。人啊,總是想要的更多,但也要衡量一下自己的精力,時間,能力是否足夠。 要及時給自己做減法 人的精力、時間、能力都是有限的,能夠同時做的事也是有限的,那些比
Thumbnail
「你還年輕,路很長,那個人看起來就不正常。未來遇到很誇張的病人,不要講話,等他離開了事情就也離開了,一切都會回到正常。你還年輕,你會懂得。」「你就當作今天的時光,沒有出現過這個人
Thumbnail
是的,人生很多時候是在瞎忙,發現努力不成正比是常有的事。 但,沒有時間的流逝,不會累積這樣的經驗。比起一帆風順,壞的經驗,能夠適時的帶給你更與現實相符的經驗,這一次失敗了,何嘗不是
Thumbnail
本文私心推薦筆者平常通勤時愛聽的Podcast節目和音樂類型,這是我一天的精神泉源!
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
之前改過學生履歷,有發現大家好像很容易寫不出來,或是就算寫了也是描述有點模糊,看不出來具體細節或是實際工作成果 我自己偷觀察了在外商工作的員工寫的英文履歷,用以下的例子幫大家整理出幾個英文履歷寫作原則喔!
Thumbnail
以報酬率30%計算 交易12次變23.29倍 交易24次變542倍 交易36次變12646倍 交易48次變294632倍 以報酬率40%計算 交易12次變56.69倍 交易24次變3214倍 交易36次變182225倍 交易48次變10331079倍 以報酬率50%計算 交易12次變129倍 交易2
Thumbnail
昨晚我問了 ChatGPT:我該做什麼努力,寫作才不會輸給你。AI時代,作為醫療人員、講師與作家該如何活下去。
Thumbnail
談到城市裡適合約會的場所,就不能不提「階梯」。有階梯的地方,人們可以好好地累積情感和關係,沒有車輛會來打擾,可以自在隨心地漫步。有時候,階梯也會變成有點具備性意味的場所,例如電影《愛你九週半》的男女主角就有一場在後巷階梯上的著名愛情戲。階梯不僅可以是隱含權力意味的空間,也可以是促成微妙互動關係的空間
Thumbnail
你有沒有曾經在閱讀一本書的時候想起某個人,或是看見一個人的時候想起某本書呢? 每個人都有故事,都值得細細品味;每本書都有靈魂,都能和不同狀態下的自己來場深度交流。 如果每個人都有本和自己氣質相符的書,你的會是哪本呢?
Thumbnail
人要及時給自己做減法的這個道理,我相信大家都懂這個道理的,我呢,也是懂得,但是最近這段時間,因爲自己沒有及時給自己做減法,浪費了很多時間和精力。人啊,總是想要的更多,但也要衡量一下自己的精力,時間,能力是否足夠。 要及時給自己做減法 人的精力、時間、能力都是有限的,能夠同時做的事也是有限的,那些比
Thumbnail
「你還年輕,路很長,那個人看起來就不正常。未來遇到很誇張的病人,不要講話,等他離開了事情就也離開了,一切都會回到正常。你還年輕,你會懂得。」「你就當作今天的時光,沒有出現過這個人
Thumbnail
是的,人生很多時候是在瞎忙,發現努力不成正比是常有的事。 但,沒有時間的流逝,不會累積這樣的經驗。比起一帆風順,壞的經驗,能夠適時的帶給你更與現實相符的經驗,這一次失敗了,何嘗不是
Thumbnail
本文私心推薦筆者平常通勤時愛聽的Podcast節目和音樂類型,這是我一天的精神泉源!