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이다.네트워크 지연 페이지를 확인하여 지역 간의 지연이 표시되지만 지역 내의 지연이 아니라는 것을 확인하십시오.
![](https://s1.md5.ltd/image/c376d6d7ad2f161c459ee6cfa533bedd.png)
예상대로 아주 좋아요!
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.)