개요
예제에서는 배포를 만들어 공유 디스크 장애 조치(failover) 클러스터 인스턴스와 비슷한 고가용성 구성을 얻는 방법을 보여 줍니다. 이 구성에서 Kubernetes는 클러스터 오케스트레이터의 역할을 수행합니다. 컨테이너의 SQL Server 인스턴스가 실패하면 오케스트레이터는 동일한 영구적 스토리지에 연결된 또 다른 컨테이너 인스턴스를 부트스트랩합니다.
구성환경
docker-ce 19.03.5, kubernetes v1.18.0
kubernetes 클러스터 환경에서 mssql 컨테이너 생성 구성 절차
1. 이미지 다운로드 2. SA 암호만들기 3. 볼륨 만들기 4. 배포 만들기 5. Failover 테스트 |
1. 이미지 다운로드(모든 worker 노드에서 실행)
shell> docker pull mcr.microsoft.com/mssql/server:2017-CU20-ubuntu-16.04
** 인터넷이 연결되어 있어야 한다.
2. SA 암호만들기( Master 노드에서 실행)
shell> kubectl create secret generic mssql --from-literal=SA_PASSWORD="MyC0m9l&xP@ssw0rd" |
3. 볼륨 만들기
3.1 NFS 서버 구성
- /etc/exports 파일 예시
/opt/mssql-data *(rw,no_root_squash,no_all_squash,sync) |
shell> exportfs -a
3.2 Persistent Volume 생성
shell> kubectl apply -f PersistentVolume.yaml
- PersistentVolume.yaml 예시
apiVersion: v1 kind: PersistentVolume metadata: name: pv0000 namespace: default labels: storage: nfs spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: slow mountOptions: - hard - nfsvers=4.1 nfs: path: /opt/mssql-data server: 192.168.0.167 |
3.3 Persistent Volume Claim 생성
shell> kubectl apply -f PersistentVolumeClaim.yaml
- PersistentVolumeClaim.yaml 예시
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mssql-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: slow selector: matchLabels: storage: "nfs" |
4. 배포 만들기
shell> kubectl apply -f sqldeployment.yaml
- sqldeployment.yaml 예시
apiVersion: apps/v1 kind: Deployment metadata: name: mssql-deployment spec: replicas: 1 selector: matchLabels: app: mssql template: metadata: labels: app: mssql spec: terminationGracePeriodSeconds: 10 containers: - name: mssql image: mcr.microsoft.com/mssql/server:2017-CU20-ubuntu-16.04 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 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 |
- 생성된 파드 및 서비스 확인( Master Node)
shell> kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mssql-deployment-77b965cdc9-p5vv6 1/1 Running 1 9h 10.38.0.0 workernode1 shell> shell> kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mssql-deployment LoadBalancer 10.109.133.162 1433:30792/TCP 9h shell> |
5. Failover 테스트
5.1 worker node #1을 유지 모드로 변경
shell> kubectl get node NAME STATUS ROLES AGE VERSION masternode1 Ready master 25d v1.17.4 workernode1 Ready <none> 25d v1.17.4 workernode2 Ready <none> 25d v1.17.4 shell> kubectl drain workernode1 node/workernode1 cordoned evicting pod "mssql-deployment-77b965cdc9-p5vv6" pod/mssql-deployment-77b965cdc9-p5vv6 evicted node/myworkernode1 evicted shell> kubectl get node NAME STATUS ROLES AGE VERSION masternode1 Ready master 25d v1.17.4 workernode1 Ready,SchedulingDisabled <none> 25d v1.17.4 workernode2 Ready <none> 25d v1.17.4 shell> |
5.2 파드가 workernode2에서 실행중인지 확인
shell> kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mssql-deployment-77b965cdc9-q4zrl 1/1 Running 0 4m56s 10.45.0.19 workernode2 shell> |
'가상화 > Kubernetes' 카테고리의 다른 글
kubernetes dashboard 설치 (0) | 2023.06.27 |
---|---|
[Docker] Tomcat 컨테이너 Heap 모니터링 (0) | 2020.04.18 |
[docker] mssql server 및 tools 설치 (0) | 2020.04.16 |
[kubernetes] 외부 nginx + kubernetes tomcat 연동 (0) | 2020.04.15 |
[kubernetes] Kubernetes에서 Ingress 와 Tomcat 연동 (0) | 2020.04.10 |