GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu18.04LTSのKubernetesクラスターにNginxロードバランシングをデプロイする方法

Kubernetesは、コンテナのデプロイと管理に使用できる無料のオープンソースコンテナオーケストレーションシステムです。これはGoogleによって開発され、自動スケーリングと自動展開のために特別に設計されました。 Kubernetesは、あらゆるクラウドインフラストラクチャとベアメタルで実行できます。 Kubernetesを使用すると、ノードのクラスター全体に複数のアプリケーションを分散できます。 Kubernetesには、自己修復、自動スケーラビリティ、負荷分散、バッチ実行、水平スケーリング、サービスディスカバリ、ストレージオーケストレーションなどの豊富な機能セットが付属しています。

このチュートリアルでは、Ubuntu18.04でKubernetesを使用してNginxの負荷分散を設定する方法を学習します。

要件
  • Ubuntu18.04がインストールされた2台のサーバー。
  • 各サーバーに最低2GBのRAMがインストールされています。
  • ルートパスワードは両方のサーバーで構成されています。
はじめに

まず、両方のサーバーを最新の安定バージョンで更新する必要があります。次のコマンドを実行して更新できます:

apt-get update -y
apt-get upgrade -y

両方のサーバーが更新されたら、それらを再起動してすべての変更を適用します。

デフォルトでは、Kuberenetesはスワップメモリ​​をサポートしておらず、スワップがアクティブな場合は機能しません。したがって、両方のサーバーでスワップメモリ​​を無効にする必要があります。

スワップメモリ​​を一時的に無効にするには、次のコマンドを実行します。

swapoff -a

スワップメモリ​​を無効にするには、/ etc / fstabファイルを永続的に開きます:

nano /etc/fstab

最後の行をコメントアウトします:

# /etc/fstab: static file system information.
#
# use 'blkid' to print the universally unique identifier for a
# device; this may be used with uuid= as a more robust way to name devices
# that works even if disks are added and removed. see fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
# swap was on /dev/sda4 during installation #UUID=65se21r-1d3t-3263-2198-e564c275e156 none swap sw 0 0

ファイルを保存して閉じます。次に、次のコマンドを実行して、構成の変更を適用します。

mount -a

次に、両方のサーバーでホスト名解決を設定する必要があります。したがって、各サーバーはホスト名を使用して相互に通信できます。

これを行うには、お好みのエディタを使用して/ etc/hostsファイルを開きます。

nano /etc/hosts

次の行を追加します:

192.168.0.103 master
192.168.0.100 slave

終了したら、ファイルを保存して閉じます。次に、次の手順に進みます。

DockerとKubernetesをインストールする

次に、DockerとKubernetesツールのkubelet、kubeadm、kubectlを両方のサーバーにインストールする必要があります。

まず、必要なパッケージをインストールし、次のコマンドでGPGキーを追加します。

apt-get install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

次に、次のコマンドを実行して、両方のサーバーにDockerCEリポジトリを追加します。

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

次に、リポジトリを更新し、次のコマンドを使用してDockerCEをインストールします。

apt-get update -y
apt-get install docker-ce -y

インストールが完了したら、次のコマンドを使用してDockerCEのステータスを確認します。

systemctl status docker

次の出力が表示されます。

? docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-07-19 07:05:50 UTC; 1h 24min ago
     Docs: https://docs.docker.com
 Main PID: 3619 (dockerd)
    Tasks: 8
   CGroup: /system.slice/docker.service
           ??3619 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Jul 19 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.574491681Z" level=warning msg="Your kernel does not support swap memory limit"
Jul 19 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.575196691Z" level=warning msg="Your kernel does not support cgroup rt period"
Jul 19 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.575733336Z" level=warning msg="Your kernel does not support cgroup rt runtime"
Jul 19 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.582517104Z" level=info msg="Loading containers: start."
Jul 19 07:05:49 master dockerd[3619]: time="2019-07-19T07:05:49.391255541Z" level=info msg="Default bridge (docker0) is assigned with an IP add
Jul 19 07:05:49 master dockerd[3619]: time="2019-07-19T07:05:49.681478822Z" level=info msg="Loading containers: done."
Jul 19 07:05:50 master dockerd[3619]: time="2019-07-19T07:05:50.003776717Z" level=info msg="Docker daemon" commit=0dd43dd graphdriver(s)=overla
Jul 19 07:05:50 master dockerd[3619]: time="2019-07-19T07:05:50.009892901Z" level=info msg="Daemon has completed initialization"
Jul 19 07:05:50 master systemd[1]: Started Docker Application Container Engine.
Jul 19 07:05:50 master dockerd[3619]: time="2019-07-19T07:05:50.279284258Z" level=info msg="API listen on /var/run/docker.sock"

