ブログに戻る

Ubuntu 20.04にKubernetesをインストールして使用する方法

Ubuntu 20.04にKubernetesをインストールして使用する方法

はじめに

Kubernetesは、コンテナオーケストレーションにおいて極めて重要なオープンソースツールです。Kubernetesは、さまざまなクラウド環境やオンプレミスのサーバーにおいて、クラスターを大規模にオーケストレーションおよび管理することで動作します。クラスターとは、コンテナ化されたアプリケーションやサービスを実行するためのホストのセットです。クラスターが動作するには、最低2つのノードが必要です – 1つの マスター ノードと、1つの ワーカー ノードです。拡張性を考慮すると、必要に応じて必要な数だけワーカーノードを追加してクラスターを拡張するオプションがあります。

Kubernetesにおけるノードとは、サーバーを指します。マスターノードは、クラスターの状態を管理するサーバーです。ワーカーノードは、ワークロードを実行するサーバーであり、これらは通常、– コンテナ化されたアプリケーションやサービス.

この ガイドでは、Ubuntu 20.04上に2つのノードで構成されるKubernetesクラスターをインストールおよびデプロイする手順を順を追って説明します. 前述のように、Kubernetesを使用する場合、2つのノードを持つことが最も基本的な構成です。基本を理解すれば、ワーカーノードをさらに追加することもできます。さらに、マスターノードがワーカーノードを制御できるように、2つのサーバーをリンクする方法についても説明します。

構成をテストするために、Docker コンテナで Nginx webserver をクラスターにデプロイします。これはKubernetesの典型的な実用例です。以下のような、Kubernetesを定義するいくつかのコンポーネントについて詳しく学びます。 kubectlkubeadm 進めながら。また、まずは次のチュートリアルに目を通しておくことをお勧めします:「Kubernetesツールキットの基本を知る」。これにより、Kubernetesプラットフォームの基本を理解することができます。

それでは、始めましょう!

前提条件

2台のサーバーをプロビジョニングする必要があります。OSは Ubuntu 20.04です。最適なパフォーマンスを得るためのKubernetesの最小システム要件は、2GB of RAMと2 CPUsです。このUbuntuサーバーのセットアップに役立つステップバイステップのチュートリアルのステップ1から4に従うことができます。 CloudSigma上で。一方のサーバーがマスターノード、もう一方がワーカーノードになります。これら2つのサーバーには、分かりやすく次のように名前を付けました: kubernetes-masterkubernetes-worker。これにより、チュートリアルを進めやすくなります。ただし、お好みの ホスト名を自由に選択できます。

ステップ1: Kubernetesのインストール

このステップでは、Kubernetesをインストールします。Dockerのときと同様に、前提条件において、Kubernetesをインストールするために両方のノードでコマンドを実行する必要があります。各ノードで ssh両方のノードにログインして続行します。まず、 apt-transport-https パッケージのインストールから開始します。これにより、 httphttps をUbuntu’sのリポジトリで利用できるようにします。また、 curl も次のステップで必要になるためインストールしてください。次のコマンドを実行します:

次に、 Kubernetes 署名キーを、次のコマンドを実行して両方のノードに追加します:

次に、 Kubernetes リポジトリ を、次のコマンドを使用して両方のノードにパッケージソースとして追加します:

その後、ノードを更新します:

  • Kubernetesツールのインストール

アップデートが完了したら、Kubernetesをインストールします。これには、Kubernetesを構成するさまざまなツールのインストールが含まれます: kubeadm, kubelet, kubectl、および kubernetes-cni。これらのツールは両方のノードにインストールされます。以下で各ツールについて説明します:

  • kubelet – 各ノードで実行され、コンテナランタイムでワークロードを開始するためにマスターノードとの通信を処理するエージェントです。kubeletをインストールするには、次のコマンドを入力します:

  • kubeadm – Kubernetesプロジェクトの一部であり、Kubernetesクラスターの初期化を支援します。kubeadmをインストールするには、次のコマンドを入力します:

  • kubectl – Kubernetesクラスター内でコマンドを実行できるようにするKubernetesコマンドラインツールです。次のコマンドを実行してkubectlをインストールします:

  • kubernetes-cni – コンテナ内のネットワークを有効にし、コンテナ同士が通信してデータを交換できるようにします。インストールするには、次のコマンドを実行します:

必要に応じて、これら4つすべてを1つのコマンドでインストールすることもできます:

ステップ 2: スワップメモリの無効化

Kubernetesは、 スワップメモリを使用しているシステムでは動作しません。したがって、マスターノードとすべてのワーカーノードで無効にする必要があります。スワップメモリを無効にするには、次のコマンドを実行します:

このコマンドは、システムが再起動されるまでスワップメモリを無効にします。再起動後も無効な状態を維持する必要があります。これはマスターおよびすべてのワーカーノードで行う必要があります。これを行うには、 fstab ファイル を編集し、 /swapfileの行を でコメントアウトします。#. 次のコマンドを入力して、nanoテキストエディタでファイルを開きます:

