혼돈 격자 동작: 혼돈 공정을 CI에 통합
Chaos Mesh는 구름 원생 혼돈 테스트 플랫폼으로 Kubernetes 환경에서의 혼돈을 조율하는 데 사용된다.풍부한 고장 주입 유형과 사용하기 쉬운 대시보드로 지역사회에서 인기를 끌고 있지만 혼돈 격자를 끝까지 테스트나 연속 통합(CI) 과정에 사용하기는 어렵다.따라서 발표 전에는 시스템 개발 과정에서 도입된 문제점을 발견할 수 없다.
본고에서 저는 혼돈 격자 조작을 어떻게 사용하는지 공유할 것입니다. 이것은 GitHub 조작으로 혼돈 격자를 CI에 집적하는 과정에서 사용됩니다.
혼돈 격자 동작은 GitHub market에서 사용할 수 있고 원본 코드는 GitHub에서 사용할 수 있다.
혼돈 격자 작용의 디자인
GitHub Action는 GitHub 본체에서 지원하는 CI/CD 기능으로 이를 통해 우리는 GitHub 저장소에서 자동화되고 맞춤형 소프트웨어 개발 작업 흐름을 쉽게 구축할 수 있다.
GitHub 조작과 결합하면 혼돈 격자는 시스템의 일상적인 개발과 테스트에 더욱 쉽게 통합되어 GitHub에 제출된 모든 코드에 버그가 없고 기존 코드를 손상시키지 않도록 확보할 수 있다.다음 그림은 CI 워크플로우에 통합된 혼돈 메쉬 동작을 보여 줍니다.
GitHub 워크플로우에서 혼돈 메쉬 동작 사용하기
chaos-mesh-action Github 워크플로우에 적용됩니다.GitHub 워크플로우는 GitHub 프로젝트를 구축, 테스트, 패키징, 게시 또는 배포하기 위해 저장소에 설정할 수 있는 자동화된 프로세스입니다.CI에 혼돈 메쉬를 통합하려면 다음과 같이 하십시오.
설계 워크플로우
워크플로우를 설계하기 전에 다음 사항을 고려해야 합니다.
워크플로우 작성
워크플로우를 설계한 다음 워크플로우를 작성합니다.
작업 흐름은 본질적으로 순서에 따라 자동으로 실행되는 작업의 설정이다.작업은 단일 파일에서 구성됩니다.더 잘 설명하기 위해서 우리는 스크립트를 다음과 같이 다른 작업 그룹으로 나눈다.
워크플로우 이름과 트리거 규칙을 설정합니다.
이 작업은 워크플로우를'혼돈'이라고 명명합니다. 코드가 주 지점으로 전송되거나 주 지점에 교차 요청을 하면 이 워크플로우를 터치합니다.
name: Chaos
on:
push:
branches:
- master
pull_request:
branches:
- master
CI 관련 환경을 설치합니다.
이 설정은 운영체제(Ubuntu)를 지정하고 helm/kind-action 를 사용하여 클래스 그룹을 만듭니다.그리고 집단에 대한 정보를 출력합니다.마지막으로 워크플로우 액세스를 위해 GitHub 저장소를 확인합니다.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Creating kind cluster
uses: helm/[email protected]
- name: Print cluster information
run: |
kubectl config view
kubectl cluster-info
kubectl get nodes
kubectl get pods -n kube-system
helm version
kubectl version
- uses: actions/checkout@v2
응용 프로그램을 배치하다.
우리의 예시에서 이 작업은 두 개의 Kubernetes 기중기를 만드는 프로그램을 배치했다.
- name: Deploy an application
run: |
kubectl apply -f https://raw.githubusercontent.com/chaos-mesh/apps/master/ping/busybox-statefulset.yaml
- name: Run chaos mesh action
uses: chaos-mesh/chaos-mesh-action@xiang/refine_script
env:
CFG_BASE64: YXBpVmVyc2lvbjogY2hhb3MtbWVzaC5vcmcvdjFhbHBoYTEKa2luZDogTmV0d29ya0NoYW9zCm1ldGFkYXRhOgogIG5hbWU6IG5ldHdvcmstZGVsYXkKICBuYW1lc3BhY2U6IGJ1c3lib3gKc3BlYzoKICBhY3Rpb246IGRlbGF5ICMgdGhlIHNwZWNpZmljIGNoYW9zIGFjdGlvbiB0byBpbmplY3QKICBtb2RlOiBhbGwKICBzZWxlY3RvcjoKICAgIHBvZHM6CiAgICAgIGJ1c3lib3g6CiAgICAgICAgLSBidXN5Ym94LTAKICBkZWxheToKICAgIGxhdGVuY3k6ICIxMG1zIgogIGR1cmF0aW9uOiAiNXMiCiAgc2NoZWR1bGVyOgogICAgY3JvbjogIkBldmVyeSAxMHMiCiAgZGlyZWN0aW9uOiB0bwogIHRhcmdldDoKICAgIHNlbGVjdG9yOgogICAgICBwb2RzOgogICAgICAgIGJ1c3lib3g6CiAgICAgICAgICAtIGJ1c3lib3gtMQogICAgbW9kZTogYWxsCg==
혼돈 격자 동작을 통해 혼돈 격자의 설치와 혼돈의 주입이 자동으로 완성된다.Base64가 나타내는 혼돈 구성을 가져오는 데 사용할 준비만 하면 됩니다.여기서 우리는 네트워크 지연 혼돈을 POD에 주입하기를 원하기 때문에 원시 혼돈 설정을 사용합니다. 아래와 같습니다. apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: network-delay
namespace: busybox
spec:
action: delay # the specific chaos action to inject
mode: all
selector:
pods:
busybox:
- busybox-0
delay:
latency: "10ms"
duration: "5s"
scheduler:
cron: "@every 10s"
direction: to
target:
selector:
pods:
busybox:
- busybox-1
mode: all
다음 명령을 사용하여 위의 혼돈 구성 파일에 대한 Base64 값을 얻을 수 있습니다. $ base64 chaos.yaml
시스템의 정확성을 검증하다.
이 작업에서 작업 흐름은 하나의Podping에서 다른Pod로 이동하고 네트워크 지연의 변화를 관찰한다.
- name: Verify
run: |
echo "do some verification"
kubectl exec busybox-0 -it -n busybox -- ping -c 30 busybox-1.busybox.busybox.svc
워크플로우 실행
현재 워크플로가 설정되어 있습니다. 메인 지점에 드래그 요청을 제출해서 트리거할 수 있습니다.워크플로가 완료되면 검증 작업은 다음과 같은 결과를 내보냅니다.
do some verification
Unable to use a TTY - input is not a terminal or the right kind of file
PING busybox-1.busybox.busybox.svc (10.244.0.6): 56 data bytes
64 bytes from 10.244.0.6: seq=0 ttl=63 time=0.069 ms
64 bytes from 10.244.0.6: seq=1 ttl=63 time=10.136 ms
64 bytes from 10.244.0.6: seq=2 ttl=63 time=10.192 ms
64 bytes from 10.244.0.6: seq=3 ttl=63 time=10.129 ms
64 bytes from 10.244.0.6: seq=4 ttl=63 time=10.120 ms
64 bytes from 10.244.0.6: seq=5 ttl=63 time=0.070 ms
64 bytes from 10.244.0.6: seq=6 ttl=63 time=0.073 ms
64 bytes from 10.244.0.6: seq=7 ttl=63 time=0.111 ms
64 bytes from 10.244.0.6: seq=8 ttl=63 time=0.070 ms
64 bytes from 10.244.0.6: seq=9 ttl=63 time=0.077 ms
……
출력은 일련의 10밀리초의 일반적인 지연을 나타내며, 매 지연은 약 5초 지속된다.이것은 우리가 혼돈 격자 동작을 주입한 혼돈 설정과 일치한다.현재 상태 및 다음 단계
현재 우리는 혼돈의 격자 작용을 TiDB Operator 프로젝트에 응용했다.작업 흐름에 Pod 혼돈을 주입하여 작업자가 지정한 실례의 리셋 기능을 검증합니다.tidb 운영자의 POD가 주입된 고장으로 무작위로 삭제될 때 정상적으로 작동할 수 있도록 하기 위해서입니다.자세한 내용은 TiDB Operator page 를 참조하십시오.
앞으로 TiDB와 관련 구성 요소의 안정성을 확보하기 위해 혼돈의 격자 작용을 더 많은 테스트에 적용할 계획입니다.혼돈 격자 동작을 사용하여 자신의 작업 흐름을 만드는 것을 환영합니다.
버그가 발견되거나 부족하다고 판단되면 언제든지 질문을 제출하고 요청(PR)을 열거나 #project-chaos-mesh slack 작업 영역의 CNCF 채널에서 가입하십시오.
Reference
이 문제에 관하여(혼돈 격자 동작: 혼돈 공정을 CI에 통합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wangxiangustc/chaos-mesh-action-integrate-chaos-engineering-into-your-ci-p58텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)