はじめに
今回は、Red Hat OpenShift LocalにArgoCDを導入してデプロイをやってみたいと思います。
前提環境
今回使用した手元のRed Hat OpenShift Localの環境はこちらです。
- MacBook Pro (13-inch, 2020)
- MacOS Monterey 12.6
- Red Hat OpenShift Localのバージョン 2.12.0
GitHubなどのGitリポジトリを別途用意してある前提です。
準備
OpenShiftでArgoCDを使う場合は、OpenShift GitOps Operatorを導入するというのが有力案ですが、特定のバージョンのArgoCDを利用したいというケースもあるかと思います。
ということで、今回はArgoCDを導入していきます。
ArgoCDのオンラインマニュアルを参照して導入します。
名前空間 argocd を作成して、そこへArgoCDを導入します。
$ oc new-project argocd
$ oc apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
しばらく時間がかかりますが、名前空間argocdのPodが全て起動していることを確認します。
$ oc get pods -n argocd
Argocd のコンソールへログインできるようにサービス argocd-server に対して route を作成します。
以下のyamlファイルを用意して apply します。
kind: Route
apiVersion: route.openshift.io/v1
metadata:
name: argocd-route
namespace: argocd
spec:
to:
kind: Service
name: argocd-server
weight: 100
port:
targetPort: https
tls:
termination: passthrough
insecureEdgeTerminationPolicy: None
wildcardPolicy: None
$ oc apply -f route-argocd-route.yaml -n argocd
これで、Argocd のコンソールを表示できるようになります。![argocd-console-app.png]
adminのパスワードは、argocdプロジェクトのシークレット argocd-initial-admin-secret で参照できます。
無事にログインできると次の画面になります。
次にクライアントツールも用意します。
$ brew install argocd
クライアントツールでもログインできることを確かめておきます。
$ argocd login --insecure argocd-route-argocd.apps-crc.testing
アプリケーションとカスタムリソース定義
アプリケーションは、hello-openshiftを使います。
マニフェストとして以下のYAMLファイルを用意しました。
kind: Deployment
apiVersion: apps/v1
metadata:
name: hello
labels:
app: hello
spec:
replicas: 1
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
deployment: hello
spec:
containers:
- name: hello
image: "openshift/hello-openshift:latest"
kind: Service
apiVersion: v1
metadata:
name: hello
labels:
app: hello
spec:
ports:
- name: 8080-tcp
protocol: TCP
port: 8080
targetPort: 8080
selector:
app: hello
deployment: hello
kind: Route
apiVersion: route.openshift.io/v1
metadata:
name: hello
labels:
app: hello
spec:
to:
kind: Service
name: hello
weight: 100
port:
targetPort: 8080-tcp
wildcardPolicy: None
マニュフェストを置いたリポジトリは以下のようにしました。
├── Dockerfile
├── README.md
├── manifest
│ └── dev-1
│ ├── deployment.yml
│ ├── route.yml
│ └── service.yml
├── requirements.txt
└── src
└── main.py
次に ArgoCD で必要なリソース定義は以下の通りです。
- AppProject: リポジトリとクラスタへのアクセス制限
- Repository: マニフェストのリポジトリへのパスと接続情報を保持
- Application: AppProjectの下でデプロイするプロジェクト毎に作成する。repoのマニフェストのパスとプロジェクトを紐付けする
いずれも ArgoCD のコンソール画面やYAMLファイルをapplyすることで設定できます。
ArgoCDのリソース定義
まずAppProjectを設定します。
ArgoCDのコンソール画面から、Settings -> Projectsを選択します。
そして、+ NEW PROJECTボタンを押します。
プロジェクト名(今回はproject-hello)を入力して、作成ボタンを押します。
作成されたプロジェクトのSOURCE REPOSITORIESを編集して、ソースコードのリポジトリのパスを入力します。次に、DESTINATIONSを編集して、クラスタを指定します。
次にRepositoryを設定します。
ArgoCDのコンソール画面から、Settings -> Repositoriesを選択します。
そして、+ CONNECT REPOボタンを押します。
先ほどのProjectを選択して、RepositoryのURL、sshキーを設定して CONNECT ボタンを押します。
Successfulのステータスが表示されたら成功です。
最後にApplicationを設定します。
ArgoCDのコンソール画面から、Applications を選択します。
そして、+ NEW APPボタンを押します。
Application Nameを入力して、Projectは上で作成したProjectを入力します。
画面をスクロールして、SOURCEの欄にリポジトリとマニフェストが入ったパスを指定します。
画面をスクロールして、DESTINATION欄にCluster URLとNamespace名を入力します。
一番上の CREATE ボタンを押します。
するとアプリケーションが作成されます。
初めはmissingのステータスですが、SYNCボタンを押すと同期が取られて、デプロイが実行されます。
以上