Windows/VirtualBox의 K8s(DB)

만약 네가 노트북에서 Kubernetes를 하고 싶다면, 이것은 작은 시연이어서 복사하고 붙이기 쉽다.그리고 단순한'Hello World'가 아닌 진정한 SQL DB를 여기서 실행하면 위아래로 확장할 수 있다.

Virtualbox 설치


내가 Oracle VirtualBox를 사용하는 것은 내가 Oracle 제품의 충실한 팬이기 때문이다. 특히 Oracle 제품이 좋고 무료일 때이다.그러나 Hyper-V를 사용할 수 있습니다(이 부분을 건너뛰고 --driver=hyperv 대신 --driver=virtualboxVirtualBox를 설치했습니다.무료 설치https://www.virtualbox.org/wiki/Downloads
BIOS에서 가상화를 설정해야 합니다.
Microsoft Windows [Version 10.0.19042.906]
(c) Microsoft Corporation. All rights reserved.

C:\Users\Franck> systeminfo

...
Hyper-V Requirements:      VM Monitor Mode Extensions: Yes
                           Virtualization Enabled In Firmware: Yes
                           Second Level Address Translation: Yes
                           Data Execution Prevention Available: Yes

C:\WINDOWS\system32>bcdedit

...
hypervisorlaunchtype    Off
Hyper-V 요구사항이라도 VirtualBox와hypervisorlaunchtype은 닫을 때도 마찬가지입니다.

초콜릿을 담다


Minikube는 Chocolate 소프트웨어 관리자를 사용하여 설치하고 PowerShell 창에서 설치하는 방법은 다음과 같습니다.
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
(PowerShell 창에서 관리자로 실행)
Microsoft Windows [Version 10.0.19042.906]
(c) Microsoft Corporation. All rights reserved.

C:\Users\Franck>choco
Chocolatey v0.10.15
Please run 'choco -?' or 'choco <command> -?' for help menu.

C:\Users\Franck>

Minikube 설치


Minikube는 노트북에서 단일 노드 Kubernetes를 실행하는 도구입니다.
choco install minikube
(관리자로 DOS 창에서 이 작업을 실행합니다.)
minikube 명령은 가상 머신과 상호작용(시작, 정지, 터널...)에 사용됩니다.쿠베트인과 쿠베네트스의 상호작용.

키를 달다


Helm은kubernetes에서 응용 프로그램을 설치하는 소스 패키지 도구입니다.
choco install kubernetes-helm
(관리자로 DOS 창에서 이 작업을 실행합니다.)
Helm을 사용하여 실행하려는 패키지를 설치합니다.나는 데이터베이스를 사용한다. 나는 이 시범을 위해 하나를 설치할 것이다.Kubernetes는 처음에 무상태 프로그램을 확장하기 위해 설계되었지만, 상태 집합과 지속적인 저장소로 바뀌었다.그러나 그것은 완전한 데이터베이스에 적합한 플랫폼이 아닐 수도 있다.그리고 저는 YugabyteDB를 실행할 것입니다. 이것은 시작된 클라우드 본체 분포식 데이터베이스입니다. POD를 추가하여 확장할 수 있는 환경에서 더욱 의미가 있습니다. 이런 환경에서 노드가 정지되거나 추가될 때 복제는 가용성을 유지할 수 있습니다.

데이터베이스를 사용한 테스트: YugabyteDB


로컬 클러스터의 설치 기록은 다음과 같습니다.
https://docs.yugabyte.com/latest/quick-start/create-local-cluster/kubernetes/
이것은 복사(복제 인자 1)가 없는 집단을 만들 것이다. 이것은 노트북의 로컬 실험실에 있어서 정상적인 것이다.
나는 지도자의 선거가 법정수이기 때문에 RF3를 시도하기 위해 다른 일을 할 것이다.이것은 더 많은 POD를 의미한다. 나는 모든 노트북에서 실행할 수 있도록 메모리와 CPU를 제한할 것이다.2개의 코어, 4개의 Intel 스레드, 16GB의 메모리가 있는 내 서피스 프로에서 이 작업을 수행합니다.
우선 Yugabyte Helm 차트 라이브러리 추가
helm repo add yugabytedb https://charts.yugabyte.com
다음은 현재 버전입니다.
C:\Users\Franck> helm repo update
C:\Users\Franck> helm search repo yugabytedb/yugabyte

NAME                    CHART VERSION   APP VERSION     DESCRIPTION
yugabytedb/yugabyte     2.5.3           2.5.3.1-b10     YugabyteDB is the high-performance distributed ...
보고 싶으면 그래프 helm repo update & helm fetch yugabytedb/yugabyte 를 다운로드할 수 있습니다.

출발점


이제 Minikube 노드를 시작할 수 있습니다.
minikube start --driver=virtualbox --cpus=4 --memory 8192 --disk-size 30g 
이렇게 하면 VirtualBox 가상 머신이 생성되고 시작됩니다.보아하니, 내가 어떤 - cpu를 통과하든지 간에, 이것은 2개의 vCPU VM을 만들 것이다. 이것은 RF3 집단에 있어서는 부족하다. (나는 3개의yb 메인 서버와 적어도 3개의yb tserver가 필요하다.)
VBoxManage 업데이트 설정을 사용하여 4개의 vCPU(Surface Pro에서 최대 스레드 수)로 설정하지만 최대 80%까지 설정하여 호스트 운영 체제에 용량을 할당합니다.
minikube stop

"C:\Program Files\Oracle\VirtualBox\VBoxManage" modifyvm minikube --cpus 4 --cpuexecutioncap 80

minikube start
물론 VirtualBox GUI로 이 점을 실현할 수 있습니다.

분산 데이터베이스 만들기


나는 나의 Yugabyte 우주를 위해 이름 공간을 만들었다.
kubectl create namespace franck-yb
체크:
C:\Users\Franck> kubectl get namespaces

NAME                   STATUS   AGE
default                Active   7m54s
franck-yb              Active   24s
kube-node-lease        Active   7m55s
kube-public            Active   7m55s
kube-system            Active   7m55s
kubernetes-dashboard   Active   9s
이 모든 것은 웹 컨트롤러에서 볼 수 있으며, 이 컨트롤러는 다음과 같은 내용으로 시작됩니다.minikube dashboardkubernetes 계기판을 표시하기 위해 로컬 호스트 포트를 엽니다.
나는 간단한 helm install yugabyte yugabytedb/yugabyte --namespace franck-yb 로 Kubernetes 집단에 YugabyteDB 우주를 만들 수 있지만, 기본값은 내 노트북에 너무 크다.
  • 크레인당 2개의 vCPU.4 vCPU 가상 시스템에서 0.5 vCPU를 실행하도록 설정합니다.
  • 서버당 4GB, 호스트당 2GB.1GB를 설정합니다.--memory_limit_hard_bytes를 85%로 설정-default_memory_limit_to_ram_ratio=0.85
  • 다음은 내 설정입니다.
    helm install yugabyte yugabytedb/yugabyte --namespace franck-yb --set resource.master.requests.cpu=0.5,resource.master.requests.memory=1Gi,storage.master.count=1,storage.master.size=2Gi,resource.tserver.requests.cpu=0.5,resource.tserver.requests.memory=1Gi,storage.tserver.count=1,storage.tserver.size=2Gi,replicas.master=3,replicas.tserver=3,storage.ephemeral=true
    
    나는 여기에서 storage.ephemeral=true를 정의했는데 이것은 일반 데이터베이스에 필요한 것이 아닐 수도 있다.그러나 우선, 이것은 내 노트북의 실험실로 VirtualBox 가상 컴퓨터에서 실행되고 있으며, 나는 그것을 스냅샷으로 찍을 수 있다.복제된 데이터베이스 (복제 인자 3) 를 사용하고 세 노드 중 하나를 잃어버릴 수 있습니다. 저장소를 포함합니다.복사본이 다른 노드에서 채워지기 때문에 데이터 분실이 없는 새 노드가 추가되었습니다.
    더 적은 수의 서버를 복제하지 않고 오래 보관하려면 replicas.master=1,replicas.tserver=1,storage.ephemeral=false를 사용하여 마지막 세 가지 설정을 변경하면 됩니다.
    리소스가 부족한 경우 몇 초 정도 걸릴 수 있습니다.
    C:\Users\Franck> kubectl --namespace franck-yb get pods
    
    NAME           READY   STATUS              RESTARTS   AGE
    yb-master-0    0/1     ContainerCreating   0          1m1s
    yb-master-1    0/1     ContainerCreating   0          1m1s
    yb-master-2    0/1     ContainerCreating   0          1m
    yb-tserver-0   0/1     ContainerCreating   0          1m1s
    yb-tserver-1   0/1     ContainerCreating   0          1m1s
    yb-tserver-2   0/1     ContainerCreating   0          1m1s
    
    상태 집합은 순서(호스트가 Tserver 이전에 시작)와 네트워크 주소를 책임진다(이 주소를 만들기 전에 반드시 알아야 한다).
    ssh를 통해 VM에 연결하여 실행 중인 내용을 확인할 수 있습니다.
    minikube ssh
    stty columns 120
    
    (tty열 설정이 올바르지 않음),kubernetes의 웹 컨트롤러 minikube dashboard 를 통해 모든 열에 접근하고 정확한 이름 공간을 선택할 수 있습니다.
    이 모든 것을 정리하고 싶을 때 다음과 같이 할 수 있다.
    helm delete yugabyte -n franck-yb
    minikube delete
    
    마지막 명령은 VirtualBox 가상 시스템까지 제거합니다.
    하지만 정리하기 전에 분산 데이터베이스에 연결할 수 있는지 확인합니다.
    kubectl exec --namespace franck-yb -it yb-tserver-0 -- /home/yugabyte/bin/ysqlsh -h yb-tserver-0.yb-tservers.franck-yb
    
    이것은 kubernetes container exec를 통해 YugabyteDB SQL API에서 YSQLSH 명령줄을 실행합니다.
    그러나 이 SQL API는 PostgreSQL과 완전히 호환되기 때문에, 나는 한 테이블 서버에서 YSQL 포트를 전송할 수 있다.
    kubectl --namespace franck-yb port-forward svc/yb-tservers 5433:5433
    
    이것으로 psql, DBeaver, 또는 PostgreSQL 클라이언트에 연결할 수 있습니다. 왜냐하면 YugabyteDB는postgres와 완전히 호환되기 때문입니다.
    C:\Users\fpa> psql -h localhost -p 5433 -U yugabyte
    
    psql (12.6, server 11.2-YB-2.5.3.1-b0)
    Type "help" for help.
    
    yugabyte=# create table demo ( k int primary key, v int ) split into 3 tablets;
    CREATE TABLE
    yugabyte=# insert into demo select generate_series,42 from generate_series(1,1000);
    INSERT 0 1000
    yugabyte=# select count(*) from demo;
     count
    ------------
      1000
    (1 row)
    
    이 버전을 보세요. 이 YugabyteDB 버전 2.5.3은 PostgreSQL 11.2와 호환됩니다. 저는 프레젠테이션 테이블을 만들었는데 3개의 태블릿으로 나뉘어 1000줄이 있습니다.
    yb master ui 서비스가 공개된 웹 컨트롤러에서 태블릿PC를 볼 수 있습니다.다음은 모든 공개 서비스입니다.
    C:\Users\Franck> kubectl --namespace franck-yb get services
    
    NAME                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                      AGE
    yb-master-ui         LoadBalancer   10.105.151.9     <pending>     7000:31447/TCP                                                               7m42s
    yb-masters           ClusterIP      None             <none>        7000/TCP,7100/TCP                                                            7m42s
    yb-tserver-service   LoadBalancer   10.100.217.206   <pending>     6379:31842/TCP,9042:32404/TCP,5433:31626/TCP                                 7m42s
    yb-tservers          ClusterIP      None             <none>        9000/TCP,12000/TCP,11000/TCP,13000/TCP,9100/TCP,6379/TCP,9042/TCP,5433/TCP   7m42s
    
    Minikube에는 외부 IP가 없지만 터널을 통해 UI를 쉽게 전송할 수 있습니다(호스트 포트 7000).
    kubectl --namespace franck-yb port-forward svc/yb-master-ui 7000:7000
    
    그리고 저는 http://localhost:7000에서 YugabyteDB GUI를 방문할 수 있습니다. 이것이 바로 아래 화면 캡처의 출처입니다.

    축소/확대


    Kubenetes의 가장 큰 장점은 한 노드를 죽일 수 있고 다른 노드를 만들 수 있으며 집단에서 축소하고 확대할 수 있다는 것이다.이것은 무상태 응용 프로그램에서 가능하지만 데이터베이스에서도 가능하다. 왜냐하면 공유가 없기 때문이다.그리고 복제 계수가 1보다 높기 때문에 여전히 사용할 수 있다.
    3개의 노드가 모두 시작되었습니다.

    내 시계는 세 개의 평판으로 나누어져 있는데 각 노드에는 지도자가 있고 다른 두 노드에는 추종자가 있다.

    태블릿 서버의 상태 설정을 2노드로 줄였습니다.
    C:\Users\Franck> kubectl scale -n franck-yb statefulset yb-tserver --replicas=2
    statefulset.apps/yb-tserver scaled
    
    bb-tserver-2는 당분간 사용할 수 없다고 여겨져 3대의 태블릿PC가 있지만 리더가 없다.

    bb-tserver-0의 추종자가 이 태블릿PC의 새로운 리더로 뽑혔습니다.

    그때가 되어도 나의 시범표는 여전히 완전히 쓸 수 있다.나머지 노드마다 데이터의 완전한 복사본이 있습니다.
    1분 후 이 노드는 사망한 것으로 간주됩니다.

    이제 노드를 3개로 다시 확장합니다.
    C:\Users\Franck> kubectl scale -n franck-yb statefulset yb-tserver --replicas=3
    statefulset.apps/yb-tserver scaled
    
    노드가 감지되고 재균형이 시작됩니다.

    태블릿PC 리더의 분포는 곧 3개의 크레인으로 재균형이 잡혔다.

    1000줄에 대해서 말하자면, 이것은 당연히 매우 빠르다.

    내가 정의한 미니 kube 가상 컴퓨터는 4개의 vCPU만 있기 때문에, yb 서버를 추가pod로 확장할 수 없습니다.그러나 이것은 실험실이라는 것을 기억해 주십시오. 나는yb대사를 죽이고 다른 크레인을 위해 공간을 남길 수 있습니다.
    kubectl scale -n franck-yb statefulset yb-master --replicas=2
    kubectl scale -n franck-yb statefulset yb-tserver --replicas=4
    
    호스트 장애가 감지되었지만 RF3로 인해 시스템을 계속 사용할 수 있습니다.

    새로운 노드는 다음과 같은 주요 관심사를 접수했습니다.

    이 새로운 노드에서 지도자를 선출할 필요가 없다.

    물론 새 테이블을 만들면 모든 노드의 선도와 분리됩니다.
    yugabyte=# create table demo2 as select * from demo;
    SELECT 1000
    

    이 테이블에는 32개의 태블릿PC가 있는데, 왜냐하면 나는 SPLIT-to 자구를 지정하지 않았기 때문이다. 이곳의 기본값은 서버당 8개 (--ysql_num_shards_per_tserver=8 이다.

    짧은 저장?


    내가 비지구적 저장소를 사용하는 데는 두 가지 이유가 있다.먼저, Minikube는 진정한 Kubernetes 클러스터에 비해 한계가 있습니다. 영구 볼륨이 있는 다중 노드 RF3 클러스터를 어떻게 실행하고 쉽게 위아래로 확장하는지 잘 모르겠습니다.그러나 주요 원인은 VirtualBox에서 실행되는 실험실이기 때문에 나는 이 VBox 단계에서 상태를 보존할 수 있다.
    VirtualBox VM을 중지하고 CD + 메모리 상태를 유지한 다음 다시 시작하는 방법은 다음과 같습니다.
    C:\Users\fpa> "C:\Program Files\Oracle\VirtualBox\VBoxManage" controlvm minikube savestate
    0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
    
    C:\Users\fpa> "C:\Program Files\Oracle\VirtualBox\VBoxManage" startvm minikube --type headless
    Waiting for VM "minikube" to power on...
    VM "minikube" has been successfully started.
    
    여기에 데이터가 분실되지 않았습니다. 제 프레젠테이션표는 여전히 거기에 있습니다. 왜냐하면 Kubernetes의 측면에서 볼 때 POD는 멈추지 않았고 가상 기기 모니터링 프로그램에 의해 정지되었을 뿐입니다.
    요컨대, 너는 쌍핵 노트북에서 놀 수 있고,kubernetes 크레인에서 분포식 데이터베이스를 실행할 수 있으며, 위아래로 신축할 수 있다.언제든지 저를 지켜보고 트위터에 올려주세요.마이크로 서비스와 무상태 용기의 데이터베이스가 현재 핫이슈다.

    프랭크 파초트

    주말에 나는 노트북에서 놀았는데, 다음은 블로그였다. blog.dbi-services.com/k8s-on-windows…. 'Hello World' 의 예가 아니다.진정한 RDBMS 컨테이너 확장
    2021년 4월 12일 오후 13:09

    좋은 웹페이지 즐겨찾기