Triển khai SQL Server trên Kubernetes (K8S)

1. Xây dựng Image SQL Server

1.1. Dockerfile

FROM mcr.microsoft.com/mssql/server:2019-latest
USER root
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

1.2. Build và Push Image

mkdir -p /root/manifest/sql_server
cd /root/manifest/sql_server
# Upload Dockerfile vào thư mục này

docker build -t mssql:2019 .
docker image ls |grep mssql
# mssql     2019    bf68cc180a54   2 hours ago     1.47GB

docker tag bf68cc180a54 registry-vpc.cnhangzhou.aliyuncs.com/mq_basic/mssql:2019

# Đăng nhập vào Alibaba Cloud Container Registry
docker login --username=mq-ops2@191065071xx registry-vpc.cn-hangzhou.aliyuncs.com

# Push image lên registry
docker push registry-vpc.cn-hangzhou.aliyuncs.com/mq_basic/mssql:2019

2. Tạo YAML và Triển khai

2.1. Tạo Secret

kubectl create secret generic mssql --from-literal=SA_PASSWORD="MyC0m9l&xP@ssw0rd" -n ops-share

2.2. Tạo PersistentVolumeClaim (PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ops-mssql-data
  namespace: ops-share
spec:
  accessModes: ["ReadWriteOnce"] 
  resources:
    requests:
      storage: 100Gi

2.3. Tạo Deployment cho SQL Server

  • Các biến môi trường bắt buộc: ACCEPT_EULA=YSA_PASSWORD
  • Mount thư mục dữ liệu vào /var/opt/mssql/data
  • Nên tạo thêm PVC riêng cho thư mục backup/restore
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mssql-deployment
  namespace: ops-share
spec:
  replicas: 1
  selector:
     matchLabels:
       app: mssql
  template:
    metadata:
      labels:
        app: mssql
    spec:
      imagePullSecrets:
      - name: image-repo-account-wangyang
      terminationGracePeriodSeconds: 30
      hostname: mssqlinst
      containers:
      - name: mssql
        image: registry-vpc.cn-hangzhou.aliyuncs.com/mq_basic/mssql:2019
        ports:
        - containerPort: 1433
        env:
        - name: MSSQL_PID
          value: "Developer"
        - name: ACCEPT_EULA
          value: "Y"     
        - name: SA_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mssql
              key: SA_PASSWORD 
        volumeMounts:
        - name: mssqldb
          mountPath: /var/opt/mssql
        resources:
          limits:
            cpu: "4"
            memory: 4Gi
          requests:
            cpu: 128m
            memory: 128Mi
      volumes:
      - name: mssqldb
        persistentVolumeClaim:
          claimName: ops-mssql-data 

2.4. Tạo Service

apiVersion: v1
kind: Service
metadata:
  name: mssql-deployment
  namespace: ops-share
spec:
  ports:
  - nodePort: 30344
    port: 1433
    protocol: TCP
    targetPort: 1433
  selector:
    app: mssql
  type: NodePort

3. Kiểm tra bằng Command Line

3.1. Cài đặt sqlcmd

curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo
yum install msodbcsql mssql-tools -y

# Kết nối đến SQL Server
/opt/mssql-tools/bin/sqlcmd -S 10.100.8.98,30344 -U sa -P "MyC0m9l&xP@ssw0rd"

# Liệt kê database
1> select name from sys.databases;
2> go
name                                                                                                                            
--------------------------------------------------------------------------------------------------------------------------------
master                                                                                                                          
tempdb                                                                                                                          
model                                                                                                                           
msdb                                                 

3.2. Import file SQL

/opt/mssql-tools/bin/sqlcmd -S 172.30.1.47,1433 -U sa -P "MyC0m9l&xP@ssw0rd" -d mk-hybris -i dbo.sql
# -d: Tên database, -i: Đường dẫn file SQL

4. Cài đặt Client Tool (Windows)

Tải SSMS tại: https://aka.ms/ssmsfullsetup

Cài đặt và kết nối với địa chỉ IP và port (cách nhau bởi dấu phẩy).

5. Các vấn đề thường gặp

5.1. Lỗi khi import SQL

Giải pháp:

sp_configure 'contained database authentication', 1;  
GO  
RECONFIGURE;  
GO

5.2. Lỗi khi import file .bacpac

Giải pháp: Xóa dữ liệu của các user CXCC_CLOUD_SERVICE_DBA_ManualCXCC_CLOUD_SERVICE_DBA_EXTENDED_Manual trong database mặc định.

Tham khảo: Quickstart: Deploy SQL Server container on Kubernetes

Thẻ: Kubernetes SQL Server Container Registry PVC deployment

Đăng vào ngày 25 tháng 6 lúc 09:38