Kubernetes์์ ์คํ๋๋ ๋๋ถ๋ถ์ ์๋น์ค๋ ๋ช
๋ น์ค ๋๋ ๊ตฌ์ฑ ์ฌ์ ์์์ ํ์ฅํ ์ ์์ต๋๋ค. overrides.yaml
ํ์ผ์์ Apigee Hybrid ๋ฐํ์ ์๋น์ค์ ๋ํ ํ์ฅ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์๋น์ค | ๊ตฌํ ๋ฐฉ์ | ํ์ฅ |
---|---|---|
Cassandra | ApigeeDatastore(CRD) | Cassandra ํ์ฅ์ ์ฐธ์กฐํ์ธ์. |
์ธ๊ทธ๋ ์ค/LoadBalancer | ๋ฐฐํฌ | Cloud Service Mesh๋ ์ํํ ํฌ๋ ์๋ ํ์ฅ(HPA)์ ์ฌ์ฉํฉ๋๋ค. |
Logger | DaemonSet | DaemonSets๋ ๋ชจ๋ ๋ ธ๋์์ ํฌ๋์ ๋ณต์ ๋ณธ์ ๊ด๋ฆฌํ๋ฏ๋ก ํฌ๋ ์์ฒด๋ฅผ ํ์ฅํ ๋ ํฌ๋๊ฐ ํ์ฅ๋ฉ๋๋ค. |
MART Apigee Connect Watcher |
ApigeeOrganization(CRD) | ๊ตฌ์ฑ์ ํตํด ํ์ฅํ๋ ค๋ฉด mart: replicaCountMax: 2 replicaCountMin: 1 watcher: replicaCountMax: 2 replicaCountMin: 1 connectAgent: replicaCountMax: 2 replicaCountMin: 1 ์ด ๋ฐฐํฌ๋ ์๋ ํ์ฅ์ ์ํํ ํฌ๋ ์๋ ํ์ฅ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐฐํฌ ๊ฐ์ฒด์ ๊ตฌ์ฑ ์์ฑ ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐํ์ ์์ญ ๊ตฌ์ฑ์์ ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์. |
๋ฐํ์ ๋๊ธฐํ ๋ด๋น์ UDCA |
ApigeeEnvironment(CRD) | ๊ตฌ์ฑ์ ํตํด ํ์ฅํ๋ ค๋ฉด ์ฌ์ ์ ํ์ผ์์ udca , synchronizer , runtime ์คํ ์์ ๋ํ replicaCountMin ์์ฑ ๊ฐ์ ๋๋ฆฝ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
synchronizer: replicaCountMax: 10 replicaCountMin: 1 runtime: replicaCountMax: 10 replicaCountMin: 1 udca: replicaCountMax: 10 replicaCountMin: 1 ์ฐธ๊ณ : ์ด ๋ณ๊ฒฝ์ฌํญ์ ์ฌ์ ์ ํ์ผ์ ๋ชจ๋ ํ๊ฒฝ์ ์ ์ฉ๋ฉ๋๋ค. ๊ฐ ํ๊ฒฝ์ ํ์ฅ์ ๋ง์ถค์ค์ ํ๋ ค๋ฉด ์๋์ ๊ณ ๊ธ ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ธ์. ์ด ๋ฐฐํฌ๋ ์๋ ํ์ฅ์ ์ํํ ํฌ๋ ์๋ ํ์ฅ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐฐํฌ ๊ฐ์ฒด์ ๊ตฌ์ฑ ์์ฑ ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐํ์ ์์ญ ๊ตฌ์ฑ์์ ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์. |
๊ณ ๊ธ ๊ตฌ์ฑ
์ผ๋ถ ์๋๋ฆฌ์ค์์๋ ๊ณ ๊ธ ํ์ฅ ์ต์ ์ ์ฌ์ฉํด์ผ ํ ์๋ ์์ต๋๋ค. ์๋๋ฆฌ์ค์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ๊ฒฝ๋ณ๋ก ์๋ก ๋ค๋ฅธ ํ์ฅ ์ต์
์ค์ . ์๋ฅผ ๋ค์ด env1์
minReplica
๊ฐ 5์ด๊ณ env2์minReplica
๊ฐ 2์ธ ๊ฒฝ์ฐ์ ๋๋ค. - ํ๊ฒฝ ๋ด์ ๊ฐ ๊ตฌ์ฑ์์์ ์๋ก ๋ค๋ฅธ ํ์ฅ ์ต์
์ค์ . ์๋ฅผ ๋ค์ด
udca
๊ตฌ์ฑ์์์maxReplica
๊ฐ 5์ด๊ณsynchronizer
๊ตฌ์ฑ์์์maxReplica
๊ฐ 2์ธ ๊ฒฝ์ฐ์ ๋๋ค.
๋ค์ ์์์์๋ kubernetes patch
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ runtime
๊ตฌ์ฑ์์์ maxReplicas
์์ฑ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
- ๋ค์ ๋ช
๋ น์ด์ ํจ๊ป ์ฌ์ฉํ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค.
export ENV_NAME=my-environment-name
export ENV_RELEASE_NAME=$ENV_NAME # the Helm release name for the environment
export APIGEE_NAMESPACE=apigee #the namespace where Apigee is deployed
export COMPONENT=runtime #can be udca or synchronizer
export MAX_REPLICAS=2
export MIN_REPLICAS=1
- ํจ์น๋ฅผ ์ ์ฉํฉ๋๋ค. ์ด ์์์์๋
kubectl
์ดPATH
์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.kubectl patch apigeeenvironment -n $APIGEE_NAMESPACE \ $(kubectl get apigeeenvironments -n $APIGEE_NAMESPACE -o jsonpath='{.items[?(@.spec.name == "'$ENV'" )]..metadata.name}') \ --patch "$(echo -e "spec:\n components:\n $COMPONENT:\n autoScaler:\n maxReplicas: $MAX_REPLICAS\n minReplicas: $MIN_REPLICAS")" \ --type merge
- ๋ณ๊ฒฝ๋ ๊ฒ์ ํ์ธํฉ๋๋ค.
kubectl get hpa -n $APIGEE_NAMESPACE
ํ๊ฒฝ ๊ธฐ๋ฐ ํ์ฅ
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฅ์ ์กฐ์ง ์์ค์์ ์ค๋ช
๋ฉ๋๋ค. ๋ค์ ์์์ ๊ฐ์ด overrides.yaml
ํ์ผ์ ํ๊ฒฝ๋ณ ํ์ฅ์ ์ง์ ํ์ฌ ๊ธฐ๋ณธ ์ค์ ์ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
envs: # Apigee environment name - name: ENV_NAME> components: # Environment-specific scaling override # Otherwise, uses scaling defined at the respective root component runtime: replicaCountMin: 2 replicaCountMax: 20
์ธก์ ํญ๋ชฉ ๊ธฐ๋ฐ ํ์ฅ
์ธก์ ํญ๋ชฉ ๊ธฐ๋ฐ ํ์ฅ์ ์ฌ์ฉํ๋ฉด ๋ฐํ์์์ CPU์ ์ ํ๋ฆฌ์ผ์ด์
์ธก์ ํญ๋ชฉ์ ์ฌ์ฉํ์ฌ apigee-runtime
ํฌ๋๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
Kubernetes ์ํํ ํฌ๋ ์๋ ํ์ฅ ์ฒ๋ฆฌ(HPA) API๋ hpaBehavior
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์๋น์ค์ ์์ง ํ์ฅ ๋์๊ณผ ์ถ์ ๋์์ ๊ตฌ์ฑํฉ๋๋ค.
ํ์ด๋ธ๋ฆฌ๋ ๋ฐฐํฌ์ ๋ค๋ฅธ ๊ตฌ์ฑ์์์๋ ์ธก์ ํญ๋ชฉ ๊ธฐ๋ฐ ํ์ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์ ์ธก์ ํญ๋ชฉ์ ๊ธฐ์ค์ผ๋ก ํ์ฅ์ ์กฐ์ ํ ์ ์์ต๋๋ค.
์ธก์ ํญ๋ชฉ | ์ธก์ | ๊ณ ๋ ค์ฌํญ |
---|---|---|
serverMainTaskWaitTime | ํ๋ก์ ์์ฒญ์ด ์ ์ฑ ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ฐํ์ ์ธ์คํด์ค์์ ์ฒ๋ฆฌํ๋ ํ์ ํ๊ท ๋๊ธฐ ์๊ฐ(๋ฐ๋ฆฌ์ด)์ ๋๋ค. | ์ด ์ธก์ ํญ๋ชฉ์ ํ๋ก์ ์์ฒญ ํ๋ฆ์ ์ฐ๊ฒฐ๋ ์ ์ฑ ์์ ๋ณต์ก์ฑ์ ์ํฅ์ ์ธก์ ํฉ๋๋ค. |
serverNioTaskWaitTime | http ๋ ์ด์ด์์ ํ๋ก์ ์์ฒญ์ ๋ฐํ์ ์ธ์คํด์ค์์ ์ฒ๋ฆฌํ๋ ํ์ ํ๊ท ๋๊ธฐ ์๊ฐ(๋ฐ๋ฆฌ์ด)์ ๋๋ค. | ์ด ์ธก์ ํญ๋ชฉ์ ํ๋ก์ ์์ฒญ ๋ฐ ์๋ต์ ์์ ํ์ด๋ก๋ ํฌ๊ธฐ์ ์ํฅ์ ์ธก์ ํฉ๋๋ค. |
overrides.yaml
์ runtime
์คํ ์์ ๋ค์ ์์์์๋ ํ์ด๋ธ๋ฆฌ๋ ๊ตฌํ์์ apigee-runtime
ํฌ๋๋ฅผ ํ์ฅํ ์ ์๋ ํ์ค ๋งค๊ฐ๋ณ์(๋ฐ ํ์ฉ ๋ฒ์)๋ฅผ ๋ณด์ฌ์ค๋๋ค.
runtime: # the following parameters configure metrics-based scaling hpaMetrics: serverMainTaskWaitTime: 400M # (range: 300M to 450M) serverNioTaskWaitTime: 400M # (range: 300M to 450M) targetCPUUtilizationPercentage: 75 hpaBehavior: scaleDown: percent: periodSeconds: 60 # (range: 30 - 180) value: 20 # (range: 5 - 50) pods: periodSeconds: 60 # (range: 30 - 180) value: 2 # (range: 1 - 15) selectPolicy: Min stabilizationWindowSeconds: 120 # (range: 60 - 300) scaleUp: percent: periodSeconds: 60 # (range: 30 - 120) value: 20 # (range: 5 - 100) pods: periodSeconds: 60 # (range: 30 - 120) value: 4 # (range: 2 - 15) selectPolicy: Max stabilizationWindowSeconds: 30 # (range: 30 - 120)
๊ฐ ํ๊ฒฝ์ apigee-runtime
์ฐจํธ๋ฅผ ์
๋ฐ์ดํธํ์ฌ ์ด๋ฌํ ์ค์ ์ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
helm upgrade $ENV_RELEASE_NAME apigee-runtime/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set env=$ENV_NAME \ -f overrides.yaml
์ธก์ ํญ๋ชฉ ๊ธฐ๋ฐ ํ์ฅ ์ฌ์ฉ ์ค์ ๋๋ ์ฌ์ฉ ์ค์ง
์ธก์ ํญ๋ชฉ ๊ธฐ๋ฐ ํ์ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ ์ค์ ๋์ด ์์ต๋๋ค. customAutoscaling.enabled
์์ฑ์ true
๋๋ false
๋ก ์ค์ ํ์ฌ ์ธก์ ํญ๋ชฉ ๊ธฐ๋ฐ ํ์ฅ์ ์ฌ์ฉ ์ค์ ํ๊ฑฐ๋ ์ฌ์ฉ ์ค์งํ ์ ์์ต๋๋ค. apigee-telemetry
์ฐจํธ๋ฅผ ์
๋ฐ์ดํธํ์ฌ customAutoscaling.enabled
์์ฑ์ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
helm upgrade telemetry apigee-telemetry/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
๋์ฑ ์ ๊ทน์ ์ธ ํ์ฅ ๊ตฌ์ฑ
์์ง ํ์ฅ ์ ์ฑ
์ percent
๊ฐ๊ณผ pods
๊ฐ์ ๋๋ฆฌ๋ฉด ๋์ฑ ์ ๊ทน์ ์ธ ์์ง ํ์ฅ ์ ์ฑ
์ด ๋ฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก scaleDown
์์ percent
๊ฐ๊ณผ pods
๊ฐ์ ๋๋ฆฌ๋ฉด ์ ๊ทน์ ์ธ ์ถ์ ์ ์ฑ
์ด ์ ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
runtime: # ... hpaMetrics: serverMainTaskWaitTime: 400M serverNioTaskWaitTime: 400M targetCPUUtilizationPercentage: 75 hpaBehavior: scaleDown: percent: periodSeconds: 60 value: 20 pods: periodSeconds: 60 value: 4 selectPolicy: Min stabilizationWindowSeconds: 120 scaleUp: percent: periodSeconds: 60 value: 30 pods: periodSeconds: 60 value: 5 selectPolicy: Max stabilizationWindowSeconds: 30
์ ์์์์ scaleDown.pods.value
๋ 5๋ก, scaleUp.percent.value
๋ 30์ผ๋ก, scaleUp.pods.value
๋ 5๋ก ์ฆ๊ฐ๋ฉ๋๋ค.
๋ ์ ๊ทน์ ์ธ ํ์ฅ ๊ตฌ์ฑ
hpaBehavior
๊ตฌ์ฑ ๊ฐ์ ์ค์ฌ ๋ ์ ๊ทน์ ์ธ ์์ง ํ์ฅ ์ ์ฑ
๊ณผ ์ถ์ ์ ์ฑ
์ ๊ตฌํํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
runtime: # ... hpaMetrics: serverMainTaskWaitTime: 400M serverNioTaskWaitTime: 400M targetCPUUtilizationPercentage: 75 hpaBehavior: scaleDown: percent: periodSeconds: 60 value: 10 pods: periodSeconds: 60 value: 1 selectPolicy: Min stabilizationWindowSeconds: 180 scaleUp: percent: periodSeconds: 60 value: 20 pods: periodSeconds: 60 value: 4 selectPolicy: Max stabilizationWindowSeconds: 30
์ ์์์์ scaleDown.percent.value
๋ 10์ผ๋ก, scaleDown.pods.value
๋ 1๋ก, scaleUp.stablizationWindowSeconds
๋ 180์ผ๋ก ๊ฐ์๋ฉ๋๋ค.
hpaBehavior
ํ๋๋ฅผ ์ฌ์ฉํ๋ ์ธก์ ํญ๋ชฉ ๊ธฐ๋ฐ ํ์ฅ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ์ฅ ์ ์ฑ
์ ์ฐธ์กฐํ์ธ์.
๋ฌธ์ ํด๊ฒฐ
์ด ์น์ ์์๋ ํ์ฅ๊ณผ ์๋ ํ์ฅ์ ๊ตฌ์ฑํ๋ ๋์ ๋ฐ์ํ ์ ์๋ ์ผ๋ฐ์ ์ธ ์ค๋ฅ์ ๋ํ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
HPA์์๋ ์ธก์ ํญ๋ชฉ ๊ฐ์ unknown
ํ์
์ธก์ ํญ๋ชฉ ๊ธฐ๋ฐ ํ์ฅ์ด ์๋ํ์ง ์๊ณ HPA์์ ์ธก์ ํญ๋ชฉ ๊ฐ์ unknown
์ ํ์ํ๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ HPA ์ถ๋ ฅ์ ํ์ธํฉ๋๋ค.
kubectl describe hpa HPA_NAME
๋ช ๋ น์ด๋ฅผ ์คํํ ๋ HPA_NAME์ ๋ณด๋ ค๋ HPA์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
์ถ๋ ฅ์๋ CPU ๋ชฉํ์ ์๋น์ค ์ฌ์ฉ๋ฅ ์ด ํ์๋์ด ์ธก์ ํญ๋ชฉ ๊ธฐ๋ฐ ํ์ฅ์ด ์์ ๋ CPU ํ์ฅ์ด ์๋ํ ๊ฒ์์ ๋ํ๋ ๋๋ค. ์ฌ๋ฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ HPA ๋์์ ์ฌ๋ฌ ์ธก์ ํญ๋ชฉ์ผ๋ก ํ์ฅ์ ์ฐธ์กฐํ์ธ์.