ファイル内で、 swapfileの行を、以下のスクリーンショットに示すようにコメントアウトします:

install Kubernetes fstab swap disable

swapfileの行が表示されない場合は、無視してください。編集が終わったら、ファイルを保存して閉じます。両方のノードで同じ手順を実行します。これで、サーバーが再起動した後でも、スワップメモリの設定はオフのままになります。

ステップ 3: 一意のホスト名の設定

識別を容易にするため、ノードには一意のホスト名を設定する必要があります。多数のノードを持つクラスターをデプロイする場合は、ワーカーノードを識別するための名前(node-1、node-2など)を設定できます。前述のように、ここではノードの名前を次のように設定しています。 kubernetes-マスター および kubernetes-ワーカー。これらはサーバーの作成時に設定されています。ただし、コマンドラインからまだ設定していない場合は、自身で調整または設定できます。マスターノードのホスト名を調整するには、次のコマンドを実行します。

ワーカーノードで、次のコマンドを実行します:

現在のターミナルセッションを閉じて、 ssh でサーバーに再度ログインして変更を確認できます。

ステップ 4: Iptables にブリッジトラフィックを認識させる

マスターノードとワーカーノードがブリッジトラフィックを正しく認識できるように、 net.bridge.bridge-nf-call-iptables が設定で 1 に設定されていることを確認してください。まず、 br_netfilter モジュールがロードされていることを確認します。これは、次のコマンドを実行して確認できます:

必要に応じて、次のコマンドを使用して明示的にロードできます:

これで、次のコマンドを実行して値を1に設定できます:

ステップ 5: DockerのCgroupドライバーの変更

デフォルトでは、Dockerは cgroupfs をcgroupドライバーとしてインストールします。Kubernetesは、Dockerが 動作することを推奨しています。ドライバーとして systemdを使用します。このステップをスキップして、次のステップでkubeadmを初期化しようとすると、ターミナルに次の警告が表示されます。

マスターノードとワーカーノードの両方で、 cgroupdriver を次のコマンドで更新してください:

その後、次のコマンドを実行して、システム起動時にDockerを 再起動し、 有効化します:

設定が完了したら、いよいよお楽しみのKubernetesクラスターのデプロイに進むことができます!

ステップ 6: Kubernetesマスターノードの初期化

Kubernetesクラスターをデプロイする最初のステップは、マスターノードを起動することです。マスターノードのターミナルで、次のコマンドを実行して Kubernetes-マスターを初期化します:

上記のコマンドを実行した際に、システムが、前提条件セクションで説明されている最小RAMやCPUなどの期待される要件を満たしていない場合、警告が表示され、クラスターは起動しません:

install Kubernetes InitError

注意: 本番環境向けに構築する場合は、Kubernetesがスムーズに動作するための最小要件を常に満たすことをお勧めします。ただし、学習目的でこのチュートリアルを実行している場合は、kubeadm initコマンドに次のフラグを追加して、エラー警告を無視することができます。
sudo kubeadm init --ignore-preflight-errors=NumCPU,Mem --pod-network-cidr=10.244.0.0/16

下のスクリーンショットは、初期化が成功したことを示しています。また、IP 10.244.0.0 でポッドネットワークを指定するフラグも追加しました。これは kube-flannel が使用するデフォルトの IP です。ポッドネットワークについては、次のステップで詳しく説明します。

install Kubernetes Kubeadm Init

出力には、 kubeadm join コマンド(IP アドレスは非表示にしています)と、このクラスターに参加させたいワーカーノードおよび他のすべてのワーカーノードで実行する一意のトークンが表示されます。次に、後でワーカーノードで使用するため、このコマンドをコピーして貼り付けます。

出力には、クラスターの使用を開始する前に、マスターノード上で一般ユーザーとして実行する必要があるいくつかの追加コマンドも表示されます。これらのコマンドを実行しましょう。

これでマスターノードの初期化が完了しました。ただし、ワーカーノードを参加させる前に、マスターノード上でポッドネットワークをセットアップする必要もあります。

ステップ 7: ポッドネットワークのデプロイ

ポッドネットワークはサーバー間の通信を容易にし、Kubernetesクラスターが適切に機能するために必要です。詳細については、Kubernetesクラスターネットワークの公式ドキュメントを参照してください。このチュートリアルでは、Flannelポッドネットワークを使用します。Flannelは、Kubernetesの要件を満たすシンプルなオーバーレイネットワークです。

ポッドネットワークをデプロイする前に、ファイアウォールのステータスを確認する必要があります。もし、Ubuntuサーバーのセットアップに関するチュートリアルのステップ5に従った後にファイアウォールを有効にした場合は、まず ファイアウォールルールを追加して、ポート 6443 (Kubernetesのデフォルトポート)。マスターノードとワーカーノードの両方で、次の ufw コマンドを実行します:

その後、次の2つのコマンドを実行して、マスターノードにポッドネットワークをデプロイできます:

環境によっては、flannelネットワークが起動するまでに数秒から1分程度かかる場合があります。すべてが正常に起動したことを確認するには、次のコマンドを実行します:

