オンプレのKubernetesでロードバランサー(MetalLB)を使う手順

オンプレのKubernetesでロードバランサー(MetalLB)を使う手順

 

★悩み★
・オンプレのKubernetesでロードバランサーって使えないのかな。
・オンプレのKubernetesでtype: LoadBalancerを使う手順を知りたい。
・そもそもロードバランサーって何?また、MetalLBとは、何ですか?



こういった「悩み」に答えます。
 

★本記事の内容★
① Kubernetesのロードバランサー(type: LoadBalancer)とは、何か?を紹介
② オンプレKubernetesでロードバランサー(MetalLB)を使う為の準備を紹介
③ オンプレのKubernetesでロードバランサー(MetalLB)を使う手順を紹介



これからご紹介する「オンプレのKubernetesでロードバランサー(MetalLB)を使う手順」を実践したことで、3時間以内で「オンプレのKubernetesでtype: LoadBalancer」使えました。

記事の前半では「Kubernetesのロードバランサー(type: LoadBalancer)とは、何か?」を解説しつつ、記事の後半では「ロードバランサーの1つであるMatalLBを使う手順」を紹介します。

この記事を読み終えることで、「オンプレのKubernetes上でロードバランサーを利用したPodを作成できる」状態になります。
 

★Kubernetesとは★
Kubernetesを利用することで、マイクロサービスなシステムを構築できます。Kubernetesを利用したマイクロサービスに関して知りたい方は、以下の記事をご覧ください。
 
Kubernetesとマイクロサービスについて



ちなみに、「Kubernetesを体系的に学習したい」方には、以下の記事がお勧めです。
 


 

 


 

【PR】この記事には広告を含む場合があります

Kubernetesのロードバランサー(type: LoadBalancer)とは、何か?

Kubernetesのロードバランサー(type: LoadBalancer)とは、何か?


「Kubernetesのロードバランサー(type: LoadBalancer)とは、何か?」に関してご紹介します。

★Kubernetesのロードバランサーに関するご紹介事項★
・Kubernetesのロードバランサー(type: LoadBalancer)とは?
・オンプレのKubernetesに導入するロードバランサー(MetalLB)とは?



以降で、上記「Kubernetesのロードバランサーに関するご紹介事項」の各項目に関してご説明します。
 

Kubernetesのロードバランサー(type: LoadBalancer)とは?

「Kubernetesのロードバランサー(type: LoadBalancer)とは?」に関してご説明します。
 

図を用いながら、「Kubernetesのロードバランサーとは?」を説明しますね。



Kubernetes上に「アプリケーションのPod」を作成する場合、Deployment経由で作成します。KubernetesのDeployment経由でPodを作成することで、下図のように異なるノード間でPodを作成できます。
 

Kubernetesのロードバランサー(type: LoadBalancer)とは?



ただし、Deployment経由でPodを作成した場合、以下の不都合があります。

・利用者が、どちらか一方に配備したPodのみにアクセスしてしまう
 → アクセス集中によるアプリケーションの性能が劣化
・Podが再起動された場合、PodのIPアドレスが変更されてしまう
 → 再起動前のPodのIPアドレスを記載した手順書などの変更が必要



上記の不都合を解消するために、「Kubernetesのロードバランサー」を利用します。Kubernetesのロードバランサーを利用することで、下図のようにPodにアクセスできるようになります。
 

Kubernetesのロードバランサー(type: LoadBalancer)とは?



LoadBalancer ServiceをKubernetesクラスタに配備後、Service定義ファイルに「type: LoadBalancer」を記載することで、上図のようにロードバランサーを用いたPodを起動できます。

「Kubernetesのロードバランサー(type: LoadBalancer)」を利用することで、以下の利点があります。

・ロードバランサーによって、通信の分散を実現できる
 → 片方のPodへのアクセス集中によるアプリケーションの性能劣化を防止
・ロードバランサーに付与されたIPを利用し、Podへアクセスできる



