5.3. 최신 Operator SDK 버전용 프로젝트 업그레이드
OpenShift Container Platform 4.8에서는 Operator SDK v1.8.0을 지원합니다. 워크스테이션에 v1.3.0 CLI가 이미 설치되어 있는 경우 최신 버전을 설치하여 CLI를 v1.8.0으로 업그레이드할 수 있습니다.
그러나 기존 Operator 프로젝트에서 Operator SDK v1.8.0과의 호환성을 유지하려면 v1.3.0 이후의 중단된 변경 사항에 업그레이드 단계가 필요합니다. v1.3.0을 사용하여 이전에 생성하거나 유지 관리되는 Operator 프로젝트에서 업그레이드 단계를 수동으로 수행해야 합니다.
5.3.1. Operator SDK v1.8.0의 프로젝트 업그레이드
v1.8.0과의 호환성을 위해 기존 Operator 프로젝트를 업그레이드하려면 다음 업그레이드 단계를 수행해야 합니다.
사전 요구 사항
- Operator SDK v1.8.0가 설치됨
- Operator SDK v1.3.0을 사용하여 이전에 생성되거나 유지 관리되는 Operator 프로젝트
절차
PROJECT
파일을 다음과 같이 변경합니다.manifests
및scorecard
오브젝트를 사용하도록PROJECT
파일plugins
오브젝트를 업데이트합니다.OLM(Operator Lifecycle Manager) 및
스코어 카드
매니페스트
를 생성하는 매니페스트 및 스코어 카드 플러그인에 관련 파일을 생성하기 위해create
하위 명령을 실행하기 위한 플러그인 오브젝트가 있습니다.Go 기반 Operator 프로젝트의 경우 기존 Go 기반 플러그인 구성 오브젝트가 이미 있습니다. 이전 구성은 계속 지원되지만, 이러한 새 오브젝트는 해당 플러그인에 구성 옵션이 추가되므로 나중에 유용합니다.
기존 설정
version: 3-alpha ... plugins: go.sdk.operatorframework.io/v2-alpha: {}
새 설정
version: 3-alpha ... plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {}
선택 사항: Ansible 및 Helm 기반 Operator 프로젝트의 경우 이전에 플러그인 구성 오브젝트가 존재하지 않았습니다. 플러그인 구성 오브젝트를 추가할 필요는 없지만 이러한 새 오브젝트는 해당 플러그인에 구성 옵션이 추가되므로 나중에 유용합니다.
version: 3-alpha ... plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {}
PROJECT
구성 버전3-alpha
를3
으로 업그레이드해야 합니다.PROJECT
파일의version
키는PROJECT
구성 버전을 나타냅니다.기존
PROJECT
파일version: 3-alpha resources: - crdVersion: v1 ...
버전
3-alpha
는 버전 3으로 안정화되었으며 프로젝트를 완전히 설명하는 데 충분한 config 필드 세트를 포함합니다. 이 변경 사항은 해당 버전의 사양이 alpha이므로 기본적으로operator-sdk
명령에서 사용되었으므로 중단으로 표시되고 편리한 업그레이드 경로가 있어야 하기 때문에 기술적으로 손상되지 않습니다.alpha config-3alpha-to-3
명령을 실행하여PROJECT
파일을 버전3alpha
에서3
으로 변환합니다.$ operator-sdk alpha config-3alpha-to-3
출력 예
Your PROJECT config file has been converted from version 3-alpha to 3. Please make sure all config data is correct.
또한 명령은 자동 변환을 수행할 수 없는 지침이 포함된 주석을 출력합니다.
변경 사항을 확인합니다.
새
프로젝트
파일version: "3" resources: - api: crdVersion: v1 ...
config/manager/manager.yaml
파일을 다음과 같이 변경합니다.Ansible 및 Helm 기반 Operator 프로젝트의 경우 활성 및 준비 프로브를 추가합니다.
Operator SDK로 빌드된 새 프로젝트에는 기본적으로 프로브가 구성되어 있습니다. 이제 제공된 이미지 기반에서 엔드포인트
/healthz
및 /readyzDockerfile
을 업데이트하여 프로브를 사용하도록 기존 프로젝트를 업데이트한 다음config/manager/manager.yaml 파일의
manager
컨테이너에 다음을 추가할 수 있습니다.예 5.1. Ansible 기반 Operator 프로젝트 구성
livenessProbe: httpGet: path: /healthz port: 6789 initialDelaySeconds: 15 periodSeconds: 20 readinessProbe: httpGet: path: /readyz port: 6789 initialDelaySeconds: 5 periodSeconds: 10
예 5.2. Helm 기반 Operator 프로젝트에 대한 구성
livenessProbe: httpGet: path: /healthz port: 8081 initialDelaySeconds: 15 periodSeconds: 20 readinessProbe: httpGet: path: /readyz port: 8081 initialDelaySeconds: 5 periodSeconds: 10
Ansible 및 Helm 기반 Operator 프로젝트의 경우 관리자의 배포에 보안 컨텍스트를 추가합니다.
config/manager/manager.yaml
파일에서 다음 보안 컨텍스트를 추가합니다.예 5.3.
config/manager/manager.yaml
filespec: ... template: ... spec: securityContext: runAsNonRoot: true containers: - name: manager securityContext: allowPrivilegeEscalation: false
Makefile
을 다음과 같이 변경합니다.Ansible 및 Helm 기반 Operator 프로젝트의 경우
Makefile
에서helm-operator
및ansible-operator
URL을 업데이트합니다.Ansible 기반 Operator 프로젝트의 경우 다음을 변경합니다.
https://github.com/operator-framework/operator-sdk/releases/download/v1.3.0/ansible-operator-v1.3.0-$(ARCHOPER)-$(OSOPER)
다음으로 변경합니다.
https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/ansible-operator_$(OS)_$(ARCH)
Helm 기반 Operator 프로젝트의 경우 다음과 같이 변경합니다.
https://github.com/operator-framework/operator-sdk/releases/download/v1.3.0/helm-operator-v1.3.0-$(ARCHOPER)-$(OSOPER)
다음으로 변경합니다.
https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/helm-operator_$(OS)_$(ARCH)
Ansible 및 Helm 기반 Operator 프로젝트의 경우
Makefile
에서helm-operator
,ansible-operator
및kustomize
규칙을 업데이트합니다. 이러한 규칙은 로컬 바이너리를 다운로드하지만 글로벌 바이너리가 있는 경우에는 사용하지 않습니다.예 5.4. Ansible 기반 Operator 프로젝트의
Makefile
diffPATH := $(PATH):$(PWD)/bin SHELL := env PATH=$(PATH) /bin/sh -OS := $(shell uname -s | tr '[:upper:]' '[:lower:]') -ARCH := $(shell uname -m | sed 's/x86_64/amd64/') +OS = $(shell uname -s | tr '[:upper:]' '[:lower:]') +ARCH = $(shell uname -m | sed 's/x86_64/amd64/') +OSOPER = $(shell uname -s | tr '[:upper:]' '[:lower:]' | sed 's/darwin/apple-darwin/' | sed 's/linux/linux-gnu/') +ARCHOPER = $(shell uname -m ) -# Download kustomize locally if necessary, preferring the $(pwd)/bin path over global if both exist. -.PHONY: kustomize -KUSTOMIZE = $(shell pwd)/bin/kustomize kustomize: -ifeq (,$(wildcard $(KUSTOMIZE))) -ifeq (,$(shell which kustomize 2>/dev/null)) +ifeq (, $(shell which kustomize 2>/dev/null)) @{ \ set -e ;\ - mkdir -p $(dir $(KUSTOMIZE)) ;\ - curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_$(OS)_$(ARCH).tar.gz | \ - tar xzf - -C bin/ ;\ + mkdir -p bin ;\ + curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_$(OS)_$(ARCH).tar.gz | tar xzf - -C bin/ ;\ } +KUSTOMIZE=$(realpath ./bin/kustomize) else -KUSTOMIZE = $(shell which kustomize) -endif +KUSTOMIZE=$(shell which kustomize) endif -# Download ansible-operator locally if necessary, preferring the $(pwd)/bin path over global if both exist. -.PHONY: ansible-operator -ANSIBLE_OPERATOR = $(shell pwd)/bin/ansible-operator ansible-operator: -ifeq (,$(wildcard $(ANSIBLE_OPERATOR))) -ifeq (,$(shell which ansible-operator 2>/dev/null)) +ifeq (, $(shell which ansible-operator 2>/dev/null)) @{ \ set -e ;\ - mkdir -p $(dir $(ANSIBLE_OPERATOR)) ;\ - curl -sSLo $(ANSIBLE_OPERATOR) https://github.com/operator-framework/operator-sdk/releases/download/v1.3.0/ansible-operator_$(OS)_$(ARCH) ;\ - chmod +x $(ANSIBLE_OPERATOR) ;\ + mkdir -p bin ;\ + curl -LO https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/ansible-operator-v1.8.0-$(ARCHOPER)-$(OSOPER) ;\ + mv ansible-operator-v1.8.0-$(ARCHOPER)-$(OSOPER) ./bin/ansible-operator ;\ + chmod +x ./bin/ansible-operator ;\ } +ANSIBLE_OPERATOR=$(realpath ./bin/ansible-operator) else -ANSIBLE_OPERATOR = $(shell which ansible-operator) -endif +ANSIBLE_OPERATOR=$(shell which ansible-operator) endif
예 5.5. Helm 기반 Operator 프로젝트의
Makefile
diffPATH := $(PATH):$(PWD)/bin SHELL := env PATH=$(PATH) /bin/sh -OS := $(shell uname -s | tr '[:upper:]' '[:lower:]') -ARCH := $(shell uname -m | sed 's/x86_64/amd64/') +OS = $(shell uname -s | tr '[:upper:]' '[:lower:]') +ARCH = $(shell uname -m | sed 's/x86_64/amd64/') +OSOPER = $(shell uname -s | tr '[:upper:]' '[:lower:]' | sed 's/darwin/apple-darwin/' | sed 's/linux/linux-gnu/') +ARCHOPER = $(shell uname -m ) -# Download kustomize locally if necessary, preferring the $(pwd)/bin path over global if both exist. -.PHONY: kustomize -KUSTOMIZE = $(shell pwd)/bin/kustomize kustomize: -ifeq (,$(wildcard $(KUSTOMIZE))) -ifeq (,$(shell which kustomize 2>/dev/null)) +ifeq (, $(shell which kustomize 2>/dev/null)) @{ \ set -e ;\ - mkdir -p $(dir $(KUSTOMIZE)) ;\ - curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_$(OS)_$(ARCH).tar.gz | \ - tar xzf - -C bin/ ;\ + mkdir -p bin ;\ + curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_$(OS)_$(ARCH).tar.gz | tar xzf - -C bin/ ;\ } +KUSTOMIZE=$(realpath ./bin/kustomize) else -KUSTOMIZE = $(shell which kustomize) -endif +KUSTOMIZE=$(shell which kustomize) endif -# Download helm-operator locally if necessary, preferring the $(pwd)/bin path over global if both exist. -.PHONY: helm-operator -HELM_OPERATOR = $(shell pwd)/bin/helm-operator helm-operator: -ifeq (,$(wildcard $(HELM_OPERATOR))) -ifeq (,$(shell which helm-operator 2>/dev/null)) +ifeq (, $(shell which helm-operator 2>/dev/null)) @{ \ set -e ;\ - mkdir -p $(dir $(HELM_OPERATOR)) ;\ - curl -sSLo $(HELM_OPERATOR) https://github.com/operator-framework/operator-sdk/releases/download/v1.3.0/helm-operator_$(OS)_$(ARCH) ;\ - chmod +x $(HELM_OPERATOR) ;\ + mkdir -p bin ;\ + curl -LO https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/helm-operator-v1.8.0-$(ARCHOPER)-$(OSOPER) ;\ + mv helm-operator-v1.8.0-$(ARCHOPER)-$(OSOPER) ./bin/helm-operator ;\ + chmod +x ./bin/helm-operator ;\ } +HELM_OPERATOR=$(realpath ./bin/helm-operator) else -HELM_OPERATOR = $(shell which helm-operator) -endif +HELM_OPERATOR=$(shell which helm-operator) endif
docker-build
의make
target에서
위치 디렉토리 인수를 이동합니다.디렉터리 인수입니다
.
docker-build 대상에서
podman
CLI 기대치에 맞추기 위해 마지막 위치 인수로 이동되어 대체가 더 명확해졌습니다.이전 대상
docker-build: docker build . -t ${IMG}
새 대상
docker-build: docker build -t ${IMG} .
다음 명령을 실행하여 이러한 변경을 수행할 수 있습니다.
$ sed -i 's/docker build . -t ${IMG}/docker build -t ${IMG} ./' $(git grep -l 'docker.*build \. ')
Ansible 및 Helm 기반 Operator 프로젝트의 경우
Makefile
에help
대상을 추가합니다.Ansible 및 Helm 기반 프로젝트에서 이제
--help
플래그와 유사하게Makefile
의help
대상을 기본적으로 제공합니다. 다음 줄을 사용하여 이 대상을Makefile
에 수동으로 추가할 수 있습니다.예 5.6.
help
대상##@ General # The help target prints out all targets with their descriptions organized # beneath their categories. The categories are represented by '##@' and the # target descriptions by '##'. The awk commands is responsible for reading the # entire set of makefiles included in this invocation, looking for lines of the # file as xyz: ## something, and then pretty-format the target and help. Then, # if there's a line with ##@ something, that gets pretty-printed as a category. # More info on the usage of ANSI control characters for terminal formatting: # https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters # More info on the awk command: # http://linuxcommand.org/lc3_adv_awk.php help: ## Display this help. @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
opm
및catalog-build
대상을 추가합니다. 이러한 대상을 사용하여 Operator에 대한 자체 카탈로그를 생성하거나 Operator 번들을 기존 카탈로그에 추가할 수 있습니다.다음 줄을 추가하여
Makefile
에 대상을 추가합니다.예 5.7.
opm
및catalog-build
대상.PHONY: opm OPM = ./bin/opm opm: ifeq (,$(wildcard $(OPM))) ifeq (,$(shell which opm 2>/dev/null)) @{ \ set -e ;\ mkdir -p $(dir $(OPM)) ;\ curl -sSLo $(OPM) https://github.com/operator-framework/operator-registry/releases/download/v1.15.1/$(OS)-$(ARCH)-opm ;\ chmod +x $(OPM) ;\ } else OPM = $(shell which opm) endif endif BUNDLE_IMGS ?= $(BUNDLE_IMG) CATALOG_IMG ?= $(IMAGE_TAG_BASE)-catalog:v$(VERSION) ifneq ($(origin CATALOG_BASE_IMG), undefined) FROM_INDEX_OPT := --from-index $(CATALOG_BASE_IMG) endif .PHONY: catalog-build catalog-build: opm $(OPM) index add --container-tool docker --mode semver --tag $(CATALOG_IMG) --bundles $(BUNDLE_IMGS) $(FROM_INDEX_OPT) .PHONY: catalog-push catalog-push: ## Push the catalog image. $(MAKE) docker-push IMG=$(CATALOG_IMG)
Go 기반 Operator 프로젝트를 업데이트하는 경우 다음
Makefile
변수도 추가합니다.예 5.8.
Makefile
변수OS = $(shell go env GOOS) ARCH = $(shell go env GOARCH)
Go 기반 Operator 프로젝트의 경우
Makefile
의SHELL
변수를 시스템bash
바이너리로 설정합니다.setup-envtest.sh
스크립트를 가져오려면bash
가 필요하므로 오류 옵션을 사용하여SHELL
변수를bash
로 설정해야 합니다.예 5.9.
Makefile
diffelse GOBIN=$(shell go env GOBIN) endif +# Setting SHELL to bash allows bash commands to be executed by recipes. +# This is a requirement for 'setup-envtest.sh' in the test target. +# Options are set to exit when a recipe line exits non-zero or a piped command fails. +SHELL = /usr/bin/env bash -o pipefail +.SHELLFLAGS = -ec + all: build
Go 기반 Operator 프로젝트의 경우 go.
mod 파일에서 다음 항목을 변경하여
2로 업그레이드한 다음 프로젝트를 다시 빌드합니다.controller-runtime
을 v0.8.3 및 Kubernetes 종속 항목을 v0.20.예 5.10.
go.mod
파일... k8s.io/api v0.20.2 k8s.io/apimachinery v0.20.2 k8s.io/client-go v0.20.2 sigs.k8s.io/controller-runtime v0.8.3
system:controller-manager
서비스 계정을 프로젝트에 추가합니다. 이제operator-sdk init 명령으로
가 생성되어 공유 네임스페이스에 설치된 Operator의 보안을 강화할 수 있습니다. 이 서비스 계정을 기존 프로젝트에 추가하려면 다음 단계를 따르십시오.기본이 아닌 서비스 계정 controller-
manager파일에
ServiceAccount
정의를 생성합니다.예 5.11.
config/rbac/service_account.yaml
파일apiVersion: v1 kind: ServiceAccount metadata: name: controller-manager namespace: system
RBAC 리소스 목록에 서비스 계정을 추가합니다.
$ echo "- service_account.yaml" >> config/rbac/kustomization.yaml
Operator의 서비스 계정을 참조하는 모든
RoleBinding
및ClusterRoleBinding
오브젝트를 업데이트합니다.$ find config/rbac -name *_binding.yaml -exec sed -i -E 's/ name: default/ name: controller-manager/g' {} \;
manager 배포의
spec.template.spec.serviceAccountName
필드에 서비스 계정 이름을 추가합니다.$ sed -i -E 's/([ ]+)(terminationGracePeriodSeconds:)/\1serviceAccountName: controller-manager\n\1\2/g' config/manager/manager.yaml
변경 사항이 다음과 같은지 확인합니다.
예 5.12.
config/manager/manager.yaml
file diff... requests: cpu: 100m memory: 20Mi + serviceAccountName: controller-manager terminationGracePeriodSeconds: 10
예 5.13.
config/rbac/auth_proxy_role_binding.yaml
file diff... name: proxy-role subjects: - kind: ServiceAccount - name: default + name: controller-manager namespace: system
예 5.14.
config/rbac/kustomization.yaml
file diffresources: +- service_account.yaml - role.yaml - role_binding.yaml - leader_election_role.yaml
예 5.15.
config/rbac/leader_election_role_binding.yaml
파일 diff... name: leader-election-role subjects: - kind: ServiceAccount - name: default + name: controller-manager namespace: system
예 5.16.
config/rbac/role_binding.yaml
file diff... name: manager-role subjects: - kind: ServiceAccount - name: default + name: controller-manager namespace: system
예 5.17.
config/rbac/service_account.yaml
file diff+apiVersion: v1 +kind: ServiceAccount +metadata: + name: controller-manager + namespace: system
config/manifests/kustomization.yaml
파일을 다음과 같이 변경합니다.Kustomize 패치를 추가하여 CSV(클러스터 서비스 버전)에서 cert-manager
볼륨 및
개체를 제거합니다.volume
MountOLM(Operator Lifecycle Manager)은 아직 cert-manager를 지원하지 않기 때문에 이 볼륨을 제거하고 마운트하기 위해 JSON 패치가 추가되어 OLM에서 Operator의 인증서를 생성하고 관리할 수 있습니다.
config/manifests/kustomization.yaml
파일에서 다음 행을 추가합니다.예 5.18.
config/manifests/kustomization.yaml
파일patchesJson6902: - target: group: apps version: v1 kind: Deployment name: controller-manager namespace: system patch: |- # Remove the manager container's "cert" volumeMount, since OLM will create and mount a set of certs. # Update the indices in this path if adding or removing containers/volumeMounts in the manager's Deployment. - op: remove path: /spec/template/spec/containers/1/volumeMounts/0 # Remove the "cert" volume, since OLM will create and mount a set of certs. # Update the indices in this path if adding or removing volumes in the manager's Deployment. - op: remove path: /spec/template/spec/volumes/0
선택 사항: Ansible 및 Helm 기반 Operator 프로젝트의 경우 구성 요소 구성을 사용하여
ansible-operator
및helm-operator
를 구성합니다. 이 옵션을 추가하려면 다음 단계를 따르십시오.다음 파일을 생성합니다.
예 5.19.
config/default/manager_config_patch.yaml
파일apiVersion: apps/v1 kind: Deployment metadata: name: controller-manager namespace: system spec: template: spec: containers: - name: manager args: - "--config=controller_manager_config.yaml" volumeMounts: - name: manager-config mountPath: /controller_manager_config.yaml subPath: controller_manager_config.yaml volumes: - name: manager-config configMap: name: manager-config
다음 파일을 생성합니다.
예 5.20.
config/manager/controller_manager_config.yaml
파일apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 kind: ControllerManagerConfig health: healthProbeBindAddress: :6789 metrics: bindAddress: 127.0.0.1:8080 leaderElection: leaderElect: true resourceName: <resource_name>
resources
에 다음 변경 사항을 적용하여config/default/kustomization.yaml
파일을 업데이트합니다.예 5.21.
config/default/kustomization.yaml
fileresources: ... - manager_config_patch.yaml
다음 변경 사항을 적용하여
config/manager/kustomization.yaml
파일을 업데이트합니다.예 5.22.
config/manager/kustomization.yaml
filegeneratorOptions: disableNameSuffixHash: true configMapGenerator: - files: - controller_manager_config.yaml name: manager-config apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization images: - name: controller newName: quay.io/example/memcached-operator newTag: v0.0.1
선택 사항: manager 구성 패치를
config/default/kustomization.yaml
파일에 추가합니다.구성 파일이 처음 추가된 경우 생성된
--config
플래그가ansible
바이너리에 추가되지 않았으므로 현재 작동하지 않습니다.-operator
또는 helm-operator--config
플래그는 파일별 두 바이너리 구성을 모두 지원합니다. 이 구성 방법은 Operator 전체가 아닌 기본 컨트롤러 관리자에게 만 적용됩니다.선택적으로 config 파일을 사용하여 Operator 배포를 구성하려면 다음 diff에 표시된 대로
config/default/kustomization.yaml
파일을 변경합니다.예 5.23.
config/default/kustomization.yaml
file diff# If you want your controller-manager to expose the /metrics # endpoint w/o any authn/z, please comment the following line. \- manager_auth_proxy_patch.yaml +# Mount the controller config file for loading manager configurations +# through a ComponentConfig type +- manager_config_patch.yaml
플래그를 그대로 사용하거나 구성 파일 값을 재정의할 수 있습니다.
Ansible- 및 Helm 기반 Operator 프로젝트의 경우
config/rbac/leader_election_role.yaml
파일을 다음과 같이 변경하여 리더 선택을 위한 역할 규칙을 추가합니다.예 5.24.
config/rbac/leader_election_role.yaml
file- apiGroups: - coordination.k8s.io resources: - leases verbs: - get - list - watch - create - update - patch - delete
Ansible 기반 Operator 프로젝트의 경우 Ansible 컬렉션을 업데이트합니다.
requirements.yml
파일에서community.kubernetes
의version
필드를1.2.1
로 변경하고,operator_sdk.util의
으로 변경합니다.version
필드를0.
2.0config/default/manager_auth_proxy_patch.yaml 파일을 다음과 같이 변경합니다.
Ansible 기반 Operator 프로젝트의 경우
config/default/manager_auth_proxy_patch.yaml 파일에
--health-probe-bind-address=:6789
인수를 추가합니다.예 5.25.
config/default/manager_auth_proxy_patch.yaml
파일spec: template: spec: containers: - name: manager args: - "--health-probe-bind-address=:6789" ...
Helm 기반 Operator 프로젝트의 경우 다음을 수행합니다.
config/default/manager_auth_proxy_patch.yaml
파일에--health-probe-bind-address=:8081
인수를 추가합니다.예 5.26.
config/default/manager_auth_proxy_patch.yaml
파일spec: template: spec: containers: - name: manager args: - "--health-probe-bind-address=:8081" ...
-
더 이상 사용되지 않는 플래그
--enable-leader-election
을--leader-elect
로 바꾸고 더 이상 사용되지 않는 플래그--metrics-addr
을--metrics-bind-address
로 바꿉니다.
config/prometheus/monitor.yaml
파일을 다음과 같이 변경합니다.Prometheus
ServiceMonitor
메트릭 엔드포인트에 스키마, 토큰 및 TLS 구성을 추가합니다.tlsConfig
가 설정되지 않았기 때문에 관리자 포드에서https
포트를 지정하는 동안/metrics
엔드포인트가 HTTPS를 통해 제공하도록 구성되지 않았습니다.kube-rbac-proxy
는 이 엔드포인트 관리자 사이드카로 보호하므로 기본적으로 Pod에 마운트된 서비스 계정 토큰을 사용하면 이 문제가 해결됩니다.다음 diff에 표시된 대로
config/prometheus/monitor.yaml
파일에 변경 사항을 적용합니다.예 5.27.
config/prometheus/monitor.yaml
파일 diffspec: endpoints: - path: /metrics port: https + scheme: https + bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + tlsConfig: + insecureSkipVerify: true selector: matchLabels: control-plane: controller-manager
참고프로젝트에서
kube-rbac-proxy
를 제거한 경우 적절한 TLS 구성을 사용하여/metrics
엔드포인트를 보호해야 합니다.
기존 종속 리소스에 소유자 주석이 있는지 확인합니다.
Ansible 기반 Operator 프로젝트의 경우 클러스터 범위의 종속 리소스 및 다른 네임스페이스의 종속 리소스의 소유자 참조 주석이 올바르게 적용되지 않았습니다. 해결방법은 이러한 주석을 수동으로 추가하는 것이었습니다. 이 버그가 수정되었으므로 더 이상 필요하지 않습니다.
패키지 매니페스트에 대한 지원을 중단합니다.
Operator Framework 는 향후 릴리스에서 Operator 패키지 매니페스트 형식에 대한 지원을 제거합니다. 지속적인 사용 중단 프로세스의 일부로
operator-sdk generate packagemanifests
및operator-sdk run packagemanifests
명령이 이제 더 이상 사용되지 않습니다. 패키지 매니페스트를 번들로 마이그레이션하려면operator-sdk pkgman-to-bundle
명령을 사용할 수 있습니다.operator-sdk pkgman-to-bundle --help
명령을 실행하고 자세한 내용은 "패키지 매니페스트 프로젝트 번들 형식으로 마이그레이션"을 참조하십시오.Operator의 종료자 이름을 업데이트합니다.
Kubernetes 문서에서 제안하는 종료자 이름 형식은 다음과 같습니다.
<qualified_group>/<finalizer_name>
이전에 Operator SDK용으로 문서화된 형식은 다음과 같습니다.
<finalizer_name>.<qualified_group>
Operator에서 잘못된 형식과 일치하는 이름으로 종료자를 사용하는 경우 공식 형식과 일치하도록 변경합니다. 예를 들어
finalizer.cache.example.com
은cache.example.com/finalizer
로 변경해야 합니다.
Operator 프로젝트가 Operator SDK v1.8.0과 호환됩니다.