🌍 利用可能な言語: English | 中文 (Chinese) | 日本語 (Japanese) | Español (Spanish)
注: これは素晴らしいクラウドネイティブコミュニティの🌟貢献者によってもたらされました!
この短いチュートリアルでは、ArgoCDを使用してステージング環境パイプラインをセットアップします。カンファレンスアプリケーションのインスタンスを含む環境を構成します。
ステージング環境の設定はGitリポジトリを使用して定義します。argo-cd/staging
ディレクトリには、複数のKubernetesクラスタに同期できるHelmチャートの定義が含まれています。
- Kubernetesクラスタが必要です。このチュートリアルではKinDを使用します
- クラスタにArgoCDをインストールします。こちらの手順に従い、オプションで
argocd
CLIをインストールします - アプリケーションの設定を変更したい場合は、このリポジトリをフォーク/コピーする必要があります。リポジトリへの書き込みアクセスが必要です。
chapter-4/argo-cd/staging/
ディレクトリを使用します
nginx-ingressコントローラーを使用してクラスタが稼働したら、クラスタにArgo CDをインストールしましょう:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
以下のような出力が表示されるはずです:
> kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
namespace/argocd created
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/applicationsets.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created
serviceaccount/argocd-application-controller created
serviceaccount/argocd-applicationset-controller created
serviceaccount/argocd-dex-server created
serviceaccount/argocd-notifications-controller created
serviceaccount/argocd-redis created
serviceaccount/argocd-repo-server created
serviceaccount/argocd-server created
role.rbac.authorization.k8s.io/argocd-application-controller created
role.rbac.authorization.k8s.io/argocd-applicationset-controller created
role.rbac.authorization.k8s.io/argocd-dex-server created
role.rbac.authorization.k8s.io/argocd-notifications-controller created
role.rbac.authorization.k8s.io/argocd-server created
clusterrole.rbac.authorization.k8s.io/argocd-application-controller created
clusterrole.rbac.authorization.k8s.io/argocd-server created
rolebinding.rbac.authorization.k8s.io/argocd-application-controller created
rolebinding.rbac.authorization.k8s.io/argocd-applicationset-controller created
rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
rolebinding.rbac.authorization.k8s.io/argocd-notifications-controller created
rolebinding.rbac.authorization.k8s.io/argocd-redis created
rolebinding.rbac.authorization.k8s.io/argocd-server created
clusterrolebinding.rbac.authorization.k8s.io/argocd-application-controller created
clusterrolebinding.rbac.authorization.k8s.io/argocd-server created
configmap/argocd-cm created
configmap/argocd-cmd-params-cm created
configmap/argocd-gpg-keys-cm created
configmap/argocd-notifications-cm created
configmap/argocd-rbac-cm created
configmap/argocd-ssh-known-hosts-cm created
configmap/argocd-tls-certs-cm created
secret/argocd-notifications-secret created
secret/argocd-secret created
service/argocd-applicationset-controller created
service/argocd-dex-server created
service/argocd-metrics created
service/argocd-notifications-controller-metrics created
service/argocd-redis created
service/argocd-repo-server created
service/argocd-server created
service/argocd-server-metrics created
deployment.apps/argocd-applicationset-controller created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-notifications-controller created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created
statefulset.apps/argocd-application-controller created
networkpolicy.networking.k8s.io/argocd-application-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-applicationset-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-dex-server-network-policy created
networkpolicy.networking.k8s.io/argocd-notifications-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-redis-network-policy created
networkpolicy.networking.k8s.io/argocd-repo-server-network-policy created
networkpolicy.networking.k8s.io/argocd-server-network-policy created
port-forward
を使用してArgoCDユーザーインターフェースにアクセスできます。新しいターミナルで以下を実行してください:
kubectl port-forward svc/argocd-server -n argocd 8080:443
注意: ArgoCDポッドが起動するまで待つ必要があります。初回実行時は、インターネットからコンテナイメージをフェッチする必要があるため、時間がかかります。
ブラウザでhttp://localhost:8080にアクセスすると、ユーザーインターフェースが表示されます。
注意: デフォルトでは、インストールはHTTPSではなくHTTPを使用して動作します。そのため、警告を受け入れる必要があります(Chromeの「詳細設定」ボタンをクリック)。その後、「localhost(安全ではありません)に進む」を選択してください。
これでログインページに移動します:
ユーザー名はadmin
で、ArgoCDダッシュボードのパスワードを取得するには以下を実行します:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
ログインすると、空のホーム画面が表示されます:
それでは、ステージング環境をセットアップしましょう。
このチュートリアルでは、単一の名前空間をステージング環境の現に使用します。Argo CDには制限がなく、ステージング環境を完全に別のKubernetesクラスタにすることもできます。
まず、ステージング環境用の名前空間を作成しましょう:
kubectl create ns staging
以下のような出力が表示されるはずです:
> kubectl create ns staging
namespace/staging created
注意: 代替として、ArgoCDアプリケーション作成時に「Auto Create Namespace」オプションを使用することもできます。
Argo CDをインストールしたら、ユーザーインターフェースにアクセスしてプロジェクトをセットアップできます。
**「+ New App」**ボタンをクリックし、以下の詳細を使用してプロジェクトを設定します:
以下は、私が使用したアプリケーション作成の入力内容です:
- アリケーション名: "staging-environment"
- プロジェクト: "default"
- 同期ポリシー: "Automatic"
- ソースリポジトリ: https://github.com/salaboy/platforms-on-k8s(ここであなたのフォークを指定できます)
- リビジョン: "HEAD"
- パス: "chapter-4/argo-cd/staging/"
- クラスタ: "https://kubernetes.default.svc"
- 名前空間: "staging"
他の値はデフォルトのままにして、上部のCreateをクリックします。
アプリケーションが作成されると、Automaticモードを選択したため、自動的に変更が同期されます。
アプリケーションをクリックして展開すると、作成されているすべてのリソースの完全なビューを確認できます:
ローカル環境で実行している場合はport-forward
を使用してアプリケーションにアクセスできます。新しいターミナルで以下を実行してください:
kubectl port-forward svc/frontend -n staging 8081:80
アプリケーションのポッドが起動して実行されるのを待ち、ブラウザでhttp://localhost:8081にアクセスすると、アプリケーションにアクセスできます。
通常通り、kubectl
を使用してポッドとサービスのステータスを監視できます。アプリケーションポッドが準備できているかを確認するには、以下を実行します:
kubectl get pods -n staging
以下のような出力が表示されるはずです:
> kubectl get pods -n staging
NAME READY STATUS RESTARTS AGE
stating-environment-agenda-service-deployment-6c9cbb9695-xj99z 1/1 Running 5 (6m ago) 8m4s
stating-environment-c4p-service-deployment-69d485ffd8-q96z4 1/1 Running 5 (5m52s ago) 8m4s
stating-environment-frontend-deployment-cd76bdc8c-58vzr 1/1 Running 5 (6m3s ago) 8m4s
stating-environment-kafka-0 1/1 Running 0 8m4s
stating-environment-notifications-service-deployment-5c9b5bzb5p 1/1 Running 5 (6m13s ago) 8m4s
stating-environment-postgresql-0 1/1 Running 0 8m4s
stating-environment-redis-master-0 1/1 Running 0 8m4s
注意: いくつかの再起動(RESTARTSカラム)は問題ありません。一部のサービスは、インフラストラクチャ(Redis、PostgreSQL、Kafka)が起動してから健全になる必要があるためです。
サービスのバージョンや設を更新するには、stagingディレクトリ内のChart.yamlファイルまたはvalues.yamlファイルを更新できます。
この例では、ArgoCDアプリケーションの詳細とそのパラメータを更新することで、アプリケーション設定を変更できます。
実際のアプリケーションではこのような操作は行いませんが、ここではステージング環境が定義されているGitHubリポジトリの変更をシミュレートしています。
アプリケーションの詳細/パラメータを編集し、このアプリケーションに使用するvaluesファイルとしてvalues-debug-enabled.yaml
を選択してください。このファイルはフロントエンドサービスにデバッグフラグを設定し、最初のインストールに使用された元のvalues.yaml
ファイルを変更したことをシミュレートしています。
port-forwardingを使用していたため、以下のコマンドを再度実行する必要があるかもしれません:
kubectl port-forward svc/frontend -n staging 8081:80
これは、フロントエンドサービスのポッドが新しく設定されたバージョンに置き換えられるため、port-forwardingを再起動して新しいポッドをターゲットにする必要があるからです。
フロントエンドが起動して実行されると、バックオフィスセクションにデバッグタブが表示されるはずです:
このチュートリアル用に作成したKinDクラスタを削除したい場合は、以下を実行できます:
kind delete clusters dev
Argo CDはGitOpsを実装するための1つのプロジェクトに過ぎません。このチュートリアルをFlux CDで再現できますか?どちらが好みですか?あなたの組織ではすでにGitOpsツールを使用していますか?そのツールを使用してカンファレンスアプリケーションのウォーキングスケルトンをKubernetesクラスタにデプロイするには何が必要でしょうか?
production-environment
のような別の環境を作成し、notifications-service
の新しいリリースがステージング環境から本番環境に移行するためのフローを記述できますか?本番環境の設定をどこに保存しますか?
このチュートリアルでは、Argo CDアプリケーションを使用してステージング環境を作成しました。これにより、GitHubリポジトリ内にある設定を、KinDで稼働しているKubernetesクラスタに同期させることができました。GitHubリポジトリの内容を変更してArgoCD アプリケーションを更新すると、ArgoCDは環境が同期されていないことに気づきます。自動同期戦略を使用している場合、ArgoCDは設定に変更があったことに気づくたびに、自動的に同期ステップを実行します。詳細については、プロジェクトのウェブサイトまたは私のブログをチェックしてください。
このチュートリアルを改善したいですか?イシューを作成するか、Twitterでメッセージを送るか、プルリクエストを送信してください。