以上が、「Kubernetesのロードバランサー(type: LoadBalancer)とは?」になります。
 

オンプレのKubernetesに導入するロードバランサー(MetalLB)とは?

「オンプレのKubernetesに導入するロードバランサー(MetalLB)とは?」に関してご説明します。
 

Kubernetes上では、ロードバランサーのサービス(LoadBalancer Service)も配備できます。



MetalLBを使うことで、オンプレのKubernetesでもLoadBalancer Serviceを利用できるようになります。MetalLBは、以下の特徴を有するLoadBalancer Serviceです。

★MetalLBを用いて、できること★
・MetalLbは、Kubernetes上で動作するOSS(無料のソフトウェア)
・オンプレのKubernetesでロードバランサー(type: LoadBalancer)を利用可能
・利用者が設定したIPの範囲から、ロードバランサーにIPを付与
 IPの範囲を「192.168.10.170-192.168.10.200」とした場合、
 ロードバランサーに「192.168.10.171」などが付与される



ちなみに、2021年6月28日時点で、MetalLBのプロジェクトは「β版」となっています。そのため、商用実績は少ないです。商用事例としては、「サイボウズ」があります。
MetalLBの公式サイト


以上が、「オンプレのKubernetesに導入するロードバランサー(MetalLB)とは?」となります。
 

MetalLBを利用することで、オンプレのKubernetesでも「ロードバランサー(type: LoadBalancer)」を使えます。


 

オンプレKubernetesでロードバランサー(MetalLB)を使う為の準備

オンプレKubernetesでロードバランサー(MetalLB)を使う為の準備


「オンプレKubernetesでロードバランサー(MetalLB)を使う為の準備」に関してご紹介します。

★オンプレKubernetesでロードバランサー(MetalLB)を使う為の準備★
手順1:Kubernetesクラスタをオンプレに構築
手順2:構築したオンプレのKubernetesクラスタの状態確認



上記の流れで、「オンプレKubernetesでロードバランサー(MetalLB)を使う為の準備」ができます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年6月3日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)


以降で、上記「オンプレKubernetesでロードバランサー(MetalLB)を使う為の準備」の各手順に関してご説明します。
 

手順1:Kubernetesクラスタをオンプレに構築

「手順1:Kubernetesクラスタをオンプレに構築」に関してご説明します。
 

オンプレKubernetesでロードバランサー(MetalLB)を使うために、Kubernetesクラスタをオンプレに構築しましょう。



「Kubernetesクラスタの構築手順」に関しては、以下の記事をご覧ください。
 



上記手順を実施することで、以下のKubernetesクラスタを構築できます。
 

手順1:Kubernetesクラスタを構築



以降の手順では、上図のKubernetesクラスタを想定として手順を解説します。
  

既にKubernetesクラスタを構築済みである場合、本手順を省略してください。



以上で、「手順1:Kubernetesクラスタをオンプレに構築」は完了です。
 

手順2:構築したオンプレのKubernetesクラスタの状態確認

「手順2:構築したオンプレのKubernetesクラスタの状態確認」に関してご説明します。
 

構築したオンプレのKubernetesにおいて、ロードバランサー(MetalLB)を使える状態になっているかを確認しましょう。



「構築したKubernetesクラスタの状態確認」に関しては、以下の記事「手順2:構築したKubernetesクラスタの状態確認」をご覧ください。
 



以上で、「手順2:構築したオンプレのKubernetesクラスタの状態確認」は完了です。
 

上記の流れで、オンプレKubernetesでロードバランサー(MetalLB)を利用するための準備ができました。

 
 

オンプレのKubernetesでロードバランサー(MetalLB)を使う手順

オンプレのKubernetesでロードバランサー(MetalLB)を使う手順


「オンプレのKubernetesでロードバランサー(MetalLB)を使う手順」に関してご紹介します。

