Kubernetes MetalLBの導入

目次に戻る

概要

https://metallb.universe.tf/installation/

MetalLBを導入します。

手順

kube-proxyの設定変更

公式サイトによると「IPVSモードでkube-proxyを使用している場合、Kubernetes v1.14.2以降、strictARPを有効にする必要があります」とのことなので変更します。少々記載順が異なりますが気にせず変更します。

root@k8s-01:~# kubectl edit configmap -n kube-system kube-proxy

apiVersion: v1
data:
  config.conf: |-
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    bindAddress: 0.0.0.0
    bindAddressHardFail: false
    clientConnection:
      acceptContentTypes: ""
      burst: 0
      contentType: ""
      kubeconfig: /var/lib/kube-proxy/kubeconfig.conf
      qps: 0
    clusterCIDR: 10.255.0.0/16
    configSyncPeriod: 0s
    conntrack:
      maxPerCore: null
      min: null
      tcpCloseWaitTimeout: null
      tcpEstablishedTimeout: null
    detectLocalMode: ""
    enableProfiling: false
    healthzBindAddress: ""
    hostnameOverride: ""
    iptables:
      masqueradeAll: false
      masqueradeBit: null
      minSyncPeriod: 0s
      syncPeriod: 0s
    ipvs:
      excludeCIDRs: null
      minSyncPeriod: 0s
      scheduler: ""
      strictARP: true
      syncPeriod: 0s
      tcpFinTimeout: 0s
      tcpTimeout: 0s
      udpTimeout: 0s

MetalLBのインストール

公開されているManifestからMetalLBをインストールします。

root@k8s-01:~# kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml

namespace/metallb-system created

root@k8s-01:~# kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml

Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
podsecuritypolicy.policy/controller configured
podsecuritypolicy.policy/speaker configured
serviceaccount/controller created
serviceaccount/speaker created
clusterrole.rbac.authorization.k8s.io/metallb-system:controller configured
clusterrole.rbac.authorization.k8s.io/metallb-system:speaker configured
role.rbac.authorization.k8s.io/config-watcher created
role.rbac.authorization.k8s.io/pod-lister created
role.rbac.authorization.k8s.io/controller created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:controller unchanged
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:speaker unchanged
rolebinding.rbac.authorization.k8s.io/config-watcher created
rolebinding.rbac.authorization.k8s.io/pod-lister created
rolebinding.rbac.authorization.k8s.io/controller created
daemonset.apps/speaker created
deployment.apps/controller created

MetalLBステータス確認

Namespace

Namespaceにmetallb-systemが追加されています。

root@k8s-01:~# kubectl get namespace

NAME                 STATUS   AGE
metallb-system       Active   2m17s

metallb-system内のオブジェクト

各オブジェクトが正常であることを確認します。

root@k8s-01:~# kubectl get all -n metallb-system -o wide

NAME                              READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
pod/controller-7dcc8764f4-gp4lx   1/1     Running   0          20m   10.255.179.13   k8s-02              
pod/speaker-2kp52                 1/1     Running   0          20m   192.168.68.12   k8s-02              
pod/speaker-wjjsl                 1/1     Running   0          20m   192.168.68.11   k8s-01              

NAME                     DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE   CONTAINERS   IMAGES                            SELECTOR
daemonset.apps/speaker   2         2         2       2            2           kubernetes.io/os=linux   20m   speaker      quay.io/metallb/speaker:v0.11.0   app=metallb,component=speaker

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                               SELECTOR
deployment.apps/controller   1/1     1            1           20m   controller   quay.io/metallb/controller:v0.11.0   app=metallb,component=controller

NAME                                    DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                               SELECTOR
replicaset.apps/controller-7dcc8764f4   1         1         1       20m   controller   quay.io/metallb/controller:v0.11.0   app=metallb,component=controller,pod-template-hash=7dcc8764f4

192.168.68.11, 192.168.68.12はNodeのIPアドレスですが、PodのIPに割り当てられていますね!?別途調査したいと思います。

MetalLBの設定

シンプルにlayer2で構成します。addresses部分はNodeのネットワークアドレス内から割り当てます。

root@k8s-01:~# vim /root/k8s/yaml/metallb-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.68.50-192.168.68.59

root@k8s-01:~# kubectl apply -f /root/k8s/yaml/metallb-config.yaml

configmap/config created

MetalLBの削除

やり直す場合はNamespace:metallb-systemを削除します。

root@k8s-01:~# kubectl delete namespace metallb-system

namespace "metallb-system" deleted

目次に戻る

Kubernetes MetalLBの導入

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る