Minikube로 Kubernetes에서 다구역 바퀴벌레 집단 시뮬레이션
32699 단어 kubernetestestingtutorialcockroachdb
다음은 Minikube를 사용하여 Kubernetes에서 9노드 바퀴벌레 데이터베이스 집단을 로컬로 만드는 방법에 대한 설명입니다.이것은 배치와 매우 비슷하니 이것도 보십시오.
다음은 고층 구조다.작성:
Services
유형 NodePort
, 각 구역마다 하나이기 때문에 우리는 특정 구역에 접근하는 것을 시뮬레이션할 수 있다.Service
유형 ClusterIP
, 모든 기중기 상호 통신 허용 Pods
및 9 PersistentVolumeClaims
대상: 지역
구획
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
Jobs
대상: 하나는 그룹을 초기화하는 데 사용되고, 다른 하나는 SQL 조회를 실행하는 데 사용됩니다.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 객체에 대한 정의입니다.hostname
과 subdomain
, 그리고 시작 대상에 사용되는 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
지연 시뮬레이션
아날로그 영역 사이의 지연.우리는 지역 지연을 다음과 같이 설정합니다.
NetworkChaos
대상인 특수한 대상을 사용할 것입니다.로컬 설치
NetworkChaos
대상, 검사 these instructions for Minikube.다음은
us-west2
과 us-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
Reference
이 문제에 관하여(Minikube로 Kubernetes에서 다구역 바퀴벌레 집단 시뮬레이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cockroachlabs/simulating-a-multi-region-cockroachdb-cluster-on-kubernetes-with-minikube-4jd9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)