5.4.3.3. Operator 내에서 k8s Ansible 모듈 테스트


로컬에서 k8s Ansible 모듈을 사용하는 방법을 익히면 CR(사용자 정의 리소스)이 변경될 때 Operator 내부에서 동일한 Ansible 논리를 트리거할 수 있습니다. 이 예제에서는 Operator에서 조사하는 특정 Kubernetes 리소스에 Ansible 역할을 매핑합니다. 이 매핑은 watches.yaml 파일에서 수행됩니다.

5.4.3.3.1. Ansible 기반 Operator를 로컬에서 테스트

Ansible 워크플로를 로컬에서 테스트한 후 로컬에서 실행되는 Ansible 기반 Operator 내부의 논리를 테스트할 수 있습니다.

이를 위해 Operator 프로젝트의 최상위 디렉터리에서 operator-sdk run --local 명령을 사용합니다. 이 명령은 watches.yaml 파일에서 읽고 ~/.kube/config 파일을 사용하여 k8s Ansible 모듈처럼 Kubernetes 클러스터와 통신합니다.

절차

  1. run --local 명령은 watches.yaml 파일에서 읽기 때문에 Operator 작성자가 사용할 수 있는 옵션이 있습니다. 역할이 단독으로 남아 있는 경우(기본적으로 /opt/ansible/roles/<name>) Operator의 /opt/ansible/roles/ 디렉터리에 역할을 복사해야 합니다.

    이는 변경 사항이 현재 디렉터리에서 반영되지 않기 때문에 번거로울 수 있습니다. 대신 현재 디렉터리를 가리키도록 역할 필드를 변경하고 기존 행을 주석 처리합니다.

    - version: v1alpha1
      group: test1.example.com
      kind: Test1
      #  role: /opt/ansible/roles/Test1
      role: /home/user/test1-operator/Test1
    Copy to Clipboard Toggle word wrap
  2. CR(사용자 정의 리소스) Test1 에 대한 CRD(사용자 정의 리소스 정의) 및 적절한 RBAC(역할 기반 액세스 제어) 정의를 생성합니다. operator-sdk 명령은 deploy/ 디렉토리 내에서 이러한 파일을 자동으로 생성합니다.

    $ oc create -f deploy/crds/test1_v1alpha1_test1_crd.yaml
    Copy to Clipboard Toggle word wrap
    $ oc create -f deploy/service_account.yaml
    Copy to Clipboard Toggle word wrap
    $ oc create -f deploy/role.yaml
    Copy to Clipboard Toggle word wrap
    $ oc create -f deploy/role_binding.yaml
    Copy to Clipboard Toggle word wrap
  3. run --local 명령을 실행합니다.

    $ operator-sdk run --local
    Copy to Clipboard Toggle word wrap

    출력 예

    [...]
    INFO[0000] Starting to serve on 127.0.0.1:8888
    INFO[0000] Watching test1.example.com/v1alpha1, Test1, default
    Copy to Clipboard Toggle word wrap

  4. Operator에서 이벤트의 리소스 Test1 을 모니터링하므로 CR을 생성하면 실행할 Ansible 역할이 트리거됩니다. deploy/cr.yaml 파일을 확인합니다.

    apiVersion: "test1.example.com/v1alpha1"
    kind: "Test1"
    metadata:
      name: "example"
    Copy to Clipboard Toggle word wrap

    spec 필드가 설정되지 않았기 때문에 추가 변수 없이 Ansible이 호출됩니다. 다음 섹션에서는 CR에서 Ansible로 추가 변수를 전달하는 방법을 설명합니다. 따라서 Operator에 적절한 기본값을 설정하는 것이 중요합니다.

  5. 기본 변수 statepresent 로 설정하여 Test1 의 CR 인스턴스를 생성합니다.

    $ oc create -f deploy/cr.yaml
    Copy to Clipboard Toggle word wrap
  6. 네임스페이스 테스트가 생성되었는지 확인합니다.

    $ oc get namespace
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME          STATUS    AGE
    default       Active    28d
    kube-public   Active    28d
    kube-system   Active    28d
    test          Active    3s
    Copy to Clipboard Toggle word wrap

  7. deploy/cr.yaml 파일을 수정하여 state 필드를 absent 로 설정합니다.

    apiVersion: "test1.example.com/v1alpha1"
    kind: "Test1"
    metadata:
      name: "example"
    spec:
      state: "absent"
    Copy to Clipboard Toggle word wrap
  8. 변경 사항을 적용하고 네임스페이스가 삭제되었는지 확인합니다.

    $ oc apply -f deploy/cr.yaml
    Copy to Clipboard Toggle word wrap
    $ oc get namespace
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME          STATUS    AGE
    default       Active    28d
    kube-public   Active    28d
    kube-system   Active    28d
    Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat