5.3. 최신 Operator SDK 버전의 프로젝트 업데이트
OpenShift Container Platform 4.10은 Operator SDK v1.16.0을 지원합니다. 워크스테이션에 v1.10.1 CLI가 이미 설치되어 있는 경우 최신 버전을 설치하여 CLI를 v1.16.0으로 업데이트할 수 있습니다.
그러나 기존 Operator 프로젝트에서 Operator SDK v1.16.0과의 호환성을 유지하려면 v1.10.1 이후의 중단된 변경 사항에 업데이트 단계가 필요합니다. v1.10.1을 사용하여 이전에 생성되거나 유지 관리되는 Operator 프로젝트에서 업데이트 단계를 수동으로 수행해야 합니다.
5.3.1. Operator SDK v1.16.0 프로젝트 업데이트
다음 절차에서는 v1.16.0과의 호환성을 위해 기존 Operator 프로젝트를 업데이트합니다.
- Operator SDK v1.16.0은 Kubernetes 1.22를 지원합니다.
-
Kubernetes 1.22에서 더 이상 사용되지 않는 많은
v1beta1
API가sigs.k8s.io/controller-runtime v0.10.0
및controller-gen v0.7
에서 제거되었습니다. -
프로젝트를 Kubernetes 1.22로 업데이트하면 CRD(사용자 정의 리소스 정의) 또는 웹 후크를 위해
v1beta1
API를 스캐폴드 v1beta1 API를 이전 클러스터 버전에 게시해야 하는 경우 중단 변경이 됩니다.
Kubernetes 1.22에 도입된 변경 사항에 대한 자세한 내용은 Kubernetes 1.22에서 제거된 API 의 번들 매니페스트 유효성 검사를 참조하십시오.
사전 요구 사항
- Operator SDK v1.16.0이 설치되어 있어야 합니다.
- Operator SDK v1.10.1을 사용하여 Operator 프로젝트를 생성하거나 유지 관리합니다.
프로세스
config/default/manager_auth_proxy_patch.yaml
및config/rbac/auth_proxy_service.yaml
파일에protocol
필드를 추가합니다.... ports: - containerPort: 8443 + protocol: TCP name: https
config/manager/manager.yaml
파일을 다음과 같이 변경합니다.CPU 및 메모리 리소스 제한을 늘립니다.
resources: limits: - cpu: 100m - memory: 30Mi + cpu: 200m + memory: 100Mi
주석을 추가하여 기본 컨테이너 관리자를 지정합니다.
... template: metadata: annotations: kubectl.kubernetes.io/default-container: manager ...
-
Makefile
파일에 있는 모든 타겟에 tektonONY
대상을 추가합니다. Go 기반 Operator 프로젝트의 경우 다음과 같이 변경합니다.
-
setup-envtest
바이너리를 설치합니다. go.mod
파일을 변경하여 종속성을 업데이트합니다.k8s.io/api v0.22.1 k8s.io/apimachinery v0.22.1 k8s.io/client-go v0.22.1 sigs.k8s.io/controller-runtime v0.10.0
go mod tidy
명령을 실행하여 종속성을 다운로드합니다.$ go mod tidy
Makefile
파일을 다음과 같이 변경합니다.... + ENVTEST_K8S_VERSION = 1.22 test: manifests generate fmt vet envtest ## Run tests. - go test ./... -coverprofile cover.out + KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./... -coverprofile cover.out ... - $(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases + $(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases ... # Produce CRDs that work back to Kubernetes 1.11 (no version conversion) - CRD_OPTIONS ?= "crd:trivialVersions=true,preserveUnknownFields=false" ... - admissionReviewVersions={v1,v1beta1} + admissionReviewVersions=v1 ... + ifndef ignore-not-found + ignore-not-found = false + endif ##@ Deployment ... - sh kubectl delete -f - + sh kubectl delete --ignore-not-found=$(ignore-not-found) -f -
make manifest
명령을 실행하여 업데이트된 Kubernetes 버전으로 매니페스트를 생성합니다.$ make manifest
-
Ansible 기반 Operator 프로젝트의 경우 다음과 같이 변경합니다.
다음을 포함하도록
requirements.yml
파일을 변경합니다.community.kubernetes
컬렉션을kubernetes.core
컬렉션으로 교체합니다.... - name: kubernetes.core version: "2.2.0" ...
operator_sdk.util
유틸리티를0.2.0
에서0.3.1
로 업데이트합니다.... - name: operator_sdk.util version: "0.3.1"
config/manager/manager.yaml
파일에서 기본 리소스 제한을 확인합니다.... # TODO(user): Configure the resources accordingly based on the project requirements. # More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ resources: limits: cpu: 500m memory: 768Mi requests: cpu: 10m memory: 256Mi
중요Operator SDK는 이러한 값을 적절한 기본 설정으로 스캐폴드합니다. Operator 작성자는 프로젝트의 요구 사항에 따라 리소스 제한을 설정하고 최적화해야 합니다.
선택 사항:
make run
명령을 사용하여 Ansible 기반 Operator를 로컬에서 실행하려는 경우 다음과 같이 변경합니다.Makefile
파일에서 run 대상을 변경합니다.ANSIBLE_ROLES_PATH="$(ANSIBLE_ROLES_PATH):$(shell pwd)/roles" $(ANSIBLE_OPERATOR) run
ansible-runner
의 로컬 버전을 2.0.2 이상으로 업데이트합니다.중요버전 2.0에서
ansible-runner
툴에는 이전 버전과 호환되지 않는 명령 서명의 변경 사항이 포함되어 있습니다.