MetalLBでtype: LoadBalancerを使う

Kubernetesの説明を見るとtype: LoadBalancerのServiceばかり、NodePortにしてるけどなんか寂しい。そんなときRaspberry Piにインストール手順を調べていたら外部LBがなくてもtype: LoadBalancerが使えるようになるMetalLBを知りました。さっそくRaspberry Piにkubernetesクラスタをインストールするでインストールしたkubernetesに入れました。

インストールはapplyするだけ。

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

インストールするとmetallb-system namespaceにいろいろできる。

$ kubectl get all -n metallb-system -o wide
NAME                            READY     STATUS    RESTARTS   AGE       IP           NODE      NOMINATED NODE
pod/controller-9c57dbd4-tnfrc   1/1       Running   0          14m       10.244.2.6   berry-3   <none>
pod/speaker-7wh84               1/1       Running   0          14m       10.0.0.53    berry-3   <none>
pod/speaker-xzbh7               1/1       Running   0          14m       10.0.0.52    berry-2   <none>

NAME                     DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE       CONTAINERS   IMAGES                   SELECTOR
daemonset.apps/speaker   2         2         2         2            2           <none>          14m       speaker      metallb/speaker:v0.7.3   app=metallb,component=speaker

NAME                         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE       CONTAINERS   IMAGES                      SELECTOR
deployment.apps/controller   1         1         1            1           14m       controller   metallb/controller:v0.7.3   app=metallb,component=controller

NAME                                  DESIRED   CURRENT   READY     AGE       CONTAINERS   IMAGES                      SELECTOR
replicaset.apps/controller-9c57dbd4   1         1         1         14m       controller   metallb/controller:v0.7.3   app=metallb,component=controller,pod-template-hash=57138680

以下でConfigMapを作成して設定を入れます。protocolはlayer2とbgpとがありますが、BGPをはなすルーターは持ってないので今回はlayer2。

$ cat l2-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 10.0.0.151-10.0.0.200
$ kubectl apply -f l2-config.yaml

それではtype: LoadBalancerのServiceとDeploymentを作成しましょう。

$ cat armhf-lb.yaml
apiVersion: v1
kind: Service
metadata:
  name: my-hypriot-svc
  labels:
    app: hypriot
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: hypriot
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-hypriot-deploy
  labels:
    app: hypriot
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hypriot
  template:
    metadata:
      labels:
        app: hypriot
    spec:
      containers:
      - name: hypriot 
        image: hypriot/rpi-busybox-httpd
        ports:
        - containerPort: 80
$ kubectl apply -f armhf-lb.yaml

ServiceにEXTERNAL-IPが付与されたのを確かめます。

$ kubectl get svc my-hypriot-svc -o wide
NAME             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE       SELECTOR
my-hypriot-svc   LoadBalancer   10.102.222.71   10.0.0.151    80:31981/TCP   18s       app=hypriot

しばらくしてhttp://10.0.0.151 を開くと本当に表示されました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください