8.9.3. Ingress 컨트롤러 자동 스케일링
Ingress 컨트롤러를 자동으로 확장하여 라우팅 성능 또는 가용성 요구 사항을 동적으로 충족할 수 있습니다. 예를 들어 처리량을 늘려야 합니다.
다음 절차에서는 기본 Ingress 컨트롤러를 확장하는 예제를 제공합니다.
사전 요구 사항
-
OpenShift CLI(
oc)가 설치되어 있어야 합니다. -
cluster-admin역할의 사용자로 OpenShift Container Platform 클러스터에 액세스할 수 있습니다. VMware vSphere, 베어 메탈 및 Nutanix 설치 관리자 프로비저닝 인프라에서 Ingress 컨트롤러 Pod를 확장해도 외부 트래픽 성능이 향상되지 않습니다. 성능을 향상하려면 다음 사전 요구 사항을 완료해야 합니다.
- 클러스터의 사용자 관리 로드 밸런서를 수동으로 구성했습니다.
- Ingress 컨트롤러에서 들어오는 트래픽을 처리하는 클러스터 노드에 로드 밸런서가 구성되어 있는지 확인합니다.
Custom Metrics Autoscaler Operator 및 관련 KEDA 컨트롤러가 설치되어 있습니다.
-
웹 콘솔에서 OperatorHub를 사용하여 Operator를 설치할 수 있습니다. Operator를 설치한 후
KedaController의 인스턴스를 생성할 수 있습니다.
-
웹 콘솔에서 OperatorHub를 사용하여 Operator를 설치할 수 있습니다. Operator를 설치한 후
프로세스
다음 명령을 실행하여 Thanos로 인증할 서비스 계정을 생성합니다.
$ oc create -n openshift-ingress-operator serviceaccount thanos && oc describe -n openshift-ingress-operator serviceaccount thanos출력 예
Name: thanos Namespace: openshift-ingress-operator Labels: <none> Annotations: <none> Image pull secrets: thanos-dockercfg-kfvf2 Mountable secrets: thanos-dockercfg-kfvf2 Tokens: <none> Events: <none>다음 명령을 사용하여 서비스 계정 시크릿 토큰을 수동으로 생성합니다.
$ oc apply -f - <<EOF apiVersion: v1 kind: Secret metadata: name: thanos-token namespace: openshift-ingress-operator annotations: kubernetes.io/service-account.name: thanos type: kubernetes.io/service-account-token EOF서비스 계정의 토큰을 사용하여
openshift-ingress-operator네임스페이스에TriggerAuthentication오브젝트를 정의합니다.TriggerAuthentication오브젝트를 생성하고secret변수 값을TOKEN매개변수에 전달합니다.$ oc apply -f - <<EOF apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: keda-trigger-auth-prometheus namespace: openshift-ingress-operator spec: secretTargetRef: - parameter: bearerToken name: thanos-token key: token - parameter: ca name: thanos-token key: ca.crt EOF
Thanos에서 메트릭을 읽는 역할을 생성하고 적용합니다.
Pod 및 노드에서 지표를 읽는 새 역할
thanos-metrics-reader.yaml을 생성합니다.thanos-metrics-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: thanos-metrics-reader namespace: openshift-ingress-operator rules: - apiGroups: - "" resources: - pods - nodes verbs: - get - apiGroups: - metrics.k8s.io resources: - pods - nodes verbs: - get - list - watch - apiGroups: - "" resources: - namespaces verbs: - get다음 명령을 실행하여 새 역할을 적용합니다.
$ oc apply -f thanos-metrics-reader.yaml
다음 명령을 입력하여 서비스 계정에 새 역할을 추가합니다.
$ oc adm policy -n openshift-ingress-operator add-role-to-user thanos-metrics-reader -z thanos --role-namespace=openshift-ingress-operator$ oc adm policy -n openshift-ingress-operator add-cluster-role-to-user cluster-monitoring-view -z thanos참고add-cluster-role-to-user인수는 네임스페이스 간 쿼리를 사용하는 경우에만 필요합니다. 다음 단계에서는 이 인수가 필요한kube-metrics네임스페이스의 쿼리를 사용합니다.기본 Ingress 컨트롤러 배포를 대상으로 하는 새 scaled
ObjectYAML 파일ingress-autoscaler.yaml을 만듭니다.scaled
Object정의의 예apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: ingress-scaler namespace: openshift-ingress-operator spec: scaleTargetRef:1 apiVersion: operator.openshift.io/v1 kind: IngressController name: default envSourceContainerName: ingress-operator minReplicaCount: 1 maxReplicaCount: 202 cooldownPeriod: 1 pollingInterval: 1 triggers: - type: prometheus metricType: AverageValue metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:90913 namespace: openshift-ingress-operator4 metricName: 'kube-node-role' threshold: '1' query: 'sum(kube_node_role{role="worker",service="kube-state-metrics"})'5 authModes: "bearer" authenticationRef: name: keda-trigger-auth-prometheus- 1
- 대상으로 하는 사용자 정의 리소스입니다. 이 경우 Ingress 컨트롤러입니다.
- 2
- 선택사항: 최대 복제본 수입니다. 이 필드를 생략하면 기본 최대값이 100개의 복제본으로 설정됩니다.
- 3
openshift-monitoring네임스페이스의 Thanos 서비스 끝점입니다.- 4
- Ingress Operator 네임스페이스입니다.
- 5
- 이 표현식은 배포된 클러스터에 많은 작업자 노드가 있는 것으로 평가됩니다.중요
네임스페이스 간 쿼리를 사용하는 경우
serverAddress필드에서 포트 9091이 아닌 포트 9091을 대상으로 지정해야 합니다. 또한 이 포트에서 메트릭을 읽을 수 있는 높은 권한이 있어야 합니다.
다음 명령을 실행하여 사용자 정의 리소스 정의를 적용합니다.
$ oc apply -f ingress-autoscaler.yaml
검증
다음 명령을 실행하여 기본 Ingress 컨트롤러가
kube-state-metrics쿼리에서 반환된 값과 일치하도록 확장되었는지 확인합니다.grep명령을 사용하여 Ingress 컨트롤러 YAML 파일에서 복제본 수를 검색합니다.$ oc get -n openshift-ingress-operator ingresscontroller/default -o yaml | grep replicas:openshift-ingress프로젝트에서 Pod를 가져옵니다.$ oc get pods -n openshift-ingress출력 예
NAME READY STATUS RESTARTS AGE router-default-7b5df44ff-l9pmm 2/2 Running 0 17h router-default-7b5df44ff-s5sl5 2/2 Running 0 3d22h router-default-7b5df44ff-wwsth 2/2 Running 0 66s