Contents
概要
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-02pod/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の導入