YugabyteDB의 OKE 비용 - 2 - Helm 차트에서 설치

에서 Oracle Cloud에 Kubernetes 클러스터를 생성했습니다. 이 게시물에서는 YugabyteDB를 설치하겠습니다.

네임스페이스



YugabyteDB를 설치할 네임스페이스를 만들고 있습니다.

dev@cloudshell:~ (uk-london-1)$

 kubectl create namespace yb-demo

namespace/yb-demo created


스토리지 클래스



기본 StorageClass를 기본값oci-bv(FlexVolume 1)이 아닌 권장 CSI(Container Storage Interface) 볼륨 플러그인인 oci 로 변경하고 있습니다. 블록 볼륨이 작업자의 컴퓨트 인스턴스와 동일한 가용성 도메인에 있는지 확인하기 위해서도 필요합니다.

dev@cloudshell:~ (uk-london-1)$

 kubectl patch storageclass oci     \
 -p '{"metadata": {"annotations":{"storageclass.beta.kubernetes.io/\
is-default-class":"false"}}}'

storageclass.storage.k8s.io/oci patched

dev@cloudshell:~ (uk-london-1)$

 kubectl patch storageclass oci-bv \
 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/\
is-default-class":"true"}}}'

storageclass.storage.k8s.io/oci-bv patched



결과:

dev@cloudshell:~ (uk-london-1)$

 kubectl get sc

NAME               PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
oci                oracle.com/oci                    Delete          Immediate              false                   1h
oci-bv (default)   blockvolume.csi.oraclecloud.com   Delete          WaitForFirstConsumer   true                    1h


투구 차트



Helm Chart에서 최신 버전을 설치하겠습니다.

dev@cloudshell:~ (uk-london-1)$

 helm repo add yugabytedb https://charts.yugabyte.com

"yugabytedb" already exists with the same configuration, skipping

dev@cloudshell:~ (uk-london-1)$

 helm repo update

Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "kubernetes-dashboard" chart repository
...Successfully got an update from the "yugabytedb" chart repository
Update Complete. ⎈Happy Helming!⎈

dev@cloudshell:~ (uk-london-1)$

 helm search repo yugabytedb/yugabyte

NAME                    CHART VERSION   APP VERSION     DESCRIPTION                                       
yugabytedb/yugabyte     2.13.0          2.13.0.0-b42    YugabyteDB is the high-performance distributed ...


YugabyteDB 구성



여기에서 values.yaml에서 두 가지를 사용자 지정합니다.
  • 스토리지(각 PersistentVolumeClaim에 대해 1TB를 넣겠습니다)
  • 배치 정보(YugabyteDB는 리더와 팔로워의 올바른 균형을 보장하여 하나의 AD 실패에 대해 탄력성을 갖도록 실행하는 가용성 도메인을 알아야 합니다).

  • 기본값은 복제 계수 RF=3입니다.

    cat > yb-demo.yaml <<'YAML'
    storage:
      master:
        size: 1Ti
      tserver:
        size: 1Ti
    gflags:
      master:
        placement_cloud: $(curl -s http://169.254.169.254/opc/v1/instance/regionInfo/realmDomainComponent)
        placement_region: $(curl -s http://169.254.169.254/opc/v1/instance/region)
        placement_zone: $(curl -s http://169.254.169.254/opc/v1/instance/ociAdName)
      tserver:
        placement_cloud: $(curl -s http://169.254.169.254/opc/v1/instance/regionInfo/realmDomainComponent)
        placement_region: $(curl -s http://169.254.169.254/opc/v1/instance/region)
        placement_zone: $(curl -s http://169.254.169.254/opc/v1/instance/ociAdName)
    YAML
    


    나중에 일부 스크린샷은 이 사용자 지정 없이 촬영되었으며 50GB 스토리지(OKE에서 최소) 및 cloud1/zone1/rack1 기본 배치를 보여줍니다. 올바른 배치 정보는 다음과 같습니다.

    YugabyteDB 설치



    설치에는 몇 분이 걸립니다.

    dev@cloudshell:~ (uk-london-1)$
    
     helm install yb-demo yugabytedb/yugabyte --namespace yb-demo \
     -f yb-demo.yaml --wait
    
    NAME: yb-demo
    LAST DEPLOYED: Wed Apr  6 08:40:02 2022
    NAMESPACE: yb-demo
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    1. Get YugabyteDB Pods by running this command:
      kubectl --namespace yb-demo get pods
    
    2. Get list of YugabyteDB services that are running:
      kubectl --namespace yb-demo get services
    
    3. Get information about the load balancer services:
      kubectl get svc --namespace yb-demo
    
    4. Connect to one of the tablet server:
      kubectl exec --namespace yb-demo -it yb-tserver-0 bash
    
    5. Run YSQL shell from inside of a tablet server:
      kubectl exec --namespace yb-demo -it yb-tserver-0 -- /home/yugabyte/bin/ysqlsh -h yb-tserver-0.yb-tservers.yb-demo
    
    6. Cleanup YugabyteDB Pods
      For helm 2:
      helm delete yb-demo --purge
      For helm 3:
      helm delete yb-demo -n yb-demo
      NOTE: You need to manually delete the persistent volume
      kubectl delete pvc --namespace yb-demo -l app=yb-master
      kubectl delete pvc --namespace yb-demo -l app=yb-tserver
    


    포드



    다음은 내yb-demo 네임스페이스에서 생성된 포드입니다.

    dev@cloudshell:~ (uk-london-1)$
    
     kubectl get pods -n yb-demo -o wide
    
    NAME           READY   STATUS    RESTARTS   AGE   IP             NODE          NOMINATED NODE   READINESS GATES
    yb-master-0    2/2     Running   0          12m   10.244.0.4     10.0.10.51    <none>           <none>
    yb-master-1    2/2     Running   0          12m   10.244.1.3     10.0.10.152   <none>           <none>
    yb-master-2    2/2     Running   0          12m   10.244.0.131   10.0.10.103   <none>           <none>
    yb-tserver-0   2/2     Running   0          12m   10.244.0.132   10.0.10.103   <none>           <none>
    yb-tserver-1   2/2     Running   0          12m   10.244.1.4     10.0.10.152   <none>           <none>
    yb-tserver-2   2/2     Running   0          12m   10.244.0.5     10.0.10.51    <none>           <none>
    


    YugabyteDB 클러스터의 컨트롤 플레인인 3개master와 데이터 플레인인 3개tserver가 있습니다. 고가용성을 위해 클러스터가 복제 팩터 RF=3에 있기 때문에 3이 최소값입니다(예: helm install에서 --set gflags.tserver.replication_factor=5로 변경할 수 있음). 이것은 3master을 의미합니다. 여기서 하나는 리더이고 다른 두 개는 팔로워이며 가용성 도메인 중단 시 리더가 될 준비가 되어 있습니다. 그리고 같은 이유로 최소 3개tserver는 연결, 로드 및 데이터를 여러 노드에 분산하기 위해 더 많이 가질 수 있습니다.

    서비스


    mastertserverClusterIP를 통해 액세스할 수 있는 헤드리스 서비스LoadBalancer를 통해 웹 콘솔 및 SQL 끝점을 노출합니다.

    
    dev@cloudshell:~ (uk-london-1)$
     kubectl get services -n yb-demo -o wide
    
    NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)                                                                      AGE   SELECTOR
    yb-master-ui         LoadBalancer   10.96.187.203   141.147.107.246   7000:31290/TCP                                                               17m   app=yb-master
    yb-masters           ClusterIP      None            <none>            7000/TCP,7100/TCP                                                            17m   app=yb-master
    yb-tserver-service   LoadBalancer   10.96.122.104   141.147.106.110   6379:32100/TCP,9042:30198/TCP,5433:31343/TCP                                 17m   app=yb-tserver
    yb-tservers          ClusterIP      None            <none>            9000/TCP,12000/TCP,11000/TCP,13000/TCP,9100/TCP,6379/TCP,9042/TCP,5433/TCP   17m   app=yb-tserver
    


    포트 7000은 master 웹 콘솔이며 외부 IP로 액세스할 수 있으며 이 실습을 위해 공용 네트워크에 설정했습니다. http://141.147.107.246:7000




    지금은 데이터베이스가 비어 있지만 다음 게시물에서는 일부 SQL을 실행하겠습니다. PostgreSQL 호환 엔포인트는 tserver 로드 밸런서에 의해 노출됩니다: postgresql://141.147.106.110:5433/yugabyte:

    $ psql postgresql://141.147.106.110:5433/yugabyte
    psql (13.5, server 11.2-YB-2.13.0.0-b0)
    Type "help" for help.
    
    yugabyte=# select * from yb_servers();
    
                            host                        | port | num_connections | node_type | cloud  |   region    | zone  |                     public_ip
    ----------------------------------------------------+------+-----------------+-----------+--------+-------------+-------+----------------------------------------------------
     yb-tserver-1.yb-tservers.yb-demo.svc.cluster.local | 5433 |               0 | primary   | cloud1 | datacenter1 | rack1 | yb-tserver-1.yb-tservers.yb-demo.svc.cluster.local
     yb-tserver-0.yb-tservers.yb-demo.svc.cluster.local | 5433 |               0 | primary   | cloud1 | datacenter1 | rack1 | yb-tserver-0.yb-tservers.yb-demo.svc.cluster.local
     yb-tserver-2.yb-tservers.yb-demo.svc.cluster.local | 5433 |               0 | primary   | cloud1 | datacenter1 | rack1 | yb-tserver-2.yb-tservers.yb-demo.svc.cluster.local
    


    모든 노드에 대한 정보를 반환하는 yb_servers() 함수를 쿼리했습니다. 여기서 public_ip는 Kubernetes 클러스터 내의 주소입니다. 외부에서는 OKEclusterName: yugabytedb로 태그가 지정된 OKE에서 자동으로 생성된 로드 밸런서를 사용합니다.


    master 콘솔141.147.107.246이 켜져 있고 포트 7000에서 수신 대기 중입니다.


    다른 하나는 tserver 서비스, 141.147.106.110 이며 다음에서 수신합니다.
  • 5433 YSQL 끝점(PostgreSQL 호환 API)
  • 9042 YCQL 끝점(Cassandra 호환 API)
  • 6379 YEDIS enspoint(REDIS 호환 API)



  • YugabyteDB는 비공유 분산 SQL 데이터베이스일 뿐만 아니라 다중 API이기 때문입니다.

    다음 게시물에서 일부 로드를 생성하기 위해 PostgreSQL 호환 API를 사용하겠습니다. 내 목표는 일부 스토리지 및 네트워크 전송을 사용하여 Oracle Cloud의 비용을 평가하는 것입니다.

    좋은 웹페이지 즐겨찾기