※ 本記事は、Guido Ferreyraによる”Using Velero to back up your OKE cluster or migrate your workloads from AKS and EKS“を翻訳したものです。

2023年8月16日


Container Engine for Kubernetes (OKE)への移行は、Kubernetesクラスタの実行コストを削減するのに役立ちます。現在のワークロードをOracle Cloud Infrastructure (OCI)に移行する方法を疑問に思うかもしれませんが、それには答えがあります。Veleroは、安全なバックアップとリストア、ディザスタ・リカバリの実行、Kubernetesクラスタ・リソースと永続ボリュームの移行を行うためのオープン・ソース・ツールです。様々なクラウド・プロバイダに異なるプラグインがあります。

OCI Object StorageバケットはS3互換であるため、ソース・クラスタがホストされている場所に関係なく、Amazon Web Services (AWS)プラグインを使用してOCIにバックアップできます。Veleroを使用すると、ポッド、デプロイメント、シークレット、永続ボリューム、クレーム、サービスなどのワークロードをMicrosoft Azure Kubernetes Service (AKS)またはAWS Elastic Kubernetes Service (EKS)からOKEにシームレスに移行できます。また、OKEクラスタのポイントインタイム・バックアップを作成し、新しいもの、別のリージョンなどにリストアすることもできます。

Velero OKEソリューションの概要

A graphic depicting the solution architecture.

オラクルのソリューションは、デプロイメント、サービス、シークレット、永続ボリューム、クレームなど、ソースKubernetesクラスタ(または必要なネームスペース)をバックアップするターゲットとして、S3互換のOCI Object Storageバケットを使用します。Veleroでは、次の例のように、構成済のオブジェクト・ストレージ・バケットにフォルダ階層が作成されます。:

A screenshot of the file hierarchy in Object Storage.顧客秘密キー(S3 APIエンドポイント用)を設定した後、Veleroを使用して、永続ボリュームがアタッチされたNGINXポッドとカスタムindex.htmlファイルを持つAKSクラスタを移行しました。

PS /home/guido> kubectl get pods --namespace nginx       
NAME          READY   STATUS    RESTARTS   AGE 
task-pv-pod   1/1     Running   0          47h 
PS /home/guido> kubectl exec -it task-pv-pod --namespace nginx -- curl localhost 
AKS to OKE Migration with PVC attached

また、Veleroの機能を示すダミー・シークレットを作成しました。:

PS /home/guido> kubectl get secrets --namespace nginx                                               
NAME           TYPE     DATA   AGE 
okemigration   Opaque   1      2s

次のリストア・プロセスの実行後、永続ボリューム内のデータを含むネームスペース全体が移行されました:

gferreyr-mac:~ gferreyr$ velero restore describe nginxoke-20230722145553 
Name:         nginxoke-20230722145553 
Namespace:    velero 
Labels:       <none> 
Annotations:  <none> 
Phase:                       Completed 
Total items to be restored:  7 
Items restored:              7

Started:    2023-07-22 14:55:54 +0300 EEST 
Completed:  2023-07-22 14:56:45 +0300 EEST

..........

gferreyr-mac:~ gferreyr$ kubectl get pod -n nginx 
NAME          READY   STATUS    RESTARTS   AGE 
task-pv-pod   1/1     Running   0          2m15s 
gferreyr-mac:~ gferreyr$ kubectl get secrets -n nginx 
NAME           TYPE     DATA   AGE 
okemigration   Opaque   1      2m21s 
gferreyr-mac:~ gferreyr$ kubectl get pvc -n nginx 
NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE 
task-pv-claim   Bound    csi-d03267f7-32cf-4068-8809-d29aa649dcba   50Gi       RWO            oci-bv         2m31s 
gferreyr-mac:~ gferreyr$

次の文字列は、データが移行されたことを証明するものです。:

gferreyr-mac:~ gferreyr$ kubectl exec task-pv-pod -n nginx -- curl http://localhost 
AKS to OKE Migration with PVC attached

OKEクラスタのみのバックアップまたは別のリージョンへの移行を計画している場合、プロセスは同じです。AWSプラグインを使用してOKEをバックアップし、クラスタにリストアします。サービス・ゲートウェイを設定して、クラスタがオブジェクト・ストレージにアクセスできることを確認します。

さらに詳細が必要ですか?

詳細なステップバイステップ・ガイドについては、チュートリアル「Veleroを使用してAKSクラスタをOKEに移行する方法」を確認してください。リストアの実行時にVeleroがstorageClassNameを変更できるように、チュートリアルで説明されているconfigMapを作成することを忘れないでください。それ以外の場合、ポッドは保留状態のままです。

Veleroの使用方法の詳細については、該当するドキュメントを参照してください。