すべてが正常に完了した場合、コマンドの出力にはすべてのサービスの状態が「Running(実行中)」として表示されるはずです:

install Kubernetes Pod Status

また、コンポーネントの ヘルス(状態)をget componentstatusコマンドを使用して確認することもできます:

install Kubernetes Component Status

このコマンドには短縮形 cs があります:

Component Status Short

unhealthy ステータスが表示された場合は、次のファイルを修正し、このフレーズを含む (spec->containers->command) の行を削除してください - --port=0 :

このファイルについても同様に行います:

最後に、Kubernetes サービスを再起動します:

ステップ 8: Kubernetes クラスターへのワーカーノードの参加

With the kubernetes-master ノードが起動し、ポッドネットワークの準備が整ったので、ワーカーノードをクラスターに参加させることができます。このチュートリアルでは、ワーカーノードは1つだけなので、それを使って作業を進めます。複数のワーカーノードがある場合でも、以下で説明するのと同じ手順に従ってクラスターに参加させることができます。

まず、別のターミナルセッションでワーカーノードにログインします。使用するのは、 kubeadm join コマンドです。これは、ステップ 6 でマスターノードを初期化した際にターミナルに表示されたものです。コマンドを実行します:

クラスターへの参加が完了すると、以下のスクリーンショットのような同様の出力が表示されるはずです:

Worker Join

参加プロセスが完了したら、マスターノードのターミナルに切り替え、次のコマンドを実行してワーカーノードがクラスターに参加したことを確認します:

上記のコマンドの出力のスクリーンショットから、ワーカーノードがクラスターに参加していることが確認できます。

install Kubernetes K8S Node Status

ステップ 9: Kubernetesクラスターへのアプリケーションのデプロイ

現時点で、Kubernetesクラスターのセットアップは正常に完了しています。サービスをデプロイして、クラスターを使用可能な状態にしましょう。Nginxは、数千の接続があっても驚異的な速度を誇る人気のWebサーバーです。このセットアップを実際のアプリケーションで使用できることを証明するために、Nginx Webサーバーをクラスターにデプロイします。

マスターノードで次のコマンドを実行して、KubernetesデプロイメントをNginx用に作成します:

作成された デプロイメント は、 describe deployment コマンドを使用して確認できます:

Nginx Deployment

To make the nginx サービス をインターネット経由でアクセス可能にするには、次のコマンドを実行します:

NodePort Svc Create

上記のコマンドは、Nginxデプロイメント用のパブリックに公開されたサービスを作成します。これは nodeport デプロイメントであるため、Kubernetesはサービスに の範囲のポートを割り当てます。32000+.

次のコマンドを実行することで、現在のサービスを取得できます:

NodePort Svc Status

割り当てられたポートが 32264であることが確認できます。次のステップで使用するために、ターミナルに表示されたポートをメモしておいてください。

To verify that the Nginx service deployment is successful, issue a curl コールをマスターからワーカーノードに対して実行します。お使いのワーカーノードのIPと、上記のコマンドから取得したポートに置き換えてください:

デフォルトのNginxの index.htmlの出力が表示されるはずです。:

Curl Nginx Svc

必要に応じて、ブラウザでワーカーノードのIPアドレスとポートの組み合わせにアクセスし、デフォルトのNginxインデックスページを表示できます:

install Kubernetes Nginx Webpage

デプロイメントの名前を指定することで、デプロイメントを 削除することができます。たとえば、次のコマンドはデプロイメントを削除します:

これでクラスターのテストに成功しました!

まとめ

このチュートリアルでは、Ubuntu 20.04にKubernetesクラスターをインストールする方法を学びました。マスターノードとワーカーノードで構成されるクラスターをセットアップしました。Kubernetesツールセットをインストールし、ポッドネットワークを作成し、ワーカーノードをマスターノードに参加させることができました。また、Nginxウェブサーバーの基本的なデプロイをクラスターに行うことで、コンセプトのテストも行いました。これは、Ubuntu上でKubernetesクラスターを操作するための基盤となるはずです。

今回は1つのワーカーノードのみを使用しましたが、クラスターには必要な数だけノードを追加できます。もし、次のような自動化ツールを使ってDevOpsをさらに深く学びたい場合は、Ansibleなどのツールについて、AnsibleとKubeadmを使用したKubernetesクラスターデプロイのプロビジョニングを深く掘り下げるチュートリアルを用意しています。ぜひチェックしてみてください。また、Kubernetesクラスター上にPHPアプリケーションをデプロイする方法については、このチュートリアルを参照してください。.

ハッピーコンピューティング!

author

Pranay Kapgate

著者 · CloudSigma

Preslav DobrevはCloudSigmaのクリエイティブデザイナーであり、従来型および革新的なマーケティングチャネルを活用した一貫性のあるビジネスアイデンティティに注力しています。彼は芸術的なビジョンと戦略的マーケティングを融合させ、インパクトのあるブランドナラティブを生み出すことに長けています。

コメント

コメントはまだありません。最初のコメントを投稿しましょう。