27.21.3. 설치 및 설정
외부 컨트롤러 및 프로비저너는 볼륨 스냅샷을 제공하는 외부 구성 요소입니다. 이러한 외부 구성 요소는 클러스터에서 실행됩니다. 컨트롤러는 볼륨 스냅샷에서 이벤트를 생성, 삭제 및 보고합니다. 프로비저너는 볼륨 스냅샷에서 new PersistentVolumes
를 생성합니다. 자세한 내용은 Create Snapshot and Restore Snapshot 에서 참조하십시오.
27.21.3.1. 외부 컨트롤러 및 프로비저너 시작
외부 컨트롤러 및 프로비저너 서비스는 컨테이너 이미지로 배포되며, 일반적으로 OpenShift Container Platform 클러스터에서 실행할 수 있습니다. 컨트롤러와 프로비저너용 RPM 버전도 있습니다.
API 오브젝트를 관리하는 컨테이너를 허용하려면 관리자가 필요한 역할 기반 액세스 제어(RBAC) 규칙을 구성해야 합니다.
ServiceAccount
및ClusterRole
을 생성합니다.apiVersion: v1 kind: ServiceAccount metadata: name: snapshot-controller-runner kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: snapshot-controller-role rules: - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "create", "delete"] - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["list", "watch", "create", "update", "patch"] - apiGroups: ["apiextensions.k8s.io"] resources: ["customresourcedefinitions"] verbs: ["create", "list", "watch", "delete"] - apiGroups: ["volumesnapshot.external-storage.k8s.io"] resources: ["volumesnapshots"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] - apiGroups: ["volumesnapshot.external-storage.k8s.io"] resources: ["volumesnapshotdatas"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
ClusterRoleBinding
을 통해 규칙을 바인딩합니다.apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: snapshot-controller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: snapshot-controller-role subjects: - kind: ServiceAccount name: snapshot-controller-runner namespace: default
외부 컨트롤러 및 프로비저너가 AWS(Amazon Web Services)에 배포된 경우 액세스 키를 사용하여 인증할 수 있어야 합니다. 관리자는 Pod에 인증 정보를 제공하기 위해 새 보안을 생성합니다.
apiVersion: v1 kind: Secret metadata: name: awskeys type: Opaque data: access-key-id: <base64 encoded AWS_ACCESS_KEY_ID> secret-access-key: <base64 encoded AWS_SECRET_ACCESS_KEY>
외부 컨트롤러 및 프로비저너 컨테이너의 AWS 배포(두 Pod 컨테이너 모두 시크릿을 사용하여 AWS 클라우드 공급자 API에 액세스).
kind: Deployment apiVersion: extensions/v1beta1 metadata: name: snapshot-controller spec: replicas: 1 strategy: type: Recreate template: metadata: labels: app: snapshot-controller spec: serviceAccountName: snapshot-controller-runner containers: - name: snapshot-controller image: "registry.redhat.io/openshift3/snapshot-controller:latest" imagePullPolicy: "IfNotPresent" args: ["-cloudprovider", "aws"] env: - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: name: awskeys key: access-key-id - name: AWS_SECRET_ACCESS_KEY valueFrom: secretKeyRef: name: awskeys key: secret-access-key - name: snapshot-provisioner image: "registry.redhat.io/openshift3/snapshot-provisioner:latest" imagePullPolicy: "IfNotPresent" args: ["-cloudprovider", "aws"] env: - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: name: awskeys key: access-key-id - name: AWS_SECRET_ACCESS_KEY valueFrom: secretKeyRef: name: awskeys key: secret-access-key
GCE의 경우 시크릿을 사용하여 GCE 클라우드 공급자 API에 액세스할 필요가 없습니다. 관리자는 배포를 진행할 수 있습니다.
kind: Deployment apiVersion: extensions/v1beta1 metadata: name: snapshot-controller spec: replicas: 1 strategy: type: Recreate template: metadata: labels: app: snapshot-controller spec: serviceAccountName: snapshot-controller-runner containers: - name: snapshot-controller image: "registry.redhat.io/openshift3/snapshot-controller:latest" imagePullPolicy: "IfNotPresent" args: ["-cloudprovider", "gce"] - name: snapshot-provisioner image: "registry.redhat.io/openshift3/snapshot-provisioner:latest" imagePullPolicy: "IfNotPresent" args: ["-cloudprovider", "gce"]