Minikube로 Kubernetes에서 다구역 바퀴벌레 집단 시뮬레이션

Minikube는 Kubernetes를 로컬로 처리할 수 있는 좋은 플랫폼입니다.이것은 사용자가 자신의 컴퓨터에서 응용 프로그램을 개발하고 테스트한 후에 그것을 실시간 집단에 배치할 수 있도록 합니다.
다음은 Minikube를 사용하여 Kubernetes에서 9노드 바퀴벌레 데이터베이스 집단을 로컬로 만드는 방법에 대한 설명입니다.이것은 배치와 매우 비슷하니 이것도 보십시오.
다음은 고층 구조다.작성:
  • 3 Services 유형 NodePort, 각 구역마다 하나이기 때문에 우리는 특정 구역에 접근하는 것을 시뮬레이션할 수 있다.
  • 1 Service 유형 ClusterIP, 모든 기중기 상호 통신 허용
  • 9 Pods 및 9 PersistentVolumeClaims 대상:
  • Pod 이름
    지역
    구획
    roach-seattle-1
    미국 서부 2
    하나
    roach-seattle-2
    미국 서부 2
    b
    roach-seattle-3
    미국 서부 2
    c
    roach-newyork-1
    미국 동부 4
    하나
    로기 - 뉴욕 - 2
    미국 동부 4
    b
    roach-newyork-3
    미국 동부 4
    c
    roach-london-1
    eu-west2
    하나
    로기 - 런던 - 2
    eu-west2
    b
    로기 - 런던 - 3
    eu-west2
    c
  • 2 Jobs 대상: 하나는 그룹을 초기화하는 데 사용되고, 다른 하나는 SQL 조회를 실행하는 데 사용됩니다.
  • 3 NetworkChaos objects, 아날로그 영역 간의 지연.
  • 설치 프로그램


    Minikube 리소스


    Minikube 가상 머신을 위한 충분한 자원을 설정하여 집단과 그 위에서 실행되는 작업 부하를 운행하는 것이 중요하다.사람마다 환경이 다르기 때문에 이것은 참고로 제공할 뿐이다.
    노트북에서 Minikube에 8개의 CPU와 24GB RAM을 할당했습니다.비슷한 개인 자료를 확보하기;기본 CPU 2개로는 클러스터를 완벽하게 실행할 수 없습니다.
    minikube config set cpus 8
    minikube config set memory 24000
    minikube config set driver hyperkit
    minikube delete
    
    구성 저장 확인
    $ minikube config view
    - cpus: 8
    - driver: hyperkit
    - memory: 24000
    
    좋습니다. 새 기본값으로 Minikube를 시작할 수 있습니다.
    $ minikube start
    😄  minikube v1.14.0 on Darwin 10.15.7
    ✨  Using the hyperkit driver based on user configuration
    👍  Starting control plane node minikube in cluster minikube
    🔥  Creating hyperkit VM (CPUs=8, Memory=24000MB, Disk=20000MB) ...
    🐳  Preparing Kubernetes v1.19.2 on Docker 19.03.12 ...
    🔎  Verifying Kubernetes components...
    🌟  Enabled addons: storage-provisioner, default-storageclass
    🏄  Done! kubectl is now configured to use "minikube" by default
    
    Minikube 및 kubectl이 올바르게 구성되었는지 확인
    $ minikube status
    minikube
    type: Control Plane
    host: Running
    kubelet: Running
    apiserver: Running
    kubeconfig: Configured
    
    $ kubectl cluster-info
    Kubernetes master is running at https://192.168.64.3:8443
    KubeDNS is running at https://192.168.64.3:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    
    위의 출력을 보면 나의 Minikube 집단의 주소는 192.168.64.3이다.나중에 관리 UI를 열고 SQL 클라이언트를 CockroachDB 클러스터에 연결하는 데 도움이 됩니다.
    참고: Kubernetes 정의 파일은 my Gist repository의 Github에 있습니다.우리는 잠시 후에 환매 협의를 사용할 것이다.
    첫 번째 단계는 모든 노드가 서로 통신할 수 있도록 NodePort 서비스 대상을 만드는 것입니다.
    다음은 지역 us-west2의 서비스 대상 정의입니다.nodePort 매개 변수를 주의하십시오. 외부 공개 포트에서 사용합니다.
    ---
    # us-west2
    apiVersion: v1
    kind: Service
    metadata:
      name: us-west2
      labels:
        app: cockroachdb
    spec:
      type: NodePort
      ports:
        # SQL client port
        - name: grpc
          port: 26257
          targetPort: 26257
          nodePort: 31257
        # Admin UI
        - name: http
          port: 8080
          targetPort: 8080
          nodePort: 31080
      selector:
        app: cockroachdb
        region: us-west2
    
    노드 내 서비스보다 낮습니다.
    ---
    # intra-node service
    apiVersion: v1
    kind: Service
    metadata:
      name: cockroachdb
      labels:
        app: cockroachdb
      annotations:
        service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
        prometheus.io/scrape: "true"
        prometheus.io/path: "_status/vars"
        prometheus.io/port: "8080"
    spec:
      ports:
        - port: 26257
          targetPort: 26257
          name: grpc
        - port: 8080
          targetPort: 8080
          name: http
      publishNotReadyAddresses: true
      clusterIP: None
      selector:
        app: cockroachdb
    
    그리고 POD와 PVCs 객체가 필요합니다.
    다음은 Pod roach-seattle-1 및 PVC 객체에 대한 정의입니다.hostnamesubdomain, 그리고 시작 대상에 사용되는 command, 특히 --locality 로고를 검사합니다.
    # roach-seattle-1
    apiVersion: v1
    kind: Pod
    metadata:
      name: roach-seattle-1
      labels:
        app: cockroachdb
        region: us-west2
    spec:
      hostname: roach-seattle-1
      subdomain: cockroachdb
      containers:
        - name: roach-seattle-1
          image: cockroachdb/cockroach:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 26257
              name: grpc
            - containerPort: 8080
              name: http
          livenessProbe:
            httpGet:
              path: "/health"
              port: http
            initialDelaySeconds: 30
            periodSeconds: 5
          readinessProbe:
            httpGet:
              path: "/health?ready=1"
              port: http
            initialDelaySeconds: 10
            periodSeconds: 5
            failureThreshold: 2
          volumeMounts:
            - name: datadir
              mountPath: /cockroach/cockroach-data
          env:
            - name: COCKROACH_CHANNEL
              value: kubernetes-insecure
            - name: GOMAXPROCS
              valueFrom:
                resourceFieldRef:
                  resource: limits.cpu
                  divisor: "1"
            - name: MEMORY_LIMIT_MIB
              valueFrom:
                resourceFieldRef:
                  resource: limits.memory
                  divisor: "1Mi"
          command:
            - "/bin/bash"
            - "-ecx"
            - exec
              /cockroach/cockroach
              start
              --logtostderr
              --insecure
              --advertise-host $(hostname -f)
              --http-addr 0.0.0.0
              --join roach-seattle-1.cockroachdb,roach-newyork-1.cockroachdb,roach-london-1.cockroachdb
              --cache $(expr $MEMORY_LIMIT_MIB / 4)MiB
              --max-sql-memory $(expr $MEMORY_LIMIT_MIB / 4)MiB
              --locality=region=us-west2,zone=a
      terminationGracePeriodSeconds: 60
      volumes:
        - name: datadir
          persistentVolumeClaim:
            claimName: roach-seattle-1-data
    
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: roach-seattle-1-data
      labels:
        app: cockroachdb
    spec:
      accessModes:
        - ReadWriteMany
      volumeMode: Filesystem
      storageClassName: standard
      resources:
        requests:
          storage: 1Gi
    
    마지막으로 우리는 업무 상대가 있다.
    첫 번째 작업 대상 시작 그룹
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: cluster-init
      labels:
        app: cockroachdb
    spec:
      template:
        spec:
          containers:
          - name: cluster-init
            image: cockroachdb/cockroach:latest
            imagePullPolicy: IfNotPresent
            command:
              - "/cockroach/cockroach"
              - "init"
              - "--insecure"
              - "--host=roach-seattle-1.cockroachdb"
          restartPolicy: OnFailure
    
    두 번째 작업 객체는 SQL 문을 실행하여 지리적 좌표를 설정하여 맵이 어디에 배치되는지 알 수 있도록 합니다(기업 라이센스가 있는 경우).
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: cluster-sql-init
      labels:
        app: cockroachdb
    spec:
      template:
        spec:
          containers:
          - name: cluster-sql-init
            image: cockroachdb/cockroach:latest
            imagePullPolicy: IfNotPresent
            command:
              - "/cockroach/cockroach"
              - "sql"
              - "--insecure"
              - "--url"
              - "postgresql://roach-seattle-1.cockroachdb:26257/defaultdb?sslmode=disable"
              - "-e"
              - "UPSERT into system.locations VALUES ('region', 'us-east4', 37.478397, -76.453077), ('region', 'us-west2', 43.804133, -120.554201), ('region', 'eu-west2', 51.5073509, -0.1277583);"
          restartPolicy: OnFailure
    
    현재 우리는 필요한 대상을 이해하고 완전한yaml 정의 파일을 응용하여 집단을 만들 수 있습니다
    kubectl apply -f https://gist.githubusercontent.com/fabiog1901/fc09e6fd98d0419b4528ca1c9553d478/raw/crdb-k8s-cluster.yaml
    
    몇 분 후, 집단은 가동하고 운행해야 하며, 기중기가 준비되어 있고 운행 상태인지 확인해야 한다.
    $ kubectl get all --show-labels
    NAME                         READY   STATUS      RESTARTS   AGE    LABELS
    pod/cluster-init-665lj       0/1     Completed   0          118m   controller-uid=ca1a2d5d-38db-48b6-834d-a5ffdbcb9ef8,job-name=cluster-init
    pod/cluster-sql-init-7s69s   0/1     Completed   2          118m   controller-uid=960f70fb-710d-4da5-89b5-b7af33cf913f,job-name=cluster-sql-init
    pod/roach-london-1           1/1     Running     0          118m   app=cockroachdb,region=eu-west2
    pod/roach-london-2           1/1     Running     0          118m   app=cockroachdb,region=eu-west2
    pod/roach-london-3           1/1     Running     0          118m   app=cockroachdb,region=eu-west2
    pod/roach-newyork-1          1/1     Running     0          118m   app=cockroachdb,region=us-east4
    pod/roach-newyork-2          1/1     Running     0          118m   app=cockroachdb,region=us-east4
    pod/roach-newyork-3          1/1     Running     0          118m   app=cockroachdb,region=us-east4
    pod/roach-seattle-1          1/1     Running     0          118m   app=cockroachdb,region=us-west2
    pod/roach-seattle-2          1/1     Running     0          118m   app=cockroachdb,region=us-west2
    pod/roach-seattle-3          1/1     Running     0          118m   app=cockroachdb,region=us-west2
    
    NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                          AGE    LABELS
    service/cockroachdb   ClusterIP   None             <none>        26257/TCP,8080/TCP               118m   app=cockroachdb
    service/kubernetes    ClusterIP   10.96.0.1        <none>        443/TCP                          38d    component=apiserver,provider=kubernetes
    service/eu-west2    NodePort    10.103.129.120   <none>        26257:31259/TCP,8080:31280/TCP   118m   app=cockroachdb
    service/us-east4    NodePort    10.97.225.172    <none>        26257:31258/TCP,8080:31180/TCP   118m   app=cockroachdb
    service/us-west2    NodePort    10.109.153.233   <none>        26257:31257/TCP,8080:31080/TCP   118m   app=cockroachdb
    
    NAME                         COMPLETIONS   DURATION   AGE    LABELS
    job.batch/cluster-init       1/1           32s        118m   app=cockroachdb
    job.batch/cluster-sql-init   1/1           47s        118m   app=cockroachdb
    

    지연 시뮬레이션


    아날로그 영역 사이의 지연.우리는 지역 지연을 다음과 같이 설정합니다.
  • 미국 서부 2<=> 미국 동부 4:60ms
  • us-east4<=>eu-west2:120ms
  • us-west2<=>eu-west2:180ms
  • 우선 설치해야 할 NetworkChaos 대상인 특수한 대상을 사용할 것입니다.
    로컬 설치 NetworkChaos 대상, 검사 these instructions for Minikube.
    다음은 us-west2us-east4 노드 사이의 지연을 설정하는 NetworkChaos 객체의 정의입니다.
    ---
    apiVersion: chaos-mesh.org/v1alpha1
    kind: NetworkChaos
    metadata:
      name: delay-uswest-useast
      labels:
        app: cockroachdb
    spec:
      action: delay # chaos action
      mode: all
      selector:
        pods:
          default: # namespace of the target pods
            - roach-seattle-1
            - roach-seattle-2
            - roach-seattle-3
      delay:
        latency: "60ms"
      direction: to
      target:
        selector:
          pods:
            default: # namespace of the target pods
              - roach-newyork-1
              - roach-newyork-2
              - roach-newyork-3
        mode: all
    
    NetworkChaos 객체 만들기
    kubectl apply -f https://gist.githubusercontent.com/fabiog1901/fc09e6fd98d0419b4528ca1c9553d478/raw/chaos.yaml
    
    NetworkChaos 객체가 시작되었는지 확인
    $ kubectl get networkchaos.chaos-mesh.org                                                                                                                                        
    NAME                  AGE
    delay-useast-euwest   78s
    delay-uswest-euwest   78s
    delay-uswest-useast   78s
    
    Minikube에서 만든 서비스의 URL을 검색합니다.
    $ minikube service us-west2 --url
    http://192.168.64.3:31257
    http://192.168.64.3:31080
    
    $ minikube service us-east4 --url
    http://192.168.64.3:31258
    http://192.168.64.3:31180
    
    $ minikube service eu-west2 --url
    http://192.168.64.3:31259
    http://192.168.64.3:31280
    
    예상대로 서비스당 2개의 포트를 반환합니다. 하나는 UI 관리용, 다른 하나는 SQL 클라이언트 액세스용입니다.
    브라우저에서 31080, 31180 또는 31280 포트의 URL을 사용하여 관리 UI를 엽니다.나로서는 http://192.168.64.3:31080이다.네트워크 지연 페이지를 확인하여 지역 간의 지연이 표시되지만 지역 내의 지연이 아니라는 것을 확인하십시오.

    예상대로 아주 좋아요!
    SQL 셸을 엽니다.내장된 SQL 클라이언트를 포함하는 download the cockroachdb binary을 사용하거나 CockroachDB가 PostgreSQL wire 프로토콜에 부합하기 때문에 psql 클라이언트를 사용할 수 있습니다.
    # ----------------------------
    # ports mapping:
    # 31257: us-west2
    # 31258: us-east4
    # 31259: eu-west2
    # ----------------------------
    
    # use cockroach sql
    cockroach sql --insecure --url "postgresql://192.168.64.3:31257/defaultdb?sslmode=disable"
    
    # or use psql
    psql -h 192.168.64.3 -p 31257 -U root defaultdb
    
    아래 설명된 일부 기능(예: 지도 보기)을 잠그려면 기업 허가증이 필요합니다.request a Trial license을 선택하거나 라이센스 등록을 건너뛰거나 배포에 성공할 수 있습니다.
    라이센스 등록 입력 (있는 경우)
    SET CLUSTER SETTING cluster.organization = "ABC Corp";
    SET CLUSTER SETTING enterprise.license = "xxxx=yyyy-zzzz";
    
    포트 매핑에 따라 올바른 영역에 있는지 확인합니다.
    SHOW LOCALITY;
    
             locality
    --------------------------
      region=us-west2,zone=b
    (1 row)
    
    Time: 759µs
    
    노드 사이의 지연을 볼 수 있는지 확인하십시오.이 예에서 우리는 지역 eu-west2에 연결하고 용기 안에서 시애틀 노드 중 하나로 데이터베이스에 시작하는 SQL 연결을 사용합니다.그리고 우리는 간단한 조회와 검증 지연을 보냈다.
    런던에 연결된 노드
    kubectl exec -it roach-london-1 -- bash
    
    런던 용기에 이어 시애틀 노드에 연결된 바퀴벌레 데이터베이스 집단.
    cockroach sql --insecure --url "postgresql://roach-seattle-1.cockroachdb:26257/defaultdb?sslmode=disable"
    
    SQL 프롬프트에서 Seattle 노드에 위치를 알려주고 실행에 필요한 Time을 확인하도록 합니다.조회가 매우 간단하기 때문에 시간은 기본적으로 지연을 반영한다.
    SHOW LOCALITY;
    
             locality
    --------------------------
      region=us-west2,zone=a
    (1 row)
    
    Time: 181.064515ms
    
    예상한 바와 같이, 우리는 약 180ms의 지연을 얻었다. 이것은 우리가 NetworkChaos 대상을 사용하여 설정한 지연이다.다른 노드에 대해서도 같은 연습을 수행할 수 있습니다.
    축하집단은 이미 당신의 개발 업무를 위해 준비를 마쳤습니다!

    정리하다


    배치를 삭제하려면 배치 정의 파일을 삭제하면 됩니다.
    kubectl delete -f https://gist.githubusercontent.com/fabiog1901/fc09e6fd98d0419b4528ca1c9553d478/raw/crdb-k8s-cluster.yaml
    
    kubectl delete -f https://gist.githubusercontent.com/fabiog1901/fc09e6fd98d0419b4528ca1c9553d478/raw/chaos.yaml
    
    NetworkChaos 객체를 제거하려면 these instructions을 따릅니다.

    공구서류


    CockroachDB Docs
    CockroachDB on Kubernetes
    Minikube
    NetworkChaos
    Network latency simulation with NetworkChaos

    좋은 웹페이지 즐겨찾기