Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server di Linux
Panduan cepat ini menunjukkan cara menyiapkan instans SQL Server yang sangat tersedia dalam sebuah kontainer dengan penyimpanan persisten, di 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.
Panduan 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
Akun administrator sistem (sa) harus diamankan dengan kata sandi yang kuat. Kata sandi Anda harus mengikuti kebijakan kata sandi default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.
Buat
sakata sandi di kluster Kubernetes. Kubernetes dapat mengelola informasi konfigurasi sensitif, seperti kata sandi sebagai rahasia.Untuk membuat rahasia di Kubernetes bernama
mssqlyang menyimpan nilai<password>untukMSSQL_SA_PASSWORD, jalankan perintah berikut. Ganti<password>dengan kata sandi kompleks Anda.Penting
Variabel
SA_PASSWORDlingkungan tidak digunakan lagi. GunakanMSSQL_SA_PASSWORDsebagai gantinya.kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
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 itu 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: 8GiSimpan 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 dibuat secara otomatis sebagai akun penyimpanan Azure, serta terikat dengan klaim volume persisten.
storageclass "azure-disk" created persistentvolumeclaim "mssql-data" createdVerifikasi 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-dataMetadata yang dikembalikan menyertakan nilai yang disebut
Volume. Nilai ini dipetakan menjadi 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 volume sesuai dengan sebagian nama blob di portal Azure.
Verifikasi volume persisten.
kubectl describe pvkubectlmengembalikan metadata tentang volume persisten yang secara otomatis dibuat dan terikat pada klaim volume persisten.
Buat penyebaran
Kontainer yang meng-host instans SQL Server tersebut dijelaskan sebagai objek penyebaran Kubernetes. Penyebaran membuat replica set. 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 rahasiamssqlyang sudah Anda terapkan pada kluster Kubernetes. - Manifes juga menjelaskan layanan. Layanan ini adalah penyeimbang beban. 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 yang didasarkan pada citra 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: LoadBalancerSalin kode sebelumnya ke file baru, bernama
sqldeployment.yaml. Perbarui nilai berikut ini:Pengaturan Nilai Description MSSQL_PIDDeveloperMengatur kontainer untuk menjalankan edisi Pengembang SQL Server 2022 (16.x). 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.persistentVolumeClaimmssql-dataNilai ini memerlukan entri untuk claimNameyang memetakan ke nama yang digunakan untuk klaim volume persisten. Tutorial ini menggunakanmssql-data.nameMSSQL_SA_PASSWORDMengonfigurasi image kontainer untuk mengatur kata sandi, seperti yang didefinisikan dalam bagian ini. valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORDKetika Kubernetes menyebarkan kontainer, Kubernetes mengacu pada rahasia yang dinamai
mssqluntuk mendapatkan nilai kata sandi.Pengaturan Description securityContextMenentukan 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 menentukan fsGroupdengan nilai10001, yang merupakan ID Grup (GID) untukmssqlgrup. Nilai ini berarti bahwa semua proses kontainer juga merupakan bagian dari GID10001tambahan (mssql). Pemilik volume/var/opt/mssqldan file apa pun yang dibuat dalam volume tersebut akan memiliki GID10001(grupmssql).Peringatan
Dengan menggunakan
LoadBalancerjenis 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 telah dibuat. Instans SQL Server berada dalam kontainer, terhubung ke penyimpanan persisten.
deployment "mssql-deployment" created service "mssql-deployment" createdPenyebaran dan layanan telah 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 17mPod memiliki status
Running. Status ini menunjukkan bahwa kontainer sudah siap. Setelah penyebaran dibuat, dapat memerlukan 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 servicesPerintah 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 2mUntuk 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/bashAnda dapat melihat nama pengguna sebagai
mssqljika Anda menjalankanwhoami.mssqladalah 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.
- ekstensi MSSQL untuk Visual Studio Code
- SQL Server Management Studio (SSMS)
- SQL Server Data Tools (SSDT)
Menghubungkan menggunakan sqlcmd
Untuk menyambungkan dengan sqlcmd, jalankan perintah berikut.
sqlcmd -S <External IP address> -U sa -P "<password>"
Ganti <External IP address> dengan alamat IP untuk mssql-deployment layanan, dan <password> dengan kata sandi kompleks Anda.
Perhatian
Kata sandi Anda harus mengikuti kebijakan kata sandi default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.
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 podsPerhatikan nama pod yang menjalankan SQL Server.
Hapus pod.
kubectl delete pod mssql-deployment-0mssql-deployment-0adalah 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 dikerahkan. 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 ada di bawah ini, bersihkan sumber daya yang tidak Anda perlukan.
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