This page looks best with JavaScript enabled

おうちKubernetesでたわむれる (2) ~MetalLB導入編~

 ·  ☕ 3 min read  ·  ✍️ [Capr1]

おうちKubernetesでたわむれる (2) ~MetalLB導入編~

MetalLBとは

MetalLBとは、ベアメタル環境で使用できるKubernetesのExternal Load Balancerの実装の一種で、ベアメタル環境Kubernetes用のL2ロードバランサー機能を提供してくれます.
MetalLBを追加することで、指定したレンジでIPアドレスを取得し、そのIPをエンドポイントとしてLAN内にServiceを公開できるようになります.

MetalLB導入

早速、構築済みのおうちKubernetesクラスタにMetalLBを導入していきます.

基本的に以下の手順に従えば導入できます.
Installation - MetalLB

まず、以下のコマンドを実行し、MetalLB用のnamespaceを作成します.

$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml

次に以下のコマンドを実行し、MetalLBのPodとserviceを作成します.

$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml

そして、初めてMetalLBを導入するときのみ、以下のコマンドを実行します.

# On first install only
$ kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

しかし、このままではMetalLBはちゃんと機能しない状態なので、以下のようなConfigMap用のYAMLファイルを作成し、MetalLBがデプロイされた名前空間と同じ名前空間(metallb-system)にkubectl apply -f config.yamlコマンドでConfigMapをデプロイします.
adressesにはDHCP等で取得できるIPアドレスのレンジを指定してください.
筆者の場合は、k8s-master〜k8s-worker3が192.168.xxx.201-204となっているので、192.168.xxx.220-240を割り当てています.

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.xxx.220-192.168.xxx.240

ここまできたら、kubectl get pod,svc -n metallb-systemコマンドを実行し、MetalLBがちゃんと動作してるかどうかを確認します.

$ kubectl get pod,svc -n metallb-system
NAME                              READY   STATUS    RESTARTS   AGE
pod/controller-65db86ddc6-v858x   1/1     Running   0          34m
pod/speaker-5hj9k                 1/1     Running   0          34m
pod/speaker-jp5jb                 1/1     Running   0          34m
pod/speaker-pkz6l                 1/1     Running   0          34m
pod/speaker-zbh8v                 1/1     Running   0          34m

またMetalLBが指定したserviceに対してちゃんと外部IPアドレスを割り当ててくれるか確認するために、適当なディレクトリに以下のようなYAMLファイルを作成し、kubectl apply -f xxxx.yamlコマンドで適用させます.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80
  type: LoadBalancer

kubectl get svcコマンドで、serviceを取得し、作成したserviceにExternalIPが割り当てられていることを確認します.

$ kubectl get svc
NAME            TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
kubernetes      ClusterIP      10.96.0.1      <none>          443/TCP        8h
nginx-service   LoadBalancer   10.109.92.10   192.168.0.220   80:31356/TCP   55s

nginx-serviceのExternalIPに書かれている192.168.0.220にブラウザでアクセスしてみる.

welcome-niginx

こんな感じに Welcome to Nginx! のページが表示されれば成功.

最後に

MetalLBの導入ができたので、今度はArgoCDの導入をやる.

Share on

Capr1/カプリ
WRITTEN BY
[Capr1]
Graduate Student / Department of Information Engineering