如果您要從 Apigee hybrid 1.0 或 1.1 版本升級,請先升級至 hybrid 1.2 版,再升級至 1.3.6 版。請參閱將 Apigee Hybrid 升級至 1.2 版的操作說明。
升級至 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 附加叢集 - 如果您未在混合式安裝作業中使用 Apigee Connect,請啟用 Apigee Connect。
- 檢查是否已啟用 Apigee Connect API:
gcloud services list | grep apigeeconnect apigeeconnect.googleapis.com Apigee Connect API
- 如果沒有,請啟用 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 入口。從主要混合式目錄:
./tools/create-service-account apigee-watcher ./service-accounts
- 將 Apigee 執行階段代理人角色指派給 Watcher 服務帳戶:
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
。如果您在混合型配置中使用routingRules
,請設計環境群組來複製路由。您必須建立至少一個環境群組。
請參閱「關於環境群組」。
- 更新覆寫檔案:
- 複製覆寫檔案。
- 更新 gcp 和 k8sCluster 節。
下列設定屬性已在混合型 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
with:
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
- 如果覆寫檔案中沒有不重複的例項 ID,請新增一個:
# unique identifier for this installation. 63 chars length limit instanceID: ID
其中 ID 是這類混合式安裝作業的專屬 ID,例如「
my-hybrid-131-installation
」或「acmecorp-hybrid-131
」。 - 將 Watcher (
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 服務網格 (ASM) 1.5.7 以上版本提供的 Istio 發行版本來建立及管理執行階段入口網關。
將 Istio 1.4.6 升級至 ASM 1.5.7 (或更新版本)
- 為盡量減少停機時間,Istio 部署和 HPA 每個都必須至少有兩個副本。執行下列指令,判斷複本數量:
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 檔案內容解壓縮至混合式基礎目錄。例如:
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:
節。這個屬性有助於確保新安裝的混合式 1.3.6 版本會使用與 1.2 版本相同的 Kubernetes 叢集。這是從混合型 1.2 版升級至 1.3.6 以上版本 (或更高版本) 時必須採取的一次性步驟。- 在您要升級 1.2.0 安裝版本的相同 Kubernetes 叢集中,找出現有 Cassandra 的其中一個 IP 位址。
kubectl -n namespace get pods -o wide
其中 namespace 是 Apigee 混合式命名空間。
記下 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 是您編輯過的 overrides.yaml 檔案。
- 在混合式 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 混合式命名空間。
只有在 Pod 就緒時,才繼續執行下一個步驟。
- 套用覆寫值來升級遙測元件,並檢查完成情況:
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:
- 完成混合型 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
值。 - 所有 Pod 都已啟動並執行後,請從覆寫檔案中移除
externalSeedHost
,然後使用--datastore
選項再次執行apigeectl apply
:apigeectl apply --datastore -f overrides_1.3.6.yaml
清除
確認所有 Pod 都已啟動且運作正常,且 ASM 端點適用於新安裝作業後,您就可以進行清理作業:
- Hybrid 1.2 資源。
- 較舊的 Cassandra 執行個體
- Istio 1.4.6 資源。
刪除 Hybrid 1.2.0 資源
- 移除 1.2.0 虛擬主機轉送詳細資料:
$APIGEECTL_HOME-v1.2/apigeectl delete -s virtualhost -f 1.2.0_overrides.yaml
其中 $APIGEECTL_HOME-v1.2 是您備份
apigeectl
1.2 版目錄的目錄。 - 如果端點仍可正常運作,且您已確認所有 1.3.0 元件皆可正常運作,請執行下列指令來刪除混合式 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 pod、刪除舊的 STS,以及刪除 PVC。
bash cas_cleanup.sh Apigee namespace
刪除 Istio 1.4.6 版資源
- 執行下列指令,刪除最新的 Istio 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: