Mulai cepat: Menyebarkan kluster kontainer SQL Server di Azure
Berlaku untuk: SQL Server - Linux
Mulai cepat ini menunjukkan cara mengonfigurasi instans SQL Server yang sangat tersedia dalam kontainer dengan penyimpanan persisten, pada Azure Kubernetes Service (AKS) atau Red Hat OpenShift. Jika instans SQL Server gagal, orkestrator secara otomatis membuatnya kembali di pod baru. Layanan kluster juga memberikan ketahanan terhadap kegagalan node.
Mulai cepat ini menggunakan alat baris perintah berikut untuk mengelola kluster.
Layanan kluster | Alat baris perintah |
---|---|
Azure Kubernetes Service (AKS) | kubectl (Kubernetes CLI) |
Azure Red Hat OpenShift | oc (OpenShift CLI) |
Prasyarat
Akun Azure dengan langganan aktif. Buat akun secara gratis.
Kluster Kubernetes. Untuk informasi selengkapnya tentang membuat dan menyambungkan ke kluster Kubernetes di AKS dengan
kubectl
, lihat Menyebarkan kluster Azure Kubernetes Service (AKS).Catatan
Untuk menghindari kegagalan node, kluster Kubernetes memerlukan lebih dari satu node.
Azure CLI. Lihat Cara menginstal Azure CLI untuk menginstal versi terbaru.
Membuat kata sandi SA
Buat kata sandi SA di kluster Kubernetes. Kubernetes dapat mengelola informasi konfigurasi sensitif, seperti kata sandi sebagai rahasia.
Untuk membuat rahasia di Kubernetes bernama
mssql
yang menyimpan nilaiMyC0m9l&xP@ssw0rd
untukMSSQL_SA_PASSWORD
, jalankan perintah berikut. Ingatlah untuk memilih kata sandi kompleks Anda sendiri:Penting
Variabel
SA_PASSWORD
lingkungan tidak digunakan lagi. GunakanMSSQL_SA_PASSWORD
sebagai gantinya.kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="MyC0m9l&xP@ssw0rd"
Membuat penyimpanan
Untuk database dalam kluster Kubernetes, Anda harus menggunakan penyimpanan yang bertahan. Anda dapat mengonfigurasi volume persisten dan klaim volume persisten di kluster Kubernetes menggunakan langkah-langkah berikut:
Buat manifes untuk menentukan kelas penyimpanan dan klaim volume persisten. Manifes menentukan provisioner penyimpanan, parameter, dan kebijakan klaim ulang. Kluster Kubernetes menggunakan manifes ini untuk membuat penyimpanan persisten.
Contoh YAML berikut mendefinisikan kelas penyimpanan dan klaim volume persisten. Provisioner kelas penyimpanan adalah
azure-disk
, karena kluster Kubernetes ini ada di Azure. Jenis akun penyimpanan adalahStandard_LRS
. Klaim volume persisten diberi namamssql-data
. Metadata klaim volume persisten mencakup anotasi yang menghubungkannya kembali ke kelas penyimpanan.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: azure-disk provisioner: kubernetes.io/azure-disk parameters: storageaccounttype: Standard_LRS kind: Managed --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mssql-data annotations: volume.beta.kubernetes.io/storage-class: azure-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 8Gi
Simpan file (misalnya,
pvc.yaml
).Buat klaim volume persisten di Kubernetes, di mana
<path to pvc.yaml file>
adalah lokasi tempat Anda menyimpan file:kubectl apply -f <path to pvc.yaml file>
Volume persisten secara otomatis dibuat sebagai akun penyimpanan Azure, dan terikat dengan klaim volume persisten.
storageclass "azure-disk" created persistentvolumeclaim "mssql-data" created
Verifikasi klaim volume persisten, di mana
<persistentVolumeClaim>
adalah nama klaim volume persisten:kubectl describe pvc <persistentVolumeClaim>
Pada langkah sebelumnya, klaim volume persisten diberi nama
mssql-data
. Untuk melihat metadata tentang klaim volume persisten, jalankan perintah berikut:kubectl describe pvc mssql-data
Metadata yang dikembalikan menyertakan nilai yang disebut
Volume
. Nilai ini memetakan ke nama blob.Name: mssql-data Namespace: default StorageClass: azure-disk Status: Bound Volume: pvc-d169b88e-f26d-11e7-bc3e-0a58ac1f09a4 Labels: ‹none> Annotations: kubectl.kubernetes.io/last-applied-configuration-{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta. kubernetes.io/storage-class":"azure-disk"},"name":"mssq1-data... pv.kubernetes.io/bind-completed-yes pv.kubernetes.io/bound-by-controller=yes volume.beta.kubernetes.io/storage-class=azure-disk volume.beta.kubernetes.io/storage-provisioner=kubernetes.io/azure-disk Capacity: 8Gi Access Modes: RWO Events: <none>
Nilai untuk volume cocok dengan bagian dari nama blob dalam gambar berikut dari portal Azure:
Verifikasi volume persisten.
kubectl describe pv
kubectl
mengembalikan metadata tentang volume persisten yang secara otomatis dibuat dan terikat pada klaim volume persisten.
Membuat penyebaran
Kontainer yang menghosting instans SQL Server dijelaskan sebagai objek penyebaran Kubernetes. Penyebaran membuat set replika. Set replika membuat pod.
Anda membuat manifes untuk menjelaskan kontainer, berdasarkan gambar SQL Server mssql-server-linux Docker.
- Manifes mereferensikan klaim volume persisten
mssql-server
, dan rahasiamssql
yang sudah Anda terapkan pada kluster Kubernetes. - Manifes juga menjelaskan layanan. Layanan ini adalah load balancer. Load balancer menjamin bahwa alamat IP bertahan setelah instans SQL Server dipulihkan.
- Manifes menjelaskan permintaan dan batas sumber daya. Ini didasarkan pada persyaratan sistem minimum.
Buat manifes (file YAML) untuk menjelaskan penyebaran. Contoh berikut menjelaskan penyebaran, termasuk kontainer berdasarkan gambar kontainer SQL Server.
apiVersion: apps/v1 kind: Deployment metadata: name: mssql-deployment spec: replicas: 1 selector: matchLabels: app: mssql template: metadata: labels: app: mssql spec: terminationGracePeriodSeconds: 30 hostname: mssqlinst securityContext: fsGroup: 10001 containers: - name: mssql image: mcr.microsoft.com/mssql/server:2022-latest resources: requests: memory: "2G" cpu: "2000m" limits: memory: "2G" cpu: "2000m" ports: - containerPort: 1433 env: - name: MSSQL_PID value: "Developer" - name: ACCEPT_EULA value: "Y" - name: MSSQL_SA_PASSWORD valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORD volumeMounts: - name: mssqldb mountPath: /var/opt/mssql volumes: - name: mssqldb persistentVolumeClaim: claimName: mssql-data --- apiVersion: v1 kind: Service metadata: name: mssql-deployment spec: selector: app: mssql ports: - protocol: TCP port: 1433 targetPort: 1433 type: LoadBalancer
Salin kode sebelumnya ke file baru, bernama
sqldeployment.yaml
. Perbarui nilai berikut ini:value: "Developer"
MSSQL_PID : Mengatur kontainer untuk menjalankan edisi Pengembang SQL Server. Edisi pengembang tidak dilisensikan untuk data produksi. Jika penyebaran untuk penggunaan produksi, atur edisi yang sesuai (Enterprise
,Standard
, atauExpress
). Untuk informasi selengkapnya, lihat Cara melisensikan SQL Server.persistentVolumeClaim
: Nilai ini memerlukan entri untukclaimName:
yang memetakan ke nama yang digunakan untuk klaim volume persisten. Tutorial ini menggunakanmssql-data
.name: MSSQL_SA_PASSWORD
: Mengonfigurasi citra kontainer untuk mengatur kata sandi SA, seperti yang ditentukan di bagian ini.valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORD
Ketika Kubernetes menyebarkan kontainer, Kubernetes mengacu pada rahasia yang dinamai
mssql
untuk mendapatkan nilai kata sandi.securityContext
: Mendefinisikan hak istimewa dan pengaturan kontrol akses untuk pod atau kontainer. Dalam hal ini, ditentukan pada tingkat pod, sehingga semua kontainer mematuhi konteks keamanan tersebut. Dalam konteks keamanan, kami menentukanfsGroup
dengan nilai10001
, yang merupakan ID Grup (GID) untukmssql
grup. Nilai ini berarti bahwa semua proses kontainer juga merupakan bagian dari GID10001
tambahan (mssql
). Pemilik untuk volume/var/opt/mssql
dan file apa pun yang dibuat dalam volume tersebutmssql
akan menjadi GID10001
(grup).
Peringatan
Dengan menggunakan
LoadBalancer
jenis layanan, instans SQL Server dapat diakses dari jarak jauh (melalui Internet) di port 1433.Simpan file. Contohnya,
sqldeployment.yaml
.Buat penyebaran, di mana
<path to sqldeployment.yaml file>
adalah lokasi tempat Anda menyimpan file:kubectl apply -f <path to sqldeployment.yaml file>
Penyebaran dan layanan dibuat. Instans SQL Server berada dalam kontainer, terhubung ke penyimpanan persisten.
deployment "mssql-deployment" created service "mssql-deployment" created
Penyebaran dan layanan dibuat. Instans SQL Server berada dalam kontainer, terhubung ke penyimpanan persisten.
Untuk melihat status pod, ketik
kubectl get pod
.NAME READY STATUS RESTARTS AGE mssql-deployment-3813464711-h312s 1/1 Running 0 17m
Pod memiliki status
Running
. Status ini menunjukkan bahwa kontainer sudah siap. Setelah penyebaran dibuat, dibutuhkan beberapa menit sebelum pod terlihat. Penundaan ini karena kluster menarik gambar mssql-server-linux dari Registri Artefak Microsoft. Setelah citra ditarik pertama kalinya, penyebaran berikutnya mungkin lebih cepat jika penyebaran dilakukan ke node yang sudah memiliki citra yang di-cache di atasnya.Pastikan layanan sedang berjalan. Jalankan perintah berikut:
kubectl get services
Perintah ini mengembalikan layanan yang berjalan, dan alamat IP internal dan eksternal untuk layanan. Perhatikan alamat IP eksternal untuk layanan
mssql-deployment
. Gunakan alamat IP ini untuk menyambungkan ke SQL Server.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 52m mssql-deployment LoadBalancer 10.0.113.96 52.168.26.254 1433:30619/TCP 2m
Untuk informasi selengkapnya tentang status objek di kluster Kubernetes, jalankan perintah berikut. Ingatlah untuk mengganti
<MyResourceGroup>
dan<MyKubernetesClustername>
dengan grup sumber daya dan nama kluster Kubernetes Anda:az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
Anda juga dapat memverifikasi bahwa kontainer berjalan sebagai non-root dengan menjalankan perintah berikut, di mana
<nameOfSqlPod>
adalah nama pod SQL Server Anda:kubectl.exe exec <nameOfSqlPod> -it -- /bin/bash
Anda dapat melihat nama pengguna seolah-olah
mssql
Anda menjalankanwhoami
.mssql
adalah pengguna non-root.whoami
Menyambungkan ke instans SQL Server
Anda dapat terhubung dengan aplikasi dari luar jaringan virtual Azure, menggunakan sa
akun dan alamat IP eksternal untuk layanan tersebut. Gunakan kata sandi yang Anda konfigurasi sebagai rahasia OpenShift.
Anda dapat menggunakan aplikasi berikut untuk menyambungkan ke instans SQL Server.
Menyambungkan dengan sqlcmd
Untuk menyambungkan dengan sqlcmd
, jalankan perintah berikut:
sqlcmd -S <External IP Address> -U sa -P "MyC0m9l&xP@ssw0rd"
Ganti nilai berikut:
<External IP Address>
dengan alamat IP untukmssql-deployment
layananMyC0m9l&xP@ssw0rd
dengan kata sandi kompleks Anda
Memverifikasi kegagalan dan pemulihan
Untuk memverifikasi kegagalan dan pemulihan, Anda dapat menghapus pod dengan langkah-langkah berikut:
Cantumkan pod yang menjalankan SQL Server.
kubectl get pods
Perhatikan nama pod yang menjalankan SQL Server.
Hapus pod.
kubectl delete pod mssql-deployment-0
mssql-deployment-0
adalah nilai yang dikembalikan dari langkah sebelumnya untuk nama pod.
Kubernetes secara otomatis membuat ulang pod untuk memulihkan instans SQL Server, dan terhubung ke penyimpanan persisten. Gunakan kubectl get pods
untuk memverifikasi bahwa sebuah pod baru disebarkan. Gunakan kubectl get services
untuk memverifikasi bahwa alamat IP untuk kontainer baru adalah sama.
Membersihkan sumber daya
Jika Anda tidak berencana untuk melalui tutorial yang mengikuti, bersihkan sumber daya yang tidak perlu Anda. az group delete
Gunakan perintah untuk menghapus grup sumber daya, layanan kontainer, dan semua sumber daya terkait. Ganti <MyResourceGroup>
dengan nama grup sumber daya yang berisi kluster Anda.
az group delete --name <MyResourceGroup> --yes --no-wait