혼돈 격자 동작: 혼돈 공정을 CI에 통합

본고는 최초로 2020년 9월 18일www.chaos-mesh.org에 발표되었다.

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에 혼돈 메쉬를 통합하려면 다음과 같이 하십시오.
  • 설계 작업 흐름.
  • 워크플로우를 작성합니다.
  • 워크플로우를 실행합니다.
  • 설계 워크플로우


    워크플로우를 설계하기 전에 다음 사항을 고려해야 합니다.
  • 이 워크플로에서 테스트할 기능은 무엇입니까?
  • 우리는 어떤 종류의 고장을 주입합니까?
  • 우리는 어떻게 시스템의 정확성을 검증합니까?
  • 예를 들어, 다음 단계를 포함하여 간단한 테스트 워크플로우를 설계합니다.
  • Kubernetes 클러스터에 두 개의 크레인을 생성합니다.
  • 다른 기중기에서 한 기중기를 피운다.
  • 혼돈 격자를 사용하여 네트워크 지연 혼돈을 주입하고 ping 명령이 영향을 받았는지 테스트한다.
  • 워크플로우 작성


    워크플로우를 설계한 다음 워크플로우를 작성합니다.
  • 테스트할 소프트웨어가 포함된 GitHub 저장소로 이동합니다.
  • 워크플로우 작성을 시작하려면 작업을 클릭하고 "새 워크플로우"단추를 누르십시오.

  • 작업 흐름은 본질적으로 순서에 따라 자동으로 실행되는 작업의 설정이다.작업은 단일 파일에서 구성됩니다.더 잘 설명하기 위해서 우리는 스크립트를 다음과 같이 다른 작업 그룹으로 나눈다.

  • 워크플로우 이름과 트리거 규칙을 설정합니다.
    이 작업은 워크플로우를'혼돈'이라고 명명합니다. 코드가 주 지점으로 전송되거나 주 지점에 교차 요청을 하면 이 워크플로우를 터치합니다.
  •     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 채널에서 가입하십시오.

    좋은 웹페이지 즐겨찾기