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.2. Operator SDK를 사용하여 Ansible 기반 Operator 빌드
이 절차에서는 Operator SDK에서 제공하는 툴 및 라이브러리를 사용하여 Ansible 플레이북 및 모듈에서 제공하는 간단한 Memcached Operator를 구축하는 예제를 설명합니다.
사전 요구 사항
- 개발 워크스테이션에 Operator SDK v0.19.4 CLI가 설치되어 있습니다.
 - 
							cluster 
-admin권한이 있는 계정을 사용하여 Kubernetes 기반 클러스터 v1.11.3 이상(예: OpenShift Container Platform 4.6)에 대한 액세스 - 
							OpenShift CLI (
oc) v4.6 이상이 설치됨 - 
							
ansiblev2.9.0+ - 
							
ansible-runnerv1.1.0+ - 
							
ansible-runner-httpv1.0.0+ 
프로세스
새 Operator 프로젝트를 생성합니다. 네임스페이스 범위의 Operator는 단일 네임스페이스에서 리소스를 감시하고 관리합니다. 유연성으로 인해 네임스페이스 범위의 Operator가 선호됩니다. 이를 통해 분리된 업그레이드, 장애 및 모니터링을 위한 네임스페이스 격리, 다양한 API 정의를 사용할 수 있습니다.
새 Ansible 기반 네임스페이스 범위의
memcached-operator프로젝트를 생성하고 새 디렉터리로 변경하려면 다음 명령을 사용합니다.operator-sdk new memcached-operator \ --api-version=cache.example.com/v1alpha1 \ --kind=Memcached \ --type=ansible$ operator-sdk new memcached-operator \ --api-version=cache.example.com/v1alpha1 \ --kind=Memcached \ --type=ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow cd memcached-operator
$ cd memcached-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면 API 버전
example.com/v1apha1및 종류Memcached가 있는 Memcached리소스를 조사하기 위해memcached-operator프로젝트가 생성됩니다.Operator 논리를 사용자 지정합니다.
이 예에서는
memcached-operator에서 각MemcachedCR(사용자 정의 리소스)에 대해 다음 조정 논리를 실행합니다.- 
									
memcached배포가 없는 경우 해당 배포를 생성합니다. - 
									배포 크기가 
MemcachedCR에서 지정한 것과 같은지 확인합니다. 
기본적으로
memcached-operator는watches.yaml파일에 표시된 대로Memcached리소스 이벤트를 감시하고 Ansible 역할Memcached를 실행합니다.- version: v1alpha1 group: cache.example.com kind: Memcached
- version: v1alpha1 group: cache.example.com kind: MemcachedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택적으로
watches.yaml 파일에서 다음 논리를 사용자 지정할 수 있습니다.역할옵션을 지정하면 Ansible 역할로ansible-runner를 시작할 때 이 지정된 경로를 사용하도록 Operator가 구성됩니다. 기본적으로operator-sdk new명령은 역할이 이동해야 하는 절대 경로를 채웁니다.- version: v1alpha1 group: cache.example.com kind: Memcached role: /opt/ansible/roles/memcached
- version: v1alpha1 group: cache.example.com kind: Memcached role: /opt/ansible/roles/memcachedCopy to Clipboard Copied! Toggle word wrap Toggle overflow watches.yaml파일에서플레이북옵션을 지정하면 Ansible 플레이북으로ansible-runner를 시작할 때 이 지정된 경로를 사용하도록 Operator가 구성됩니다.- version: v1alpha1 group: cache.example.com kind: Memcached playbook: /opt/ansible/playbook.yaml
- version: v1alpha1 group: cache.example.com kind: Memcached playbook: /opt/ansible/playbook.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
- 
									
 Memcached Ansible 역할을 빌드합니다.
roles/memcached/디렉터리에서 생성된 Ansible 역할을 수정합니다. 이 Ansible 역할은 리소스를 수정할 때 실행되는 논리를 제어합니다.Memcached사양을 정의합니다.Ansible 기반 Operator에 대한 사양 정의는 Ansible에서 완전히 수행할 수 있습니다. Ansible Operator는 CR 사양 필드에 나열된 모든 키-값 쌍을 Ansible에 변수로 전달합니다. spec 필드에 있는 모든 변수의 이름은 Ansible을 실행하기 전에 Operator에서 snake 케이스(하위 코어의 소문자)로 변환됩니다. 예를 들어 사양의
serviceAccount는 Ansible에서service_account로 변환됩니다.작은 정보애플리케이션에 예상되는 입력을 수신하려면 변수에 대해 Ansible에서 일부 유형 검증을 수행해야 합니다.
사용자가
spec필드를 설정하지 않는 경우roles/memcached/defaults/main.yml 파일을 수정하여 기본값을 설정합니다.size: 1
size: 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Memcached배포를 정의합니다.Memcached사양을 정의하면 리소스 변경 시 Ansible이 실제로 실행되는 것을 정의할 수 있습니다. Ansible 역할이므로 기본 동작은roles/memcached/tasks/main.yml파일의 작업을 실행합니다.목표는
memcached:1.4.36-alpine이미지를 실행하는 경우 Ansible에서 배포를 생성하는 것입니다. Ansible 2.7+는 배포 정의를 제어하는 데 이 예제를 활용하는 k8s Ansible 모듈을 지원합니다.roles/memcached/tasks/main.yml을 다음과 일치하도록 수정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고이 예제에서는
size변수를 사용하여Memcached배포의 복제본 수를 제어합니다. 이 예제에서는 기본값을1로 설정하지만 모든 사용자는 기본값을 덮어쓰는 CR을 생성할 수 있습니다.
CRD를 배포합니다.
Operator를 실행하기 전에 Kubernetes는 Operator가 모니터링할 새 CRD(사용자 정의 리소스 정의)를 알아야 합니다.
MemcachedCRD를 배포합니다.oc create -f deploy/crds/cache.example.com_memcacheds_crd.yaml
$ oc create -f deploy/crds/cache.example.com_memcacheds_crd.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Operator를 빌드하고 실행합니다.
Operator를 빌드하고 실행하는 방법은 다음 두 가지가 있습니다.
- Kubernetes 클러스터 내부의 포드로 사용됩니다.
 - 
									
operator-sdk up명령을 사용하여 클러스터 외부의 Go 프로그램으로. 
다음 방법 중 하나를 선택합니다.
Kubernetes 클러스터 내에서 포드로 실행합니다. 이 방법이 프로덕션에 사용하는 데 선호되는 방법입니다.
memcached-operator이미지를 빌드하여 레지스트리로 내보냅니다.operator-sdk build quay.io/example/memcached-operator:v0.0.1
$ operator-sdk build quay.io/example/memcached-operator:v0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman push quay.io/example/memcached-operator:v0.0.1
$ podman push quay.io/example/memcached-operator:v0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 배포 매니페스트는
deploy/operator.yaml파일에 생성됩니다. 이 파일의 배포 이미지는 플레이스 홀더REPLACE_IMAGE에서 이전 빌드 이미지로 수정해야 합니다. 이를 수행하려면 다음을 실행합니다.sed -i 's|REPLACE_IMAGE|quay.io/example/memcached-operator:v0.0.1|g' deploy/operator.yaml
$ sed -i 's|REPLACE_IMAGE|quay.io/example/memcached-operator:v0.0.1|g' deploy/operator.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow memcached-operator매니페스트를 배포합니다.oc create -f deploy/service_account.yaml
$ oc create -f deploy/service_account.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f deploy/role.yaml
$ oc create -f deploy/role.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f deploy/role_binding.yaml
$ oc create -f deploy/role_binding.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f deploy/operator.yaml
$ oc create -f deploy/operator.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow memcached-operator배포가 시작되어 실행 중인지 확인합니다.oc get deployment
$ oc get deploymentCopy to Clipboard Copied! Toggle word wrap Toggle overflow NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE memcached-operator 1 1 1 1 1m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE memcached-operator 1 1 1 1 1mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
클러스터 외부에서 실행합니다. 이 방법은 배포 및 테스트 속도를 높이기 위해 개발 주기 동안 선호됩니다.
Ansible Runner 및 Ansible Runner HTTP 플러그인이 설치되어 있는지 확인합니다. 그렇지 않으면 CR이 생성될 때 Ansible Runner에서 예기치 않은 오류가 발생합니다.
또한
watches.yaml파일에서 참조되는 역할 경로가 시스템에 있어야 합니다. 일반적으로 컨테이너가 디스크에 배치되는 위치이므로 이 역할을 구성된 Ansible 역할 경로(예:/etc/ansible/roles)에 수동으로 복사해야 합니다.$HOME/.kube/config에 있는 기본 Kubernetes 구성 파일을 사용하여 Operator를 로컬로 실행하려면 다음을 수행합니다.operator-sdk run --local
$ operator-sdk run --localCopy to Clipboard Copied! Toggle word wrap Toggle overflow 제공된 Kubernetes 구성 파일을 사용하여 Operator를 로컬로 실행하려면 다음을 수행합니다.
operator-sdk run --local --kubeconfig=config
$ operator-sdk run --local --kubeconfig=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
MemcachedCR을 생성합니다.표시된 대로
deploy/crds/cache_v1alpha1_memcached_cr.yaml파일을 수정하고MemcachedCR을 생성합니다.cat deploy/crds/cache_v1alpha1_memcached_cr.yaml
$ cat deploy/crds/cache_v1alpha1_memcached_cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f deploy/crds/cache_v1alpha1_memcached_cr.yaml
$ oc apply -f deploy/crds/cache_v1alpha1_memcached_cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow memcached-operator가 CR에 대한 배포를 생성하는지 확인합니다.oc get deployment
$ oc get deploymentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE memcached-operator 1 1 1 1 2m example-memcached 3 3 3 3 1m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE memcached-operator 1 1 1 1 2m example-memcached 3 3 3 3 1mCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod에서 세 개의 복제본이 생성되었는지 확인합니다.
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow NAME READY STATUS RESTARTS AGE example-memcached-6fd7c98d8-7dqdr 1/1 Running 0 1m example-memcached-6fd7c98d8-g5k7v 1/1 Running 0 1m example-memcached-6fd7c98d8-m7vn7 1/1 Running 0 1m memcached-operator-7cc7cfdf86-vvjqk 1/1 Running 0 2m
NAME READY STATUS RESTARTS AGE example-memcached-6fd7c98d8-7dqdr 1/1 Running 0 1m example-memcached-6fd7c98d8-g5k7v 1/1 Running 0 1m example-memcached-6fd7c98d8-m7vn7 1/1 Running 0 1m memcached-operator-7cc7cfdf86-vvjqk 1/1 Running 0 2mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
크기를 업데이트합니다.
memcachedCR의spec.size필드를3에서4로 변경하고 변경 사항을 적용합니다.cat deploy/crds/cache_v1alpha1_memcached_cr.yaml
$ cat deploy/crds/cache_v1alpha1_memcached_cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f deploy/crds/cache_v1alpha1_memcached_cr.yaml
$ oc apply -f deploy/crds/cache_v1alpha1_memcached_cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Operator에서 배포 크기를 변경하는지 확인합니다.
oc get deployment
$ oc get deploymentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE example-memcached 4 4 4 4 5m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE example-memcached 4 4 4 4 5mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
리소스를 정리합니다.
oc delete -f deploy/crds/cache_v1alpha1_memcached_cr.yaml
$ oc delete -f deploy/crds/cache_v1alpha1_memcached_cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete -f deploy/operator.yaml
$ oc delete -f deploy/operator.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete -f deploy/role_binding.yaml
$ oc delete -f deploy/role_binding.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete -f deploy/role.yaml
$ oc delete -f deploy/role.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete -f deploy/service_account.yaml
$ oc delete -f deploy/service_account.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete -f deploy/crds/cache_v1alpha1_memcached_crd.yaml
$ oc delete -f deploy/crds/cache_v1alpha1_memcached_crd.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow