GitOps を試すために Kubernetes のクラスタと ArgoCD をVPS(VM4台)に構築し、自前サイトをのっけてみた。 そもそも k8s を触ったことなかったので、AWSやGCPのマネジメントクラスタを利用せず、自前で小さいクラスタを構築した。
ひとまず GitOps できる環境構築までは完了。 git リポジトリにプッシュすると k8s クラスタにデプロイできるようになった。 git リポジトリの中身はまだ素のnginx+HTMLファイルみたいな静的サイトなので、次はPHPアプリケーションあたりを試したい。
git リポジトリは GitLab.com (Saas) を利用。Private Container Registry が無料で使えたので。 GitLab.com は yaml をgitに入れておくだけで、プッシュのタイミングでイメージをビルドしてくれて神だった。 kojole.hatenablog.com はじめ registry への認証ができず、どうやら2段階認証がONになっていると docker login が通らないっぽかったのでOFFにした。 ちゃんと認証する方法はありそうなもののサボった。
type: LoadBalancer をこの環境でも使えるように MetaLB(L2), Nginx Ingress Controller を追加でセットアップした。なお type: LoadBalancer が何者かはよくわかっていない。
Nginx Ingress Controller のインストールはかなり詰まって、ここが一番大変だった。 最初はずっとエラーが出て解決しなかったので NodePort でお茶を濁していたものの、マニュアルの Bare-Metal の手順でなく helm でインストールしたらうまく行った。なんでだろう。
エラー内容を保存し忘れたが、たしかこんな感じのやつ(github issueから引っ張ってきた)。
Error from server (InternalError): error when creating "〜": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post https://ingress-nginx-controller-admission.ingress-nginx.svc:443/extensions/v1beta1/ingresses?timeout=30s: context deadline exceeded
↓の手順を見て、 helm インストールした。Install nginx-ingress controller with Helm の見出しの部分(upgradeとなっているが初回だったのでinstallで実行) www.brightbox.com
外部IPをセットしていないので、今は k8s クラスタの前段に素の nginx をリバースプロキシとして置いている。
Kubernets が内部で何をやっているかまったくわからないのがかなり印象的だった。 これをオンプレで管理するの、なかなか難しそう。