This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.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 클러스터와 통신합니다.
절차
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
- version: v1alpha1 group: test1.example.com kind: Test1 # role: /opt/ansible/roles/Test1 role: /home/user/test1-operator/Test1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CR(사용자 정의 리소스)
Test1
에 대한 CRD(사용자 정의 리소스 정의) 및 적절한 RBAC(역할 기반 액세스 제어) 정의를 생성합니다.operator-sdk
명령은deploy/
디렉토리 내에서 이러한 파일을 자동으로 생성합니다.oc create -f deploy/crds/test1_v1alpha1_test1_crd.yaml
$ oc create -f deploy/crds/test1_v1alpha1_test1_crd.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f deploy/service_account.yaml
$ oc create -f deploy/service_account.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f deploy/role.yaml
$ oc create -f deploy/role.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f deploy/role_binding.yaml
$ oc create -f deploy/role_binding.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow run --local
명령을 실행합니다.operator-sdk run --local
$ operator-sdk run --local
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
[...] INFO[0000] Starting to serve on 127.0.0.1:8888 INFO[0000] Watching test1.example.com/v1alpha1, Test1, default
[...] INFO[0000] Starting to serve on 127.0.0.1:8888 INFO[0000] Watching test1.example.com/v1alpha1, Test1, default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator에서 이벤트의 리소스
Test1
을 모니터링하므로 CR을 생성하면 실행할 Ansible 역할이 트리거됩니다.deploy/cr.yaml
파일을 확인합니다.apiVersion: "test1.example.com/v1alpha1" kind: "Test1" metadata: name: "example"
apiVersion: "test1.example.com/v1alpha1" kind: "Test1" metadata: name: "example"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow spec
필드가 설정되지 않았기 때문에 추가 변수 없이 Ansible이 호출됩니다. 다음 섹션에서는 CR에서 Ansible로 추가 변수를 전달하는 방법을 설명합니다. 따라서 Operator에 적절한 기본값을 설정하는 것이 중요합니다.기본 변수
state
를present
로 설정하여Test1
의 CR 인스턴스를 생성합니다.oc create -f deploy/cr.yaml
$ oc create -f deploy/cr.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 네임스페이스
테스트가
생성되었는지 확인합니다.oc get namespace
$ oc get namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME STATUS AGE default Active 28d kube-public Active 28d kube-system Active 28d test Active 3s
NAME STATUS AGE default Active 28d kube-public Active 28d kube-system Active 28d test Active 3s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow deploy/cr.yaml
파일을 수정하여state
필드를absent
로 설정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 적용하고 네임스페이스가 삭제되었는지 확인합니다.
oc apply -f deploy/cr.yaml
$ oc apply -f deploy/cr.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get namespace
$ oc get namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME STATUS AGE default Active 28d kube-public Active 28d kube-system Active 28d
NAME STATUS AGE default Active 28d kube-public Active 28d kube-system Active 28d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow