MongoDB là một chương trình cơ sở dữ liệu NoSQL dựa trên tài liệu, có mục đích chung. Cũng như các hệ quản trị cơ sở dữ liệu phi quan hệ khác, MongoDB tập trung vào khả năng mở rộng và tốc độ truy vấn
Kubernetes phối hợp với MongoDB để tạo ra các triển khai cơ sở dữ liệu di động và có khả năng mở rộng cao. Những triển khai này rất hữu ích để làm việc với một lượng lớn dữ liệu và tải cao
Hướng dẫn này sẽ dạy bạn cách triển khai MongoDB trên Kubernetes. Hướng dẫn bao gồm các bước để chạy phiên bản MongoDB độc lập và bộ bản sao
Yêu cầu
- Một cụm Kubernetes với kubectl
- Quyền truy cập quản trị vào hệ thống của bạn
Ghi chú. MongoDB là một phần của MEAN stack, một ngăn xếp phần mềm nguồn mở phổ biến để phát triển ứng dụng web. Đọc về sự khác biệt giữa ngăn xếp MEAN và LAMP
Triển khai một phiên bản MongoDB độc lập
MongoDB có thể được triển khai trên Kubernetes như một phiên bản độc lập. Việc triển khai này không phù hợp để sử dụng trong sản xuất, nhưng nó phù hợp để thử nghiệm và một số khía cạnh của quá trình phát triển
Thực hiện theo các bước bên dưới để triển khai phiên bản MongoDB độc lập
Bước 1. Dán nhãn nút
Gắn nhãn nút sẽ được sử dụng để triển khai MongoDB. Nhãn được sử dụng sau này để gán nhóm cho một nút cụ thể
Làm như vậy
1. Liệt kê các nút trên cụm của bạn
kubectl get nodes
2. Chọn nút triển khai từ danh sách trong đầu ra lệnh
3. Sử dụng kubectl để gắn nhãn nút bằng cặp khóa-giá trị
kubectl label nodes =
Đầu ra xác nhận rằng nhãn đã được thêm thành công
Bước 2. Tạo một lớp lưu trữ
StorageClass giúp nhóm cung cấp yêu cầu khối lượng liên tục trên nút. Để tạo một StorageClass
1. Sử dụng trình soạn thảo văn bản để tạo tệp YAML để lưu trữ cấu hình lớp lưu trữ
nano StorageClass.yaml
2. Chỉ định cấu hình lớp lưu trữ của bạn trong tệp. Ví dụ dưới đây định nghĩa
nano PersistentVolume.yaml
0kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mongodb-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
3. Lưu các thay đổi và thoát khỏi trình chỉnh sửa
Ghi chú. Để làm cho quá trình dễ dàng hơn, hãy lưu trữ tất cả các tệp trong hướng dẫn này trong một thư mục
Bước 3. Tạo lưu trữ liên tục
Cung cấp dung lượng lưu trữ cho việc triển khai MongoDB bằng cách tạo ổ đĩa liên tục và xác nhận quyền sở hữu ổ đĩa liên tục
1. Tạo tệp YAML để cấu hình âm lượng liên tục
nano PersistentVolume.yaml
2. Trong tệp, phân bổ bộ nhớ thuộc về lớp bộ nhớ được xác định ở bước trước. Chỉ định nút sẽ được sử dụng trong triển khai nhóm trong phần
nano PersistentVolume.yaml
1 . Nút được xác định bằng cách sử dụng nhãn đã tạo ở Bước 1apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mongodb-storageclass
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
3. Tạo một YAML khác cho cấu hình xác nhận quyền sở hữu khối lượng liên tục
________số 84. Xác định yêu cầu có tên
nano PersistentVolume.yaml
2 và hướng dẫn Kubernetes yêu cầu khối lượng thuộc về nano PersistentVolume.yaml
0kubectl label nodes =
1Bước 4. Tạo một Bản đồ cấu hình
Tệp ConfigMap lưu trữ thông tin cấu hình không được mã hóa được sử dụng bởi các nhóm
1. Tạo tệp YAML để lưu trữ cấu hình triển khai
kubectl label nodes =
22. Sử dụng tệp để lưu trữ thông tin về đường dẫn hệ thống, người dùng và vai trò. Sau đây là một ví dụ về tệp ConfigMap
kubectl label nodes =
3Bước 5. Tạo một StatefulSet
StatefulSet là bộ điều khiển Kubernetes được sử dụng để triển khai các ứng dụng có trạng thái. Các nhóm ứng dụng có trạng thái yêu cầu các danh tính duy nhất vì chúng giao tiếp với các nhóm khác
Để tạo một StatefulSet
1. Sử dụng trình soạn thảo văn bản để tạo tệp YAML
kubectl label nodes =
02. Chèn thông tin triển khai vào tệp, bao gồm hình ảnh Docker MongoDB sẽ được sử dụng. Tệp này cũng tham chiếu đến
nano PersistentVolume.yaml
4 và nano PersistentVolume.yaml
5 đã tạo trước đókubectl label nodes =
1Bước 6. Tạo bí mật
Đối tượng Bí mật được sử dụng để lưu trữ thông tin nhạy cảm về việc triển khai
1. Tạo một YAML bí mật bằng trình soạn thảo văn bản của bạn
kubectl label nodes =
22. Cung cấp thông tin để truy cập cơ sở dữ liệu MongoDB
kubectl label nodes =
33. Lưu các thay đổi và thoát
Bước 7. Tạo một dịch vụ MongoDB
Để tạo một Dịch vụ MongoDB
1. Tạo một đối tượng dịch vụ không đầu
kubectl label nodes =
4Dịch vụ không đầu cho phép người dùng kết nối trực tiếp với nhóm
2. Thêm tên dịch vụ và định nghĩa trong tệp YAML
kubectl label nodes =
53. Lưu các thay đổi và thoát khỏi tệp
Bước 8. Áp dụng Cấu hình MongoDB với Kustomize
Sử dụng Kustomize để dễ dàng áp dụng các tệp cấu hình MongoDB
1. Tạo tệp
nano PersistentVolume.yaml
6kubectl label nodes =
62. Trong phần
nano PersistentVolume.yaml
7, liệt kê tất cả các tệp YAML đã tạo ở các bước trướckubectl label nodes =
7Lưu tệp trong cùng thư mục với các tệp khác
3. Triển khai MongoDB bằng lệnh sau
kubectl label nodes =
84. Sử dụng kubectl để kiểm tra xem nhóm đã sẵn sàng chưa
kubectl label nodes =
9Khi nhóm hiển thị
nano PersistentVolume.yaml
8 trong cột nano PersistentVolume.yaml
9, hãy chuyển sang bước tiếp theoBước 9. Kết nối với Phiên bản độc lập MongoDB
1. Kết nối với nhóm MongoDB bằng cách sử dụng lệnh kubectl sau
nano StorageClass.yaml
02. Khi dấu nhắc
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mongodb-storageclass
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
0 xuất hiện, hãy nhậpnano StorageClass.yaml
1Tải trình bao MongoDB
3. Chuyển sang cơ sở dữ liệu thử nghiệm
nano StorageClass.yaml
24. Xác thực bằng lệnh sau
nano StorageClass.yaml
3Số
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mongodb-storageclass
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
1 trong đầu ra xác nhận xác thực thành côngTriển khai một bộ bản sao
Triển khai MongoDB dưới dạng Bản sao đảm bảo rằng số lượng nhóm được chỉ định đang chạy tại bất kỳ thời điểm nào. Triển khai ReplicaSet được khuyến nghị cho môi trường sản xuất
Bước 1. Thiết lập Kiểm soát truy cập dựa trên vai trò [RBAC]
Kích hoạt kiểm soát truy cập dựa trên vai trò là một trong những phương pháp hay nhất về bảo mật Kubernetes. RBAC đảm bảo rằng không có người dùng nào có nhiều quyền hơn mức cần thiết
Để thiết lập RBAC
1. Tạo tệp YAML bằng trình soạn thảo văn bản
nano StorageClass.yaml
42. Cung cấp các quy tắc truy cập để triển khai MongoDB của bạn. Ví dụ bên dưới hiển thị tệp RBAC YAML
nano StorageClass.yaml
53. Lưu tệp và áp dụng nó với kubectl
nano StorageClass.yaml
6Bước 2. Tạo triển khai StatefulSet
1. Tạo YAML triển khai StatefulSet
kubectl label nodes =
02. Chỉ định số lượng bản sao trong tệp, hình ảnh Docker MongoDB sẽ được sử dụng và cung cấp mẫu yêu cầu khối lượng để cung cấp khối lượng động
nano StorageClass.yaml
83. Lưu tệp và sử dụng áp dụng kubectl để tạo triển khai
nano StorageClass.yaml
9Bước 3. Tạo một dịch vụ Headless
Để tạo một dịch vụ không đầu
1. Tạo một tệp YAML dịch vụ
kubectl label nodes =
42. Xác định một dịch vụ cho phép giao tiếp trực tiếp với các nhóm
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mongodb-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
13. Áp dụng YAML với kubectl
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mongodb-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
2Bước 4. Thiết lập máy chủ sao chép
Để thiết lập sao chép nhóm
1. Nhập nhóm bằng cách sử dụng
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mongodb-storageclass
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
2kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mongodb-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
3Thông báo chào mừng shell MongoDB xuất hiện
2. Bắt đầu sao chép bằng cách gõ lệnh sau tại dấu nhắc trình bao MongoDB
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mongodb-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
4Dòng
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mongodb-storageclass
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
3 cho thấy việc bắt đầu đã thành công3. Xác định biến có tên là
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mongodb-storageclass
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
4. Biến thực thi apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mongodb-storageclass
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
5kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mongodb-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
54. Sử dụng biến để thêm máy chủ chính vào cấu hình
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mongodb-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
6Đầu ra hiển thị tên của máy chủ chính
5. Xác nhận cấu hình bằng cách thực hiện lệnh sau
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mongodb-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
7Dòng
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mongodb-storageclass
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
3 xác nhận cấu hình thành công6. Sử dụng lệnh
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mongodb-storageclass
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
7 để thêm một nhóm khác vào cấu hìnhkind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mongodb-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
8Đầu ra cho thấy bản sao đã được thêm vào
7. Kiểm tra trạng thái của hệ thống bằng cách gõ
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mongodb-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
9Phần
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mongodb-storageclass
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- large
8 sẽ hiển thị hai bản sao. Bản sao chính được liệt kê ở đầu đầu raBản sao phụ nằm dưới bản sao chính
Việc triển khai ReplicaSet của MongoDB đã được thiết lập và sẵn sàng hoạt động
Ghi chú. Bare Metal Cloud cung cấp các phiên bản được thiết kế để hỗ trợ cơ sở dữ liệu NoSQL hiệu suất cao như MongoDB. Các phiên bản cung cấp hiệu suất và khả năng cách ly cần thiết cho khối lượng công việc đòi hỏi khắt khe
Phần kết luận
Hướng dẫn này đề cập đến các tình huống phổ biến khi triển khai MongoDB trên Kubernetes. Mặc dù việc triển khai phiên bản độc lập là thiết thực để thử nghiệm và phát triển, nhưng việc triển khai sản xuất phải luôn sử dụng các bộ bản sao