Apigee Hybrid는 Cassandra 노드의 링을 StatefulSet로 사용합니다. Cassandra는 런타임 영역의 특정 Apigee 항목에 영구 스토리지를 제공합니다. Cassandra에 대한 자세한 내용은 런타임 영역 정보를 참조하세요.
Cassandra는 리소스 집약적인 서비스이므로 다른 하이브리드 서비스가 있는 pod에 배포해서는 안 됩니다. 로드에 따라 링의 Cassandra 노드 수를 클러스터에 축소하고자 할 수 있습니다.
Cassandra 링을 축소하는 일반적인 프로세스는 다음과 같습니다.
- Cassandra 노드 하나를 사용 중단하세요.
overrides.yaml
의cassandra.replicaCount
속성을 업데이트하세요.- 구성 업데이트를 적용하세요.
- 삭제하려는 노드마다 이 단계를 반복합니다.
- 클러스터 구성에 따라 영구 볼륨 신청 또는 볼륨을 삭제합니다.
알아두어야 할 사항
- 다음 노드로 진행하기 전에 한 번에 하나의 노드에서 이 작업을 수행합니다.
- 사용 중단할 노드 이외의 노드가 비정상인 경우 계속 진행하지 마세요. Kubernetes는 클러스터에서 pod를 축소할 수 없습니다.
- 항상 노드 3개의 배수로 확장 또는 축소됩니다.
기본 요건
링에서 Cassandra 노드 수를 축소하기 전에 다음 예시와 같이 클러스터가 정상 상태이고 모든 노드가 실행 중인지 확인합니다.
kubectl get pods -n yourNamespace -l app=apigee-cassandra NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 2h apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-default-3 1/1 Running 0 16m apigee-cassandra-default-4 1/1 Running 0 14m apigee-cassandra-default-5 1/1 Running 0 13m
kubectl -n yourNamespace exec -it apigee-cassandra-default-0 nodetool status Datacenter: us-east1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.16.2.6 690.17 KiB 256 48.8% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 700.55 KiB 256 51.6% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 to UN 10.16.11.11 144.36 KiB 256 48.3% c7906366-6c98-4ff6-a4fd-17c596c33cf7 ra-1 UN 10.16.1.11 767.03 KiB 256 49.8% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 193.64 KiB 256 50.9% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 132.42 KiB 256 50.6% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1
Cassandra 노드 사용 중단
-
nodetool 명령어를 사용하여 클러스터에서 Cassandra 노드를 사용 중단합니다.
kubectl -n yourNamespace exec -it nodeName nodetool decommission
예를 들어 이 명령어는 이름에서 숫자 값이 가장 높은 노드
apigee-cassandra-5
를 사용 중단합니다.kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
- 사용 중단이 완료될 때까지 기다렸다가 클러스터에 노드가 한 개 줄었는지 확인합니다. 예를 들면 다음과 같습니다.
kubectl -n yourNamespace exec -it nodeName nodetool status Datacenter: us-east1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.16.2.6 710.37 KiB 256 59.0% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 720.97 KiB 256 61.3% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 UN 10.16.1.11 777.11 KiB 256 58.9% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 209.23 KiB 256 62.2% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 143.23 KiB 256 58.6% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1
overrides.yaml
파일에서cassandra.replicaCount
속성을 업데이트하거나 추가합니다. 예를 들어 현재 노드 수가 6이면 5로 변경합니다.cassandra: replicaCount: 5 # (n-1 5 in this example)
- 클러스터에 구성 변경을 적용합니다.
./apigeectl apply --datastore namespace/apigee unchanged secret/ssl-cassandra unchanged storageclass.storage.k8s.io/apigee-gcepd unchanged service/apigee-cassandra unchanged statefulset.apps/apigee-cassandra configured
- 남아있는 모든 Cassandra 노드가 실행 중인지 확인합니다.
kubectl get pods -n yourNamespace -l app=apigee-cassandra NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 3h apigee-cassandra-default-1 1/1 Running 0 3h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-default-3 1/1 Running 0 25m apigee-cassandra-default-4 1/1 Running 0 24m
- 사용 중단하려는 노드마다 1~5단계를 반복합니다.
- 노드 해제가 완료되면
cassandra.replicaCount
값이nodetool status
명령어에서 반환된 노드 수와 동일한지 확인합니다.예를 들어 Cassandra를 3개의 노드로 축소한 경우는 다음과 같습니다.
kubectl -n yourNamespace exec -it apigee-cassandra-default-0 nodetool status Datacenter: us-east1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.16.2.6 710.37 KiB 256 59.0% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 720.97 KiB 256 61.3% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 UN 10.16.5.13 209.23 KiB 256 62.2% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1
- Cassandra 클러스터 크기를 줄인 후에는 pvc(PersistentVolumeClaim)를 삭제하여 다음 확장 이벤트가 동일한 영구 볼륨과 이전에 생성된 데이터를 사용하지 않도록 주의해야 합니다.
pvc의 이름을 가져옵니다.
kubectl get pvc -n yourNamespace NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE cassandra-data-apigee-cassandra-default-0 Bound pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-1 Bound pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-2 Bound pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-3 Bound pvc-d29ba265-81a2-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h cassandra-data-apigee-cassandra-default-4 Bound pvc-0675a0ff-81a3-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h cassandra-data-apigee-cassandra-default-5 Bound pvc-354afa95-81a3-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h
이 예시에서 다음 pvc는 3개의 해제된 노드에 해당합니다.
cassandra-data-apigee-cassandra-5
cassandra-data-apigee-cassandra-4
cassandra-data-apigee-cassandra-3
- pvc를 삭제합니다.
kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-5 persistentvolumeclaim "cassandra-data-apigee-cassandra-5" deleted
kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-4 persistentvolumeclaim "cassandra-data-apigee-cassandra-4" deleted
kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-3 persistentvolumeclaim "cassandra-data-apigee-cassandra-3" deleted
- pvc가 삭제되었는지 확인합니다.
kubectl get pvc -n yourNamespace NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE cassandra-data-apigee-cassandra-default-0 Bound pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-1 Bound pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-2 Bound pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-3 Bound pvc-d29ba265-81a2-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h cassandra-data-apigee-cassandra-default-4 Bound pvc-0675a0ff-81a3-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h
- Anthos 설치를 사용하는 경우 동일한 시퀀스를 사용하여 Anthos Kubernetes 클러스터에서 영구 볼륨을 삭제합니다.
영구 볼륨의 이름을 가져옵니다.
kubectl get pv -n youNamespace NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-0675a0ff-81a3-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-4 apigee-gcepd 5h pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-1 apigee-gcepd 7h pvc-354afa95-81a3-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-5 apigee-gcepd 5h pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-2 apigee-gcepd 7h pvc-d29ba265-81a2-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-3 apigee-gcepd 5h pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-0 apigee-gcepd 7h
이 예시에서 다음 볼륨은 해제된 노드 3개에 해당합니다.
- 5:
pvc-354afa95-81a3-11e9-8862-42010a8e014a
- 4:
pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
- 3:
pvc-d29ba265-81a2-11e9-8862-42010a8e014a
- 5:
-
영구 볼륨을 삭제합니다.
kubectl -n yourNamespace delete pv pvc-354afa95-81a3-11e9-8862-42010a8e014a
kubectl -n yourNamespace delete pv pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
kubectl -n yourNamespace delete pv pvc-d29ba265-81a2-11e9-8862-42010a8e014a
-
영구 볼륨이 삭제되었는지 확인합니다.
kubectl get pv -n youNamespace NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-1 apigee-gcepd 7h pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-2 apigee-gcepd 7h pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-0 apigee-gcepd 7h