★オンプレのKubernetesでロードバランサー(MetalLB)を使う流れ★
手順1:MetalLBをオンプレのKubernetes上に配備
手順2:オンプレKubernetesに配備したMetalLBの設定
手順3:ロードバランスを利用するPodをオンプレのKubernetesに作成
手順4:オンプレのKubernetesでロードバランサー(MetalLB)の動作確認



上記手順を実施することで、オンプレのKubernetesでロードバランサー(MetalLB)を利用できます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年6月3日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)



以降で、上記「オンプレのKubernetesでロードバランサー(MetalLB)を使う流れ」の各手順に関してご説明します。
 

手順1:MetalLBをオンプレのKubernetes上に配備

「手順1:MetalLBをオンプレのKubernetes上に配備」に関してご説明します。
 

オンプレのKubernetesでロードバランサーを使うために、MetalLBを配備しましょう。



オンプレのKubernetes上にMetalLBを配備するために、マスターで以下のコマンドを順に実行してください。

# kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/namespace.yaml
# kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/metallb.yaml
# kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
# kubectl get ns | grep metallb
metallb-system    Active        2d11h
# kubectl get pod -n metallb-system
NAME                          READY   STATUS             RESTARTS   AGE
controller-64f86798cc-92xww   1/1     Running            3          2d11h
speaker-7zz6v                 1/1     Running            3          2d11h
speaker-hlldb                 1/1     Running            3          2d11h



コマンド実行後、「metallb-system Active」と「controllerとspeakerがRunning」が表示された場合、「MetalLBをオンプレのKubernetes上に配備できた」と判断できます。

以上で、「手順1:MetalLBをオンプレのKubernetes上に配備」は完了です。
 

手順2:オンプレKubernetesに配備したMetalLBの設定

「手順2:オンプレKubernetesに配備したMetalLBの設定」に関してご説明します。
 

オンプレのKubernetesでPodの負荷分散をするためには、MetalLBの設定が必要です。



以下のような「MetalLBの設定ファイル」を作成しましょう。ファイル内の「適宜変更」と書いてある部分は、自分用に書き換えてください。

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.10.170-192.168.10.200 #ロードバランサーに付与したいIPアドレスの範囲を指定(適宜変更)


上記の定義を「l2-configuration.yaml」というファイル名で保存しましょう。保存後、オンプレKubernetesに配備したMetalLBの設定を変更するために、マスターで以下のコマンドを実行してください。

# kubectl create -f l2-configuration.yaml
configmap/config created
# 



コマンド実行後、「configmap/config created」が表示された場合、「オンプレKubernetesに配備したMetalLBの設定を変更できた」と判断できます。

以上で、「手順2:オンプレKubernetesに配備したMetalLBの設定」は完了です。
 

手順3:ロードバランスを利用するPodをオンプレのKubernetesに作成

「手順3:ロードバランスを利用するPodをオンプレのKubernetesに作成」に関してご説明します。
 

Deployment経由で「ロードバランスを利用するPod」をオンプレのKubernetesに作成しましょう。



ロードバランスを利用するPodを作成するために、以下の定義ファイルを作成しましょう。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: sample-http
  name: sample-http
spec:
  replicas: 2
  selector:
    matchLabels:
      app: sample-http
  template:
    metadata:
      labels:
        app: sample-http
    spec:
      containers:
      - image: httpd
        name: httpd
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: sample-http
  name: sample-http
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: sample-http
  type: LoadBalancer



上記の定義を「lb-sample.yaml」というファイル名で保存しましょう。保存後、「ロードバランスを利用するPod」をオンプレKubernetes上に作成するために、マスターで以下のコマンドを順に実行してください。

# kubectl apply -f lb-sample.yaml
deployment.apps/sample-http created
service/sample-http created
# kubectl get pod,svc
NAME                               READY   STATUS      RESTARTS   AGE
pod/sample-http-6c94f59975-2gt8l   1/1     Running     0          47s
pod/sample-http-6c94f59975-xfxzg   1/1     Running     0          47s

NAME                        TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
service/kubernetes          ClusterIP      10.233.0.1      <none>           443/TCP        52d
service/sample-http         LoadBalancer   10.233.21.122   192.168.10.171   80:30278/TCP   47s
# 



コマンド実行後、「service/sample-httpのEXTERNAL-IP部分にIPアドレス」が表示された場合、「ロードバランスを利用するPodを作成できた」と判断できます。



以上で、「手順3:ロードバランスを利用するPodをオンプレのKubernetesに作成」は完了です。
 

手順4:オンプレのKubernetesでロードバランサー(MetalLB)の動作確認

「手順4:オンプレのKubernetesでロードバランサー(MetalLB)の動作確認」に関してご説明します。
 

オンプレのKubernetesに配備したPodで、ロードバランサー(MetalLB)の動作を確認しましょう。



オンプレのKubernetesに配備した1つのPodにログインし、ファイルを書き換えるために、マスターで以下のコマンドを順に実行してください。コマンド内の「適宜変更」と書いてある部分は、自分用に書き換えてください。

# kubectl get pod
NAME                               READY   STATUS      RESTARTS   AGE
pod/sample-http-6c94f59975-2gt8l   1/1     Running     0          47s
pod/sample-http-6c94f59975-xfxzg   1/1     Running     0          47s
# ↓ -it に指定する値は、適宜変更すること ↓
# kubectl exec -it sample-http-6c94f59975-2gt8l /bin/bash
root@sample-http-6c94f59975-2gt8l:/usr/local/apache2#  cat htdocs/index.html
<html><body><h1>It works!</h1></body></html>
root@sample-http-6c94f59975-2gt8l:/usr/local/apache2# echo "kakedashi-xx.com is a good blog." > htdocs/index.html
root@sample-http-6c94f59975-2gt8l:/usr/local/apache2# exit
exit
# 



上記コマンド実行後、オンプレKubernetesでロードバランサー(MetalLB)の動作を確認するために、マスターで以下のコマンドを順に実行してください。コマンド内の「適宜変更」と書いてある部分は、自分用に書き換えてください。

# ↓ 指定するIPアドレスは、service/sample-httpのEXTERNAL-IPに記載されたIPを指定(適宜変更) ↓
# curl 192.168.10.171
kakedashi-xx.com is a good blog.
# curl 192.168.10.171
<html><body><h1>It works!</h1></body></html>
#



上記のように「時々、curlのコマンド結果が異なる」ことが確認できた場合、MetalLBによって、アプリケーションの負荷分散ができたと判断できます。
 

上記の流れで、オンプレのKubernetesでロードバランサー(MetalLB)を使うことができました。



ちなみに、「Kubernetesのアーキテクチャを体系的に学びたい」や「AWSなどのクラウド環境でのロードバランサーの使い方」を知りたい方は、以下の参考書がオススメです。


動画で「Kubernetesのアーキテクチャを体系的に学びたい」や「AWSなどのクラウド環境でのロードバランサーの使い方」を学びたいという方には、以下がオススメです。

Kubernetes入門@udemy

 
 

【まとめ】オンプレのKubernetesでロードバランサー(MetalLB)を使う手順

オンプレのKubernetesでロードバランサー(MetalLB)を使う手順


今回の記事を通して、「オンプレのKubernetesでロードバランサー(MetalLB)を使う手順」をご紹介することで、以下の悩みを解消しました。

★悩み★
・オンプレのKubernetesでロードバランサーって使えないのかな。
・オンプレのKubernetesでtype: LoadBalancerを使う手順を知りたい。
・そもそもロードバランサーって何?また、MetalLBとは、何ですか?



「オンプレのKubernetesでロードバランサーを使う方法ってないの?」や「そもそもロードバランサーって何?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。


 

 


 

コメント

タイトルとURLをコピーしました