๋ฒ์ 1.3.6์ผ๋ก ์ ๊ทธ๋ ์ด๋ ๊ฐ์
Apigee Hybrid ์ ๊ทธ๋ ์ด๋ ์ ์ฐจ๋ ๋ค์๊ณผ ๊ฐ์ ์น์ ์ผ๋ก ์ ๋ฆฌ๋ฉ๋๋ค.
- ์ค๋น
- ์๋น์ค ๊ณ์ ๋ง๋ค๊ธฐ ๋ฐ ์ ๋ฐ์ดํธ
- ํ๊ฒฝ ๊ทธ๋ฃน ๊ณํ
- ์ฌ์ ์ ํ์ผ ๋ณต์ฌ ๋ฐ ์ ๋ฐ์ดํธ
- Istio ๋ฐ cert-manager ์ ๊ทธ๋ ์ด๋
- Hybrid ๋ฐํ์ ๋ฒ์ 1.3 ์ค์น
- ์ญ์
์ ํ ์กฐ๊ฑด
- Apigee Hybrid ๋ฒ์ 1.2 ์ด์ ๋ฒ์ ์์ ์ ๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ Apigee Hybrid๋ฅผ ๋ฒ์ 1.2๋ก ์ ๊ทธ๋ ์ด๋์ ๋ํ ์๋ด๋ฅผ ์ฐธ์กฐํ์ธ์.
์ค๋น
- (๊ถ์ฅ์ฌํญ) ๋ฒ์ 1.2
$APIGEECTL_HOME/
๋๋ ํฐ๋ฆฌ์ ๋ฐฑ์ ์ฌ๋ณธ์ ๋ง๋ญ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.tar -czvf $APIGEECTL_HOME/../apigeectl-v1.2-backup.tar.gz $APIGEECTL_HOME
- (๊ถ์ฅ์ฌํญ) Cassandra ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ์ ์๋ด์ ๋ฐ๋ผ Cassandra ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐฑ์ ํฉ๋๋ค.
- Kubernetes ํ๋ซํผ์ ๋ค์๊ณผ ๊ฐ์ด ์
๊ทธ๋ ์ด๋ํฉ๋๋ค. ๋์์ด ํ์ํ๋ฉด ํ๋ซํผ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ๋ซํผ ์ ๊ทธ๋ ์ด๋ํ ๋ฒ์ GKE 1.15.x Anthos 1.5 AKS 1.16.x(Anthos ์ฐ๊ฒฐ ํด๋ฌ์คํฐ ์ฌ์ฉ) - Hybrid ์ค์น์์ Apigee Connect๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ Apigee Connect๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
- Apigee Connect API๊ฐ ์ฌ์ฉ ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค.
gcloud services list | grep apigeeconnect apigeeconnect.googleapis.com Apigee Connect API
- ์ฌ์ฉ ์ค์ ๋์ง ์์๋ค๋ฉด Apigee Connect API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
gcloud services enable apigeeconnect.googleapis.com --project $PROJECT_ID
์ฌ๊ธฐ์ $PROJECT_ID๋ Google Cloud ํ๋ก์ ํธ ID์ ๋๋ค.
-
๋ค์ ์์์ ๊ฐ์ด ๋ช ๋ น์ค์์
gcloud
์ธ์ฆ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.TOKEN=$(gcloud auth print-access-token)
ํ ํฐ์ด ์ ๋ ฅ๋์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ์์์ ๊ฐ์ด
echo
๋ฅผ ์ฌ์ฉํฉ๋๋ค.echo $TOKEN
๊ทธ๋ฌ๋ฉด ํ ํฐ์ด ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด๋ก ํ์๋ฉ๋๋ค.
์์ธํ ๋ด์ฉ์ gcloud ๋ช ๋ น์ค ๋๊ตฌ ๊ฐ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์กฐ์ง์์ Apigee Connect๊ฐ ์ฌ์ฉ ์ค์ ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
curl -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG_NAME"
์ฌ๊ธฐ์ $ORG_NAME์ ์กฐ์ง์ ID์ ๋๋ค.
์ถ๋ ฅ์ ๋ค์์ด ํฌํจ๋์๋ค๋ฉด
"name" : "features.mart.connect.enabled", "value" : "true"
Apigee Connect๊ฐ ์ฌ์ฉ ์ค์ ๋ ๊ฒ์ ๋๋ค.
- Apigee Connect๊ฐ ์ฌ์ฉ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ Apigee Connect ์์ด์ ํธ ์ญํ ์ MART ์๋น์ค ๊ณ์ ์ ํ ๋นํฉ๋๋ค.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/apigeeconnect.Agent
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ Apigee Connect๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
curl -H "Authorization: Bearer $TOKEN" -X PUT \ -H "Content-Type: application/json" \ -d '{ "name" : "'"$ORG_NAME"'", "properties" : { "property" : [ { "name" : "features.hybrid.enabled", "value" : "true" }, { "name" : "features.mart.connect.enabled", "value" : "true" } ] } }' \ "https://apigee.googleapis.com/v1/organizations/$ORG_NAME"
์ถ๋ ฅ์ ๋ค์ ๋ ์์ฑ์ด ํฌํจ๋๋ฉด Apigee Connect๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉ ์ค์ ๋ ๊ฒ์ ๋๋ค.
{ "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" }
- Apigee Connect API๊ฐ ์ฌ์ฉ ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค.
apigee-watcher
์๋น์ค ๊ณ์ ์ ๋ง๋ญ๋๋ค. Apigee Watcher๋ v1.3์์ ๋์ ๋ ์๋ก์ด ์๋น์ค ๊ณ์ ์ ๋๋ค. ์กฐ์ง ์์ค์ ๋ณ๊ฒฝ์ฌํญ์ ๋ํ ๋๊ธฐํ ๋ด๋น์๋ฅผ ์ดํผ๊ณ ์ด๋ฌํ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฉํ์ฌ Istio ์ธ๊ทธ๋ ์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.๊ธฐ๋ณธ Hybrid ๋๋ ํฐ๋ฆฌ์์ ๋ค์์ ์คํํฉ๋๋ค.
./tools/create-service-account apigee-watcher ./service-accounts
- Apigee ๋ฐํ์ ์์ด์ ํธ ์ญํ ์ ๊ฐ์์ ์๋น์ค ๊ณ์ ์ ํ ๋นํฉ๋๋ค.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/apigee.runtimeAgent
์ฌ๊ธฐ์
PROJECT_ID
๋ Google Cloud ํ๋ก์ ํธ ID์ ๋๋ค. ์๋น์ค ๊ณ์ ์ด๋ฉ์ผ ์ฃผ์๊ฐ ์ด ํจํด๊ณผ ๋ค๋ฅธ ๊ฒฝ์ฐ ์ ์ ํ๊ฒ ๋ณ๊ฒฝํฉ๋๋ค.์ถ๋ ฅ์๋ ๋ค์์ ํฌํจํ ๋ชจ๋ ์๋น์ค ๊ณ์ ๊ณผ ์ญํ ์ ๋ชฉ๋ก์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
... - members: - serviceAccount:apigee-watcher@hybrid13rc5.iam.gserviceaccount.com role: roles/apigee.runtimeAgent ...
- ๋ผ์ฐํ
ํ ํ๊ฒฝ ๊ทธ๋ฃน์ ๊ณํํฉ๋๋ค.
Apigee Hybrid 1.3์
routingRules
๋์ ํ๊ฒฝ ๊ทธ๋ฃน์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๊ฒฝ๋ก ๋ผ์ฐํ ์ ๊ด๋ฆฌํฉ๋๋ค. Hybrid ๊ตฌ์ฑ์์routingRules
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ผ์ฐํ ์ ๋ณต์ ํ๊ธฐ ์ํด ํ๊ฒฝ ๊ทธ๋ฃน์ ์ค๊ณํฉ๋๋ค.ํ๊ฒฝ ๊ทธ๋ฃน์ ํ๋ ์ด์ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
ํ๊ฒฝ ๊ทธ๋ฃน ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์ฌ์ ์ ํ์ผ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ์ฌ์ ์ ํ์ผ์ ์ฌ๋ณธ์ ๋ง๋ญ๋๋ค.
- gcp ๋ฐ k8sCluster ์คํ ์๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
๋ค์ ๊ตฌ์ฑ ์์ฑ์ Hybrid ๋ฒ์ 1.3์์ ๊ต์ฒด๋์์ต๋๋ค.
gcpRegion
์ดgcp:region
์ผ๋ก ๋ณ๊ฒฝgcpProjectID
์ดgcp:projectID
์ผ๋ก ๋ณ๊ฒฝgcpProjectIDRuntime
์ดgcp:gcpProjectIDRuntime
์ผ๋ก ๋ณ๊ฒฝk8sClusterName
์ดk8s:clusterName
์ผ๋ก ๋ณ๊ฒฝk8sClusterRegion
์ดk8s:clusterRegion
์ผ๋ก ๋ณ๊ฒฝ
์๋ฅผ ๋ค์ด ๋ค์ ๊ตฌ์กฐ๋ฅผ
gcpRegion: gcp region gcpProjectID: gcp project ID gcpProjectIDRuntime: gcp project ID k8sClusterName: name k8sClusterRegion: region
๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊ฟ๋๋ค.
gcp: projectID: gcp project ID region: gcp region gcpProjectIDRuntime: gcp project ID # optional. This is only required if you # want logger/metrics data to be sent in # different gcp project. k8sCluster: name: gcp project ID region: gcp region
- ์ฌ์ ์ ํ์ผ์ ์ด๋ฏธ ๊ณ ์ ํ ์ธ์คํด์ค ์๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
# unique identifier for this installation. 63 chars length limit instanceID: ID
์ฌ๊ธฐ์์ ID๋ '
my-hybrid-131-installation
' ๋๋ 'acmecorp-hybrid-131
'๊ณผ ๊ฐ์ด Hybrid ์ค์น์ ๋ํ ๊ณ ์ ์๋ณ์์ ๋๋ค. - ๊ฐ์์(
apigee-watcher
) ์๋น์ค ๊ณ์ ์ ์ฌ์ ์ ํ์ผ์ ์ถ๊ฐํฉ๋๋ค.# Note: the SA should have the "Apigee Runtime Agent" role watcher: serviceAccountPath: "service account file"
- ์ธก์ ํญ๋ชฉ(
apigee-metrics
) ์๋น์ค ๊ณ์ ์ ์ฌ์ ์ ํ์ผ์ ์ถ๊ฐํฉ๋๋ค.metrics: serviceAccountPath: "service account file"
virtualhosts:
์คํ ์๋ฅผ ์ ๋ฐ์ดํธํ์ฌroutingRules
๋ฅผ ํ๊ฒฝ ๊ทธ๋ฃน์ผ๋ก ๋ฐ๊ฟ๋๋ค.-name:
์ด๋ฆ์ ํ๊ฒฝ ๊ทธ๋ฃน์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค. ๊ฐ ํ๊ฒฝ ๊ทธ๋ฃน์ ํ๋์ฉ ์ฌ๋ฌ ๊ฐ์ ์ด๋ฆ ํญ๋ชฉ์ ํฌํจํ ์ ์์ต๋๋ค.hostAliases:[]
์ด ์ค์ ์ญ์ ํฉ๋๋ค.sslCertPath:
๋ฐsslKeyPath:
ํญ๋ชฉ์ ์ ์งํ๊ฑฐ๋ ์ถ๊ฐํฉ๋๋ค.- ๋ชจ๋
routingRules
ํญ๋ชฉ์ ์ญ์ ํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์์ด
virtualhosts: - name: default hostAliases: - "*.acme.com" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key routingRules: - paths: - /foo - /bar - env: my-environment
๋ค์๊ณผ ๊ฐ์ด ๋ฐ๋๋๋ค.
virtualhosts: - name: example-env-group sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key
mart
๋ฐconnectAgent:
์คํ ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.mart:
์๋์hostAlias:
,sslCertPath:
,sslKeyPath:
ํญ๋ชฉ์ ์ญ์ ํฉ๋๋ค.connectAgent:
์คํ ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.connectAgent:
์๋์serviceAccountPath:
ํญ๋ชฉ์ ์ถ๊ฐํ๊ณ Apigee Connect Agent ์ญํ ์ด ํ ๋น๋ ์๋น์ค ๊ณ์ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค(์ผ๋ฐ์ ์ผ๋ก MART ์๋น์ค ๊ณ์ ).
์๋ฅผ ๋ค๋ฉด ๋ค์์ด
mart: hostAlias: "mart.apigee-hybrid-docs.net" serviceAccountPath: ./service-accounts/hybrid-project-apigee-mart.json sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.key
๋ค์๊ณผ ๊ฐ์ด ๋ฐ๋๋๋ค.
mart: serviceAccountPath: ./service-accounts/hybrid-project-apigee-mart.json connectAgent: serviceAccountPath: ./service-accounts/hybrid-project-apigee-mart.json
Istio ๋ฐ cert-manager ์ ๊ทธ๋ ์ด๋
Apigee Hybrid ๋ฒ์ 1.3์์๋ cert-manager v0.14.2๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ์๋ฅผ ๊ด๋ฆฌ ๋ฐ ํ์ธํ๊ณ , Anthos Service Mesh(ASM) ๋ฒ์ 1.5.7 ์ด์๊ณผ ํจ๊ป ์ ๊ณต๋ Istio ๋ฐฐํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐํ์ ์ธ๊ทธ๋ ์ค ๊ฒ์ดํธ์จ์ด๋ฅผ ์์ฑ ๋ฐ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
Istio 1.4.6์ ASM 1.5.7 ์ด์์ผ๋ก ์ ๊ทธ๋ ์ด๋
- ๋ค์ดํ์์ ์ต์ํํ๊ธฐ ์ํด Istio ๋ฐฐํฌ์ HPA์๋ ๊ฐ๊ฐ ๋ณต์ ๋ณธ์ด 2๊ฐ ์ด์ ์์ด์ผ ํฉ๋๋ค.
๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ๋ณต์ ๋ณธ ์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
kubectl -n istio-system get deployments # list of deployments
kubectl -n istio-system get hpa # list of hpa
- ๋ณต์ ๋ณธ์ด ํ๋๋ง ์๋ ๊ฐ ๋ฐฐํฌ๋ฅผ ์์ ํ๊ณ
replicas:
๋ฅผ2
๊ฐ ์ด์์ผ๋ก ๋๋ฆฝ๋๋ค.kubectl -n istio-system edit deployment name
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
spec: progressDeadlineSeconds: 600 replicas: 2
- ๋ณต์ ๋ณธ์ด ํ๋๋ง ์๋ ๊ฐ HPA๋ฅผ ์์ ํ๊ณ
minReplicas:
๋ฅผ2
๊ฐ ์ด์์ผ๋ก ๋๋ฆฝ๋๋ค.kubectl -n istio-system edit hpa name
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
spec: maxReplicas: 5 minReplicas: 2
- ASM ๋ค์ด๋ก๋ ๋ฐ ์ค์น์ ์ค์น ์๋ด์ ๋ฐ๋ผ ASM์ ๋ค์ด๋ก๋ ๋ฐ ์ค์นํฉ๋๋ค.
- ์ค์น ํ์๋ ๋ฒ์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ 1.5.x๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋์๋์ง ํ์ธํฉ๋๋ค.
./bin/istioctl version client version: 1.5.8-asm.0 apigee-mart-ingressgateway version: citadel version: 1.4.6 galley version: 1.4.6 ingressgateway version: 1.5.8-asm.0 pilot version: 1.4.6 policy version: 1.4.6 sidecar-injector version: 1.4.6 telemetry version: 1.4.6 pilot version: 1.5.8-asm.0 data plane version: 1.4.6 (1 proxies), 1.5.8-asm.0 (2 proxies)
cert-manager ์ ๊ทธ๋ ์ด๋
- ํ์ฌ cert-manager ๋ฐฐํฌ๋ฅผ ์ญ์ ํฉ๋๋ค.
kubectl delete -n cert-manager deployment cert-manager cert-manager-cainjector cert-manager-webhook
- Kubernetes ๋ฒ์ ์ ํ์ธํฉ๋๋ค.
kubectl version
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ Jetstack์์ cert-manager๋ฅผ ์ค์นํฉ๋๋ค.
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.14.2/cert-manager.yaml
Hybrid ๋ฐํ์ ์ค์น
- ๋ณ์์ ์ต์ ๋ฒ์ ๋ฒํธ๋ฅผ ์ ์ฅํฉ๋๋ค.
export VERSION=$(curl -s \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/current-version.txt?ignoreCache=1)
- ๋ณ์๊ฐ ๋ฒ์ ๋ฒํธ๋ก ์ฑ์์ ธ ์๋์ง ํ์ธํฉ๋๋ค. ๋ค๋ฅธ ๋ฒ์ ์ ์ฌ์ฉํ๋ ค๋ฉด ํด๋น ๋ฒ์ ์ ๋์ ํ๊ฒฝ ๋ณ์์ ์ ์ฅํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
echo $VERSION 1.3.6
์ฌ์ฉ ์ค์ธ ์ด์์ฒด์ ์ ํด๋นํ๋ ์ถ์ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.
Mac 64๋นํธ:
curl -LO \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_mac_64.tar.gz
Linux 64๋นํธ:
curl -LO \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_linux_64.tar.gz
Mac 32๋นํธ:
curl -LO \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_mac_32.tar.gz
Linux 32๋นํธ:
curl -LO \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_linux_32.tar.gz
- ํ์ฌ
apigeectl/
๋๋ ํฐ๋ฆฌ์ ์ด๋ฆ์ ๋ฐฑ์ ๋๋ ํฐ๋ฆฌ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.2/
-
๋ค์ด๋ก๋ํ gzip ํ์ผ ์ฝํ ์ธ ๋ฅผ Hybrid ๊ธฐ๋ณธ ๋๋ ํฐ๋ฆฌ์ ์ถ์ถํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
tar xvzf filename.tar.gz -C hybrid-base-directory
cd
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.-
tar ์ฝํ ์ธ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฆ์ ํด๋น ๋ฒ์ ๊ณผ ํ๋ซํผ์ด ํฌํจ๋ ๋๋ ํฐ๋ฆฌ๋ก ํ์ฅ๋ฉ๋๋ค(์:
./apigeectl_1.0.0-f7b96a8_linux_64
). ์ด ๋๋ ํฐ๋ฆฌ์ ์ด๋ฆ์apigeectl
๋ก ๋ฐ๊ฟ๋๋ค.mv apigeectl_1.0.0-f7b96a8_linux_64 apigeectl
apigee-system
์์apigee-resources-install
์์ ์ ์ญ์ ํฉ๋๋ค.kubectl -n apigee-system delete job apigee-resources-install
- ์ด์ CRD๋ฅผ ์ญ์ ํฉ๋๋ค.
kubectl delete crd apigeetelemetries.apigee.cloud.google.com
externalSeedHost
์์ฑ์ ์ฌ์ฉํ์ฌ ์ฌ์ ์ ํ์ผ์cassandra:
์คํ ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด ์์ฑ์ ์ Hybrid ๋ฒ์ 1.3.6 ์ค์น์์ ๋ฒ์ 1.2 ์ค์น์ ๋์ผํ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ๋๋ก ๋์์ค๋๋ค. ์ด ๋จ๊ณ๋ ์ผํ์ฑ์ผ๋ก Hybrid ๋ฒ์ 1.2์์ ๋ฒ์ 1.3.6 ์ด์์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒฝ์ฐ์๋ง ํ์ํฉ๋๋ค.- 1.2.0 ์ค์น๋ฅผ ์
๊ทธ๋ ์ด๋ํ๋ ๋์ผํ Kubernetes ํด๋ฌ์คํฐ์์ ๊ธฐ์กด Cassandra์ IP ์ฃผ์ ์ค ํ๋๋ฅผ ์ฐพ์ต๋๋ค.
kubectl -n namespace get pods -o wide
์ฌ๊ธฐ์ namespace๋ Apigee Hybrid ๋ค์์คํ์ด์ค์ ๋๋ค.
Cassandra ๋ ธ๋์ IP ์ฃผ์๋ฅผ ๊ธฐ๋กํด ๋ก๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
kubectl -n apigee get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE apigee-cassandra-0 1/1 Running 0 33d 10.68.8.24 gke-example-cluster-rc5-apigee-data-c8bf1234-09kc apigee-cassandra-1 1/1 Running 0 16d 10.68.8.33 gke-example-cluster-rc5-apigee-data-c9221ee7-10kc apigee-cassandra-2 1/1 Running 0 23h 10.68.9.11 gke-example-cluster-rc5-apigee-data-d123e456-11kc
externalSeedHost
์์ฑ ๊ฐ์ ์ถ๊ฐํฉ๋๋ค.cassandra: externalSeedHost: Cassandra_node_IP
์ฌ๊ธฐ์ Cassandra_node_IP๋ cassandra ๋ ธ๋์ IP์ ๋๋ค(์์ ์์์์
10.68.8.24
).
- 1.2.0 ์ค์น๋ฅผ ์
๊ทธ๋ ์ด๋ํ๋ ๋์ผํ Kubernetes ํด๋ฌ์คํฐ์์ ๊ธฐ์กด Cassandra์ IP ์ฃผ์ ์ค ํ๋๋ฅผ ์ฐพ์ต๋๋ค.
- ์
apigeectl/
๋๋ ํฐ๋ฆฌ์์apigeectl init
,apigeectl apply
,apigeectl check-ready
๋ฅผ ์คํํฉ๋๋ค.- Hybrid 1.3.6์ ์ด๊ธฐํํฉ๋๋ค.
apigeectl init -f overrides_1.3.yaml
์ฌ๊ธฐ์ overrides_1.3.yaml์ ํธ์ง๋ override.yaml ํ์ผ์ ๋๋ค.
- Hybrid ๋ฒ์ 1.3์์
--dry-run
ํ๋๊ทธ์ ๊ตฌ๋ฌธ์ ์คํ ์ค์ธkubectl
๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.kubectl
์ ๋ฒ์ ์ ํ์ธํฉ๋๋ค.gcloud version
- ํ
์คํธ ์คํ์ผ๋ก ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
kubectl
๋ฒ์ 1.17 ์ดํ:apigeectl apply -f overrides_1.3.yaml --dry-run=true
kubectl
๋ฒ์ 1.18 ์ด์:apigeectl apply -f overrides_1.3.yaml --dry-run=client
- ์ฌ์ ์๋ฅผ ์ ์ฉํฉ๋๋ค. ์ค์น์ ๋ฐ๋ผ ํ๋ก๋์
ํ๊ฒฝ ๋๋ ๋ฐ๋ชจ/์คํ์ฉ ํ๊ฒฝ์ ์๋ด๋ฅผ ์ ํํ์ฌ ๋ฐ๋ฆ
๋๋ค.
ํ๋ก๋์
ํ๋ก๋์ ํ๊ฒฝ์ ๊ฒฝ์ฐ ๊ฐ ํ์ด๋ธ๋ฆฌ๋ ๊ตฌ์ฑ์์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ ๋ค์ ๊ตฌ์ฑ์์๋ก ์งํํ๊ธฐ ์ ์ ์ ๊ทธ๋ ์ด๋๋ ๊ตฌ์ฑ์์์ ์ํ๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.
- ์ฌ์ ์๋ฅผ ์ ์ฉํ์ฌ Cassandra๋ฅผ ์
๊ทธ๋ ์ด๋ํฉ๋๋ค.
apigeectl apply -f overrides_1.3.yaml --datastore
- ์๋ฃ๋ฅผ ํ์ธํฉ๋๋ค.
kubectl -n namespace get pods
์ฌ๊ธฐ์ namespace๋ Apigee Hybrid ๋ค์์คํ์ด์ค์ ๋๋ค.
ํฌ๋๊ฐ ์ค๋น๋ ๊ฒฝ์ฐ์๋ง ๋ค์ ๋จ๊ณ๋ก ์งํํฉ๋๋ค.
- ์ฌ์ ์๋ฅผ ์ ์ฉํ์ฌ ์๊ฒฉ ๋ถ์ ๊ตฌ์ฑ์์๋ฅผ ์
๊ทธ๋ ์ด๋ํ๊ณ ์๋ฃ๋ฅผ ํ์ธํฉ๋๋ค.
apigeectl apply -f overrides_1.3.yaml --telemetry
kubectl -n namespace get pods
- ์ฌ์ ์๋ฅผ ์ ์ฉํ์ฌ ์กฐ์ง ์์ค ๊ตฌ์ฑ์์(MART, Watcher, Apigee Connect)๋ฅผ ์
๊ทธ๋ ์ด๋ํ๊ณ ์๋ฃ๋ฅผ ํ์ธํฉ๋๋ค.
apigeectl apply -f overrides_1.3.yaml --org
kubectl -n namespace get pods
- ์ฌ์ ์๋ฅผ ์ ์ฉํ์ฌ ํ๊ฒฝ์ ์
๊ทธ๋ ์ด๋ํฉ๋๋ค. ๋ค์ ๋ ๊ฐ์ง ์ค์์ ์ ํํ ์ ์์ต๋๋ค.
- ํ ๋ฒ์ ํ๋์ ํ๊ฒฝ์ ์ฌ์ ์๋ฅผ ์ ์ฉํ๊ณ ์๋ฃ๋ฅผ ํ์ธํฉ๋๋ค. ํ๊ฒฝ๋ง๋ค ์ด ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
apigeectl apply -f overrides_1.3.yaml --env env_name
kubectl -n namespace get pods
์ฌ๊ธฐ์ env_name์ ์ ๊ทธ๋ ์ด๋ํ๋ ํ๊ฒฝ์ ์ด๋ฆ์ ๋๋ค.
- ํ ๋ฒ์ ๋ชจ๋ ํ๊ฒฝ์ ์ฌ์ ์๋ฅผ ์ ์ฉํ๊ณ ์๋ฃ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
apigeectl apply -f overrides_1.3.yaml --all-envs
kubectl -n namespace get pods
- ํ ๋ฒ์ ํ๋์ ํ๊ฒฝ์ ์ฌ์ ์๋ฅผ ์ ์ฉํ๊ณ ์๋ฃ๋ฅผ ํ์ธํฉ๋๋ค. ํ๊ฒฝ๋ง๋ค ์ด ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
๋ฐ๋ชจ/์คํ์ฉ
๋๋ถ๋ถ์ ๋ฐ๋ชจ ๋๋ ์คํ์ฉ ํ๊ฒฝ์์๋ ๋ชจ๋ ๊ตฌ์ฑ์์์ ์ฌ์ ์๋ฅผ ํ ๋ฒ์ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ชจ/์คํ์ฉ ํ๊ฒฝ์ ๊ท๋ชจ๊ฐ ํฌ๊ณ ๋ณต์กํ๊ฑฐ๋ ํ๋ก๋์ ํ๊ฒฝ์ ๋น์ทํ๊ฒ ๋ชจ๋ฐฉํ๋ ๊ฒฝ์ฐ ํ๋ก๋์ ํ๊ฒฝ ์ ๊ทธ๋ ์ด๋ ์๋ด๋ฅผ ์ฐธ์กฐํ์ธ์.
apigeectl apply -f overrides_1.3.yaml
- ์ํ๋ฅผ ํ์
ํฉ๋๋ค.
apigeectl check-ready -f overrides_1.3.yaml
์์ธํ ๋ด์ฉ์ GKE Hybrid ์ค์ - 5๋จ๊ณ: GKE์ Hybrid ์ค์น๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์ฌ์ ์๋ฅผ ์ ์ฉํ์ฌ Cassandra๋ฅผ ์
๊ทธ๋ ์ด๋ํฉ๋๋ค.
- Hybrid 1.3์ ์ค์ ํ๊ณ ์คํํ ํ์๋ ๋ชจ๋ Cassandra ๋
ธ๋(์ด์ ๋
ธ๋ ๋ฐ ์ ๋
ธ๋)๊ฐ ๋์ผํ Cassandra ํด๋ฌ์คํฐ์ ํฌํจ๋๋์ง ํ์ธํฉ๋๋ค. Cassandra ๋
ธ๋ ์ค ํ๋์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl -n namespace get pods
kubectl -n namespace exec old Cassandra pod -- nodetool status
๋ค์ ์ถ๋ ฅ ์์์์ 10.68.8.24๋ ๋ฒ์ 1.2.0์์ ๋น๋กฏ๋ ๊ฒ์ด๋ฉฐ
externalSeedHost
๋ก ์ฌ์ฉํ ๋ ธ๋ IP์ ๋๋ค. 10.68.7.11์ ๋ฒ์ 1.3.6์์ ๋น๋กฏ๋ ๊ฒ์ ๋๋ค.Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.68.8.24 379.41 KiB 256 50.8% 11bbd43b-af64-464b-a96d-0d6dd0521de1 ra-1 UN 10.68.7.11 1.35 MiB 256 49.2% 0b4d9e08-f353-413a-b4a9-7d18a8d07e58 ra-1
๊ฐ์ ํด๋ฌ์คํฐ์ ์์ง ์์ ๊ฒฝ์ฐ
externalSeedHost
๊ฐ์ ํ์ธํฉ๋๋ค. - ๋ชจ๋ ํฌ๋๊ฐ ์คํ๋๋ฉด ์ฌ์ ์ ํ์ผ์์
externalSeedHost
๋ฅผ ์ ๊ฑฐํ๊ณ--datastore
์ต์ ์ ์ฌ์ฉํ์ฌapigeectl apply
๋ฅผ ๋ค์ ์คํํฉ๋๋ค.apigeectl apply --datastore -f overrides_1.3.6.yaml
์ญ์
๋ชจ๋ ํฌ๋๊ฐ ์ ์์ด๊ณ ASM ์๋ํฌ์ธํธ๊ฐ ์ ์ค์น์ ์ ํจํจ์ ํ์ธํ ํ ์ญ์ ํ ์ ์์ต๋๋ค.
- Hybrid 1.2 ๋ฆฌ์์ค
- ์ด์ Cassandra ์ธ์คํด์ค
- Istio 1.4.6 ๋ฆฌ์์ค
Hybrid 1.2.0 ๋ฆฌ์์ค ์ญ์
- 1.2.0 virtualHost ๋ผ์ฐํ
์ธ๋ถ์ ๋ณด๋ฅผ ์ญ์ ํฉ๋๋ค.
$APIGEECTL_HOME-v1.2/apigeectl delete -s virtualhost -f 1.2.0_overrides.yaml
์ฌ๊ธฐ์ $APIGEECTL_HOME-v1.2๋
apigeectl
๋ฒ์ 1.2 ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฐฑ์ ํ ๋๋ ํฐ๋ฆฌ์ ๋๋ค. - ์๋ํฌ์ธํธ๊ฐ ๊ณ์ ์ ์์ ์ผ๋ก ์๋ํ๊ณ ์๊ณ 1.3.0 ๊ตฌ์ฑ์์๊ฐ ๋ชจ๋ ์๋ ์ค์์ ํ์ธํ ๊ฒฝ์ฐ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ Hybrid 1.2.0 ๋ฆฌ์์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
$APIGEECTL_HOME-v1.2/apigeectl delete -c "mart,connect-agent,synchronizer,runtime,udca,metrics,logger" \ -f 1.2.0_overrides.yaml
์ด์ Cassandra ์ธ์คํด์ค ์ฌ์ฉ ์ค๋จ
cd
๋ฅผ ์ฌ์ฉํด ์๋ก ์ค์น๋apigeectl
๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.tools/cas_cleanup.sh
์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.์ด ์คํฌ๋ฆฝํธ๋ Cassandra ๋ง์์ ์ด์ Cassandra ํฌ๋๋ฅผ ์ฌ์ฉ ์ค์งํ๊ณ ์ด์ STS๋ฅผ ์ญ์ ํ๋ฉฐ PVC๋ฅผ ์ญ์ ํฉ๋๋ค.
bash cas_cleanup.sh Apigee namespace
Istio ๋ฒ์ 1.4.6 ๋ฆฌ์์ค ์ญ์
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ๊ฐ์ฅ ์ต๊ทผ์ Istio v.1.4.6 ๋ฆฌ์์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
kubectl delete all -n istio-system --selector \ 'app in (apigee-mart-istio-ingressgateway, galley, security, istio-nodeagent, istio-mixer, sidecarInjectorWebhook, istio-mixer)'
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ Istio 1.4.6 ์ค์น์์ ์ด์ ์์
์ ์ญ์ ํฉ๋๋ค.
kubectl -n istio-system delete job istio-init-crd-10-1.4.6
kubectl -n istio-system delete job istio-init-crd-11-1.4.6
kubectl -n istio-system delete job istio-init-crd-14-1.4.6
์๊ณ ํ์ จ์ต๋๋ค. Apigee Hybrid ๋ฒ์ 1.3.6์ผ๋ก ์ฑ๊ณต์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋๋์์ต๋๋ค.
- Hybrid 1.3.6์ ์ด๊ธฐํํฉ๋๋ค.