KubernetesクラスターにNGINXをデプロイする方法 - TechRepublic

KubernetesクラスターにNGINXをデプロイする方法 - TechRepublic

Kubernetesは、コンテナの管理とデプロイのためのクラスタを構築する最も強力な方法の一つです。NGINXは世界で最も普及しているウェブサーバーの一つであり、コンテナのデプロイ方法を説明するのに最適な方法の一つでもあります。この二つを組み合わせることで、ビジネスの成長を支援する、スケーラビリティの高いウェブサーバーを実現できます。

では、NGINXコンテナをKubernetesクラスターにデプロイするにはどうすればいいのでしょうか?これからご説明します。ちなみに、ここではAntsleクラウドサーバーを使用しています。Antsleを使うとKubernetesプラットフォームのデプロイが非常に簡単になります。KubernetesをホストしているオペレーティングシステムはUbuntu Server 16.04です。既にKubernetesが稼働していることを前提としています。Antsleをお持ちでなく、Kubernetesを最初にインストールする必要がある場合は、こちらの手順をご覧ください。このデモでは、以下の3つの仮想マシンにデプロイします。

  • 192.168.1.190 の Kubernetes
  • 192.168.1.191 の kubernetes2
  • 192.168.1.192 の kubernetes3

ホスト名が kubernetes のマシンがマスターとして機能し、kubernetes2/3 がノードとして機能します。

これで準備は整いましたので、デプロイしてみましょう。

ホスト名の設定

まず最初に、各マシンのホスト名をマッピングする必要があります。各マシンに対してsudo nano /etc/hostsコマンドを実行し、他のマシンのIPアドレスをホスト名にマッピングします。Kubernetesでは、hostsの追加は以下のようになります。

192.168.1.191 kubernetes2
192.168.1.192 kubernetes3

kubernetes2 では、次のものが追加されます。

192.168.1.190 kubernetes
192.168.1.192 kubernetes3

kubernetes3 では、次の機能が追加されます。

192.168.1.190 kubernetes
192.168.1.191 kubernetes2

追加が完了したら、ファイルを保存して閉じます。各サーバーにホスト名でpingが通ることを確認してください。

マスターノードを初期化する

準備が整ったら、マスターノードを初期化します。Kubernetes(私のマスターノード)にログインし、次のコマンドを実行します。

sudo kubeadm init --pod-network-cidr=192.168.1.0/16 --apiserver-advertise-address=192.168.1.190

このコマンドは、必要なイメージをプルする必要があるため、完了までに1~2分かかる場合があります。完了すると、図Aに示すような出力が表示されます。

図A

出力にはトークンとディスカバリトークンが含まれます。ノードをクラスターに参加させる際に必要となるため、必ずこれらをコピーしておいてください(または、joinコマンド全体をコピーしてください)。

次のステップは初期化コマンドの出力に明確に示されています。実際には、以下のコマンドを実行する必要があります。

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

上記のコマンドを発行したら、次のコマンドを使用してノードのステータスを確認します (この時点ではノードは 1 つだけです)。

kubectl get nodes

マスター ノードがリストされます (図 B )。

図B

マスターノードが「準備ができていません」と表示されているのは、コンテナネットワークインターフェース(CNI)がまだ設定されていないためです。以下のコマンドで、マスターノードにCalico CNIをデプロイしましょう。

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

kubectl get pods –all-namespacesコマンドを使用して、Calico が正しくデプロイされていることを確認しましょう。

上記のコマンドの出力 (図 C ) には、Calico が実行中であることが示されるはずです。

図C

kubectl get nodes を再度実行すると、マスター ノードが Ready としてリストされていることがわかります。

クラスターへのノードの追加

次に、ノードをクラスターに追加します。マスターノードの初期化コマンドの出力に join コマンドがあったのを覚えていますか? kubernetes2 にアクセスして、そのコマンドを実行します。コマンドは以下のようになります。

sudo kubeadm join --token 6779e1.164c5515cf412fdf 192.168.1.190:6443 --discovery-token-ca-cert-hash sha256:c3e413050e40675280bbf8e37a99c53a1481f82d714469b51b77ed17b38015de

コマンドが完了したら、kubernetes3 でも同じ手順を実行します。ノードで join コマンドを実行した後、マスターノードに戻り、kubectl get nodesコマンドを実行すると、すべてのノードが準備完了になっていることがわかります (図 D )。

図D

NGINXコンテナをクラスターにデプロイする

NGINXコンテナをデプロイする準備が整いました。マスターノードから次のコマンドを実行します。

sudo kubectl create deployment nginx --image=nginx

次に、次のコマンドを使用して、NGINX コンテナをネットワークで利用できるようにします。

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

kubectl get svcコマンドを実行して、NGINX のリスト(および Kubernetes によって割り当てられたポート –図 E)を確認します。

図E

次のコマンドでこれをテストしてみましょう。

curl kubernetes3:30655

注: 30655 ポートは、create service コマンドの実行中に割り当てられます。これはデプロイメントごとに固有のポートになります。

curl コマンドの出力には、NGINX の index.html ページの HTML が表示されるはずです。これが表示されれば、NGINX コンテナが Kubernetes クラスターにデプロイされたことになります。Web ブラウザで http://IP_OF_NODE:ASSIGNED_PORT (IP_OF_NODE はノードの IP アドレス、ASSIGNED_PORT は create service コマンドで割り当てられたポート) にアクセスすると、NGINX の Welcome ページが表示されます。

基本的な展開

ここまでで、Kubernetes クラスターへの NGINX の非常に基本的なデプロイを行いました。Kubernetes の使い方については、まだまだ学ぶべきことがたくさんあります。しかし、このチュートリアルは良いスタートを切るのに役立つだけでなく、Kubernetes クラスターに NGINX を簡単にデプロイするのに役立つはずです。

Tagged: