おうちk8sにArgoCD(+MetalLB)を導入し作業用PCから繋いでみる
1. はじめに
勉強のため、ラズパイで構築したおうちk8sにArgoCDを導入してGitOpsの環境を構成してみました。
同一LAN上の作業用のPCからargocd-serverのGUIにブラウザ接続するために、MetalLBを使用しました。
構成イメージ
1.1. MetalLBについて
PortForwardせずにArgoCDへのGUI接続を行うために、 type:LoadBalancerを利用する必要がありました。
パブリッククラウドのk8sでは各クラウドのロードバランサーサービスを使って簡単に設定することができますが、オンプレ環境ではそのままではLoadBalancerを利用できません。
MetalLBはこの問題を解決するための、インスタンス不要で疑似的なロードバランサー機能を提供してくれるOSSです。
今回は最も簡単に利用できるL2モードで実装しました。
k8s環境
kubelet v1.32.2
kubeadm v1.32.2
kubectl v1.32.2
containerd v1.7.25
flannel v0.3.1
2. 作業
2.1. MetalLBセットアップ
事前準備
kube-proxyの設定を変更するため、configmapを編集します。
$ kubectl edit configmap -n kube-system kube-proxy
以下のように変更して、保存します。
(私の環境では、mode
が""
、ipvs.strictARP
がfalse
になっていたので、修正しました。)
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
strictARP: true
インストール
HelmでMetalLBをインストールします。
$ cd ~; mkdir metallb; cd metallb
# Namespaceの作成
$ kubectl create ns metal-lb
# インストール
$ helm repo add metallb https://metallb.github.io/metallb
$ helm install metallb metallb/metallb -n metal-lb
IPアドレスの割り当て
続いて、MetalLBで割り当てられるIPアドレスを設定します。
今回は、LANのネットワーク(192.168.11.0/24)から払いだしたIPアドレスを記載したマニフェストを作成し、applyしました。
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default
namespace: metal-lb
spec:
addresses:
- 192.168.11.201-192.168.11.211 # 任意のIPアドレス
autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: default
namespace: metal-lb
spec:
ipAddressPools:
- default
$ kubectl apply -f ipaddresspool.yaml
これで、LoadBalancerをapplyした際に、設定した範囲内でExternalIPが割り当てられるようになりました。
2.2. ArgoCDセットアップ
インストール
Helmでインストールします。
# Namespaceの作成
$ kubectl create ns argocd
# インストール
$ helm repo add argo https://argoproj.github.io/argo-helm
$ helm install argocd argo/argo-cd -n argocd
サービスタイプを変更
argocd-server
サービスのタイプをLoadBalancerに変更します。
# サービスの更新
$ kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
# ExternalIPの確認
$ kubectl get svc argocd-server -n argocd
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-server LoadBalancer 10.98.68.20 192.168.11.202 80:31965/TCP,443:32605/TCP 17m
上記の出力結果より、192.168.11.202 が割り当てられたことが確認できます。
ブラウザでのアクセス
次に、admin のパスワードを以下のコマンドで取得します。
$ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
パスワードが確認できたら、作業用PCから任意のブラウザで http://192.168.11.202/
にアクセスします!
ログイン画面が表示されました!
admin アカウントでログインできることも確認できました。
2.3. ArgoCDのGitHub連携
執筆中
3. まとめ
おうちk8sにArgoCDを導入し、同一LANから操作可能な環境を構成しました。
接続のためにはportforwardかingressという選択肢もありますが、前者は毎回設定しないといけない、後者はDNSや証明書の用意が必要で面倒なので、IPアドレスで入るのが一番楽だと思います。
Discussion