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=YvàSA_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_Manual và CXCC_CLOUD_SERVICE_DBA_EXTENDED_Manual trong database mặc định.
Tham khảo: Quickstart: Deploy SQL Server container on Kubernetes