Kubernetesパッケージは、Ubuntu18.04のデフォルトリポジトリでは利用できません。そのため、両方のサーバーにKubernetesリポジトリを追加する必要があります。

次のコマンドで追加できます:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | tee /etc/apt/sources.list.d/kubernetes.list

次に、リポジトリを更新し、次のコマンドを使用してKubernetesパッケージをインストールします。

apt-get install kubelet kubeadm kubectl -y

すべてのパッケージがインストールされたら、マスターサーバーの構成に進むことができます。

Kubernetesマスターサーバーを設定する

まず、マスターサーバー上のプライベートIPアドレスを使用してクラスターを初期化する必要があります。

kubeadmコマンドで実行できます:

kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.0.103

クラスターが正常に初期化されると、次の出力が表示されます。

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.103:6443 --token zsyq2w.c676bxzjul3upd7u \
    --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436c 

次に、マスターサーバーでkubectlツールを構成する必要があります。次のコマンドで実行できます:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

次に、サーバーにContainer Networking Interface(CNI)をデプロイする必要があります。なぜなら、クラスターにはCNIがないからです。

次のコマンドを使用して、CNIをクラスターにデプロイできます。

kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml

次の出力が表示されます。

configmap/calico-config created
daemonset.extensions/calico-etcd created
service/calico-etcd created
daemonset.extensions/calico-node created
deployment.extensions/calico-kube-controllers created
deployment.extensions/calico-policy-controller created
clusterrolebinding.rbac.authorization.k8s.io/calico-cni-plugin created
clusterrole.rbac.authorization.k8s.io/calico-cni-plugin created
serviceaccount/calico-cni-plugin created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
serviceaccount/calico-kube-controllers created

これで、次のコマンドを実行して名前空間を確認できます。

kubectl get namespaces

すべてがうまくいくと、次の出力が表示されます。

NAME          STATUS    AGE
default       Active    4h
kube-public   Active    4h
kube-system   Active    4h

次に、次のコマンドを使用して、マスターノードが正しく実行されているかどうかを確認します。

kubectl get nodes

次の出力が表示されます。

name          status    roles     age       version
master   Ready     master    12m       v1.15.3
スレーブをKubernetesクラスターに追加

次に、スレーブサーバーにログインし、次のコマンドを実行してスレーブをKubernetesクラスターに追加します。

kubeadm join 192.168.0.103:6443 --token zsyq2w.c676bxzjul3upd7u --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436c

次に、マスターサーバーに移動し、次のコマンドを使用してスレーブがKubernetesクラスターに追加されているかどうかを確認します。

kubectl get nodes

次の出力が表示されます。

name status roles age version
master ready master 25m v1.15.3
slave ready 2m v1.15.3

終了したら、次のステップに進むことができます。

KubernetesクラスターにNGINXをデプロイする

これで、Kubernetesクラスターがインストールされ、構成され、正しく機能します。 NginxをKubernetesクラスターにデプロイするときが来ました。

マスターサーバーに移動し、次のコマンドを使用してNginxデプロイメントを作成します。

kubectl create deployment nginx --image=nginx

これで、次のコマンドを使用してNginxデプロイメントを一覧表示できます。

kubectl get deployments

次の出力が表示されます。

NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           99s

Nginxがデプロイされると、次のコマンドでアプリケーションを公開できます。

kubectl create service nodeport nginx --tcp=80:80

これで、次のコマンドで割り当てられた新しいサービスとClusterIPアドレスを確認できます。

kubectl get svc

次の出力が表示されます。

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.152.183.1             443/TCP   15m
nginx        ClusterIP   10.152.183.199           80:32456/TCP    60s

おめでとう!これで、NginxがKubernetesクラスターに正常にデプロイされました。 Kubernetesクラスターに別のノードを簡単に追加することもできます。詳細については、KubernetesDocのKubernetes公式ドキュメントを参照してください。ご不明な点がございましたら、お気軽にお問い合わせください。


Ubuntu
  1. DockerにNGINXリバースプロキシをデプロイする方法

  2. Ubuntu20.04LTSでNginxを使用してModsecurityをデプロイする方法

  3. Ubuntu20.04LTSにNginxを使用してModsecurityをデプロイする

  1. KubernetesにRedisクラスターをデプロイする方法

  2. Ubuntu18.04にKubernetesをインストールする方法

  3. Ubuntu 20.04 LTSFocalFossaにDockerをインストールする方法

  1. Ubuntu 22.04 /20.04LTSにDockerをインストールする方法

  2. Ubuntu18.04LTSにKubernetesとDockerをインストールして設定する方法

  3. Ubuntu18.04LTSでNginxを使用してGhostブログをデプロイする方法