概要
インターネットに繋がらない環境でArgoCDをデプロイする方法になります。
デプロイ手順
おおまかには以下の手順でデプロイができます。
1. オンライン環境でmanifestとコンテナイメージの取得
2. プライベートコンテナレジストリにコンテナイメージのpush
3. オフライン環境用にインストールmanifestの編集
4. manifestのデプロイ
1. オンライン環境でmanifestとコンテナイメージの取得
オフライン環境でArgoCDを動作させる際に最低限必要な物を取得します。
manifestの取得
以下のコマンドでmanifestを取得します。
今回は現時点で最新版のv.1.2.0-rc2版を使用します。
(8/27に1.2が正式リリースされます)
curl -OL https://raw.githubusercontent.com/argoproj/argo-cd/v1.2.0-rc2/manifests/install.yaml
コンテナイメージの取得
先ほど取得したmanifestのdeploymentを読み、使用しているコンテナイメージを全てローカルに保存します。
docker pull argoproj/argocd:v1.2.0-rc2
docker pull quay.io/dexidp/dex:v2.14.0
docker pull redis:5.0.3
docker save argoproj/argocd:v1.2.0-rc2 > argocd.tar
docker save quay.io/dexidp/dex:v2.14.0 > dex.tar
docker save redis:5.0.3 > redis.tar
2. プライベートコンテナレジストリにコンテナイメージのpush
tarballに固めたコンテナイメージをオフライン環境に持ち込み、プライベートレジストリにpushします
docker load < argocd.tar
docker load < dex.tar
docker load < redis.tar
#各コンテナのIMAGE_IDを取得
docker images
#プライベートレジストリのIP以降の名前は適当に付けてください。
#IMAGE_IDも上記で取得したものに付け替えてください。
docker tag ARGOCD_IMAGE_ID <プライベートレジストリのIPとport>/argocd:v1.2.0-rc2
docker tag DEX_IMAGE_ID <プライベートレジストリのIPとport>/dex:v2.14.0
docker tag REDIS_IMAGE_ID <プライベートレジストリのIPとport>/redis:5.0.3
docker push ARGOCD_IMAGE_ID <プライベートレジストリのIPとport>/argocd:v1.2.0-rc2
docker push DEX_IMAGE_ID <プライベートレジストリのIPとport>/dex:v2.14.0
docker push REDIS_IMAGE_ID <プライベートレジストリのIPとport>/redis:5.0.3
3. オフライン環境用にインストールmanifestの編集
1.で取得したmanifestから最低限以下の点を変更します。
変更点は直接ローカルにダウンロードしたmanifestに書き加えても良いですが、保守性が低いのでkustomizeを使うことをオススメします。kustomizeでの書き方はまた別の記事にします。
- コンテナイメージを2番でpushしたレジストリ内のイメージを使用するように変更
- argocd-serverのServiceをtype:nodeportに変更
オフライン環境のK8sにIngressなんて便利な物は無いのでNodePortを使用します。
公式の手順ではIngressかport-forwardの使用を紹介していてnodeportは紹介されていませんが、問題なく使えます。
4. manifestのデプロイ
準備は終わりました。後はデプロイするだけです。
kubectl create ns argocd
kubectl apply -f install.yaml -n argocd
これでhttps://クラスターのIP:nodeportで指定したport
にアクセスすればArgoCDのログイン画面が表示されます。
注意
基本機能に支障はありませんが、以下のURLを穴あけしないと、毎回初回アクセス時に10秒ほど時間がかかります。
https://fonts.googleapis.com/css?family=Heebo:300,400,500,700
上記サイトにCSSを取りに行っており、オフライン環境では接続できないのでタイムアウトするまで待機することになります。CSSが無い状態でも描画に違和感はありませんでした。
プロキシを使って外に出れる場合は予め穴あけすると良いでしょう。