Sparrow를 사용하여 k8s 배포 검증

Sparrow은 @daily devops 작업을 자동화하는 훌륭한 도구입니다. 최근에 k8s 배포를 확인하기 위해 k8s-deployment-check라는 새 플러그인을 삭제했습니다. 약간의 Raku 코드로 k8s 배포를 포함한 전체 k8s 인프라를 효과적으로 테스트할 수 있습니다.


작동 방식을 보여주기 위해 샘플 nginx 배포를 만들어 보겠습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  # replicas: 1 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /var/www
          name: www-data
        env:
          - name: DEMO_GREETING
            value: "Hello from the environment"
          - name: DEMO_FAREWELL
            value: "Such a sweet sorrow"
      volumes:
      - name: www-data
        persistentVolumeClaim:
          claimName: nginx-example


이 예에서는 로컬 폴더가 /var/www로 마운트된 간단한 nginx 애플리케이션을 실행하고 www-data 볼륨 전체에서 데이터를 사용합니다.

k8s apply -f nginx.yaml
deployment.apps/nginx-deployment created



이제 배포가 시작되어 실행 중이면 Raku를 사용하여 확인하겠습니다.
tomty --edit verify
#!raku

task-run "chk-dpl", "k8s-deployment-check", %(
  name => "nginx-deployment",
  namespace => "melezhik-sandbox",
  volume-mounts => %(
    www-data => "/var/www"
  ),
);

tomty verify
[repository] :: index updated from file:///root/repo/api/v1/index
[chk-dpl] :: >>> verify deployment. name=nginx-deployment,namespace=melezhik-sandbox,container=nginx
[chk-dpl] :: [env_start]
[chk-dpl] :: [DEMO_GREETING=Hello from the environment]
[chk-dpl] :: [DEMO_FAREWELL=Such a sweet sorrow]
[chk-dpl] :: [env_end]
[chk-dpl] :: [volume_mounts_start]
[chk-dpl] :: [www-data /var/www]
[chk-dpl] :: [volume_mounts_end]
[chk-dpl] :: ==================================================================
[task check] >>> check volume mounts
[task check] stdout match (r) <[www-data /var/www]> True


우리가 볼 수 있듯이 Sparrow는 다음을 성공적으로 확인했습니다.
  • k8s 배포 리소스가 존재함
  • 볼륨www-data/var/www 폴더
  • 로 마운트되어 있습니다.

    환경 변수 검사도 추가하여 시나리오를 약간 변경할 수 있습니다.
    tomty --edit verify
    task-run "chk-dpl", "k8s-deployment-check", %(
      name => "nginx-deployment",
      namespace => "melezhik-sandbox",
      volume-mounts => %(
        www-data => "/var/www"
      ),
      env => {
        DEMO_GREETING => "Hello from the environment",
        DEMO_FAREWELL => "Such a sweet sorrow"
      },
    );
    


    이제 다음을 실행합니다.
    tomty verify
    [repository] :: index updated from file:///root/repo/api/v1/index
    [chk-dpl] :: >>> verify deployment. name=nginx-deployment,namespace=melezhik-sandbox,container=nginx
    [chk-dpl] :: [env_start]
    [chk-dpl] :: [DEMO_GREETING=Hello from the environment]
    [chk-dpl] :: [DEMO_FAREWELL=Such a sweet sorrow]
    [chk-dpl] :: [env_end]
    [chk-dpl] :: [volume_mounts_start]
    [chk-dpl] :: [www-data /var/www]
    [chk-dpl] :: [volume_mounts_end]
    [chk-dpl] :: ==================================================================
    [task check] >>> check env
    [task check] stdout match (r) <[DEMO_FAREWELL=Such a sweet sorrow]> True
    [task check] stdout match (r) <[DEMO_GREETING=Hello from the environment]> True
    [task check] >>> check volume mounts
    [task check] stdout match (r) <[www-data /var/www]> True
    



    결론



    Sparrowk8s-deployment-check 플러그인을 사용하면 간단한 Raku 코드를 작성하여 k8s 인프라를 테스트할 수 있습니다. 전체documentation는 SparrowHub 사이트에서 볼 수 있습니다.

    나중에 더 많은 기능을 추가할 예정입니다.

    내부적으로 Sparrow는 Raku 정규식을 사용하여 리소스 구조를 확인하므로 더욱 정교한 검사를 작성할 수 있습니다.

    예를 들어, 컨테이너 실행 명령에 python 2nd 또는 3rd 버전이 있는지 확인하려면 다음과 같이 작성할 수 있습니다.

      command => "regexp: '/usr/bin/python' 2|3"
    


    계속 지켜봐 주시고 평소와 같이 귀하의 의견을 듣고 싶습니다.


    알렉세이

    좋은 웹페이지 즐겨찾기