[Donationsのために書く]の一部として寄付を受け取りましたプログラム。[Kubernetes]は、大規模にコンテナを管理するコンテナオーケストレーションシステムです。Kubernetesは、運用環境でコンテナを実行した経験に基づいてGoogleが最初に開発したオープンソースであり、世界中のコミュニティによって積極的に開発されています。DNSなどのKubernetesコンポーネントのインストールと構成を自動化します。ユーザーの作成や、オペレーティングシステムレベルの依存関係とその構成のインストールは処理しません。[Ansible]やhttps://saltstack.com/[SaltStack]などの構成管理ツールを使用できます。これらのツールを使用すると、追加のクラスターを作成したり、既存のクラスターを再作成したりするのがはるかに簡単になり、エラーが発生しにくくなります。このガイドでは、AnsibleとKubeadmを使用してゼロからKubernetesクラスターをセットアップし、コンテナー化されたNginxアプリケーションをデプロイします。目標クラスターには、次の物理リソースが含まれます。1つのマスターノード*マスターノード(Kubernetesの_node_はサーバーを指します)は、クラスターの状態を管理します。Etcdを実行し、ワークロードをワーカーノードにスケジュールするコンポーネント間でクラスターデータを保存します。コンテナ化されたアプリケーションとサービス)が実行されます。ワーカーは、スケジューリングが完了するとマスターがダウンしても、割り当てられたワークロードを実行し続けます。ワーカーを追加すると、クラスターの容量を増やすことができます。このガイドを完了すると、クラスター内のサーバーにアプリケーションが消費するのに十分なCPUリソースとRAMリソースがあれば、コンテナー化されたアプリケーションを実行する準備が整います。Webアプリケーション、データベース、デーモン、およびコマンドラインツールを含む、ほぼすべての従来のUnixアプリケーションをコンテナ化して、クラスター上で実行することができます。クラスター自体は、各ノードで約300〜500MBのメモリと10%のCPUを消費します。クラスターを設定したら、Webサーバーhttps://nginx.org/en/[Nginx]をデプロイして、ワークロードが正しく実行されていることを確認します。BSDマシン上のSSHキーペア。SSHキーを使用したことがない場合は、https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-に従って設定する方法を学習できます。[ローカルマシンでSSHキーをセットアップする方法のこの説明]。18.04を実行する3つのサーバー。SSHキーペアを使用して、rootユーザーとして各サーバーにSSH接続できるはずです。ローカルマシンにインストールされたAnsible。18.04を実行している場合は、https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-ansible-on-の「ステップ1-Ansibleのインストール」セクションに従ってください。Ansibleをインストールします。[公式のAnsibleインストールドキュメント]を参照してください。Ansibleプレイブックに精通している。Playbookの作成]をご覧ください。Dockerイメージからコンテナーを起動する方法に関する知識。https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04#step-5-の「ステップ5-Dockerコンテナの実行」をご覧ください。18.04にDockerをインストールして使用する方法]。Inventoryファイルのセットアップこのセクションでは、ローカルマシン上にワークスペースとして機能するディレクトリを作成します。Ansibleをローカルで設定して、リモートサーバーと通信し、コマンドを実行できるようにします。+」ファイルを作成します。3つのサーバーのうち、1つが「」として表示されるIPを持つマスターになります。他の2つのサーバーはワーカーであり、IPが「」と「++」になります。~/kube-clusterこのディレクトリは、残りのチュートリアルのワークスペースであり、すべてのAnsibleプレイブックが含まれます。内部ですべてのローカルコマンドを実行するディレクトリにもなります。+`という名前のファイルを作成します。~/kube-cluster/hosts次のテキストをファイルに追加します。これにより、クラスターの論理構造に関する情報が指定されます。files]は、IPアドレス、リモートユーザー、サーバーのグループ化などのサーバー情報を指定するために使用されることを思い出してください。コマンドを実行するための単一ユニット。++)をリストし、Ansibleがルートユーザーとしてリモートコマンドを実行することを指定する「master」という名前のサーバーエントリがあります。3インタープリターを使用するようAnsibleに指示しています。テキストを追加したら、ファイルを保存して閉じます。グループでサーバーインベントリを設定したら、オペレーティングシステムレベルの依存関係のインストールと構成設定の作成に移りましょう。手順2-すべてのリモートサーバーでの非ルートユーザーの作成このセクションでは、すべてのサーバーでsudo特権を持つ非rootユーザーを作成して、非特権ユーザーとして手動でSSHでログインできるようにします。+`などのコマンドを使用してシステム情報を表示したり、実行中のコンテナーのリストを表示したり、rootが所有する構成ファイルを変更したりする場合に役立ちます。これらの操作はクラスターのメンテナンス中に定期的に実行され、そのようなタスクに非rootユーザーを使用すると、重要なファイルを変更または削除したり、他の危険な操作を誤って実行したりするリスクが最小限に抑えられます。~/kube-cluster/initial.yml次に、次の_play_をファイルに追加して、すべてのサーバーでsudo特権を持つ非rootユーザーを作成します。Ansibleでのプレイとは、特定のサーバーとグループを対象とする実行されるステップの集まりです。次のプレイは、非ルートsudoユーザーを作成します。~/.ssh/id_rsa.pubこのプレイブックの機能の内訳は次のとおりです。ubuntu`を作成します。sudoers`ファイルを設定します。`ユーザーの承認済みキーリストに追加します。+`ユーザーとして各サーバーにSSH接続できます。テキストを追加したら、ファイルを保存して閉じます。~/kube-cluster/initial.ymlコマンドは2〜5分以内に完了します。完了すると、次のような出力が表示されます。failed=0準備が完了したら、Kubernetes固有の依存関係のインストールに進むことができます。ステップ3-Kubernetetesの依存関係のインストールこのセクションでは、Kubernetesに必要なオペレーティングシステムレベルのパッケージをUbuntuのパッケージマネージャーでインストールします。これらのパッケージは次のとおりです。Docker-コンテナーランタイム。コンテナを実行するコンポーネントです。rktなどの他のランタイムのサポートは、Kubernetesで活発に開発されています。+-標準的な方法でクラスターのさまざまなコンポーネントをインストールおよび構成するCLIツール。+-すべてのノードで実行され、ノードレベルの操作を処理するシステムサービス/プログラム。+-APIサーバーを介してクラスターにコマンドを発行するために使用されるCLIツール。~/kube-cluster/kube-dependencies.yml次の再生をファイルに追加して、これらのパッケージをサーバーにインストールします。yesプレイブックの最初のプレイは次のことを行います。コンテナランタイムであるDockerをインストールします。apt-transport-https`をインストールして、外部HTTPSソースをAPTソースリストに追加できるようにします。APTリポジトリのapt-keyを追加します。APTリポジトリをリモートサーバーのAPTソースリストに追加します。kubeadm`をインストールします。kubectl`をインストールする単一のタスクで構成されます。完了したら、ファイルを保存して閉じます。~/kube-cluster/kube-dependencies.yml完了すると、次のような出力が表示されます。`がすべてのリモートサーバーにインストールされます。`は必須コンポーネントではなく、クラスターコマンドの実行にのみ必要です。`コマンドを実行するため、このコンテキストではマスターノードのみにインストールするのが理にかなっています。+`コマンドは、任意のワーカーノードから、またはクラスターを指すようにインストールおよび構成できる任意のマシンから実行できることに注意してください。これで、すべてのシステム依存関係がインストールされました。マスターノードをセットアップして、クラスターを初期化しましょう。手順4-マスターノードのセットアップこのセクションでは、マスターノードを設定します。Plugins_などのいくつかの概念を説明する価値があります。ポッドは、1つ以上のコンテナーを実行するアトミックユニットです。これらのコンテナは、ファイルボリュームやネットワークインターフェイスなどのリソースを共有します。ポッドはKubernetesのスケジューリングの基本単位です。ポッド内のすべてのコンテナーは、ポッドがスケジュールされている同じノードで実行されることが保証されています。各ポッドには独自のIPアドレスがあり、1つのノード上のポッドはポッドのIPを使用して別のノード上のポッドにアクセスできる必要があります。単一ノード上のコンテナは、ローカルインターフェイスを介して簡単に通信できます。ポッド間の通信はより複雑であり、1つのノードのポッドから別のノードのポッドにトラフィックを透過的にルーティングできる個別のネットワークコンポーネントが必要です。この機能は、ポッドネットワークプラグインによって提供されます。[Flannel]の安定したパフォーマンスオプションを使用します。+`という名前のAnsibleプレイブックを作成します。~/kube-cluster/master.yml次の再生をファイルに追加して、クラスターを初期化し、Flannelをインストールします。pod_network_setup.txtこのプレイの内訳は次のとおりです。`を実行してクラスターを初期化します。`を渡すと、ポッドIPが割り当てられるプライベートサブネットが指定されます。フランネルはデフォルトで上記のサブネットを使用します。+」に指示しています。+`ディレクトリを作成します。このディレクトリには、クラスターへの接続に必要な管理キーファイルやクラスターのAPIアドレスなどの構成情報が保持されます。`ファイルを非ルートユーザーのホームディレクトリにコピーします。+`を使用して新しく作成されたクラスターにアクセスできます。」をインストールします。descriptor。descriptor。`ファイルに記述されているオブジェクトを作成するよう指示するための構文です。+`を設定するために必要なオブジェクトの説明が含まれています。完了したら、ファイルを保存して閉じます。次を実行して、プレイブックをローカルで実行します。~/kube-cluster/master.yml完了すると、次のような出力が表示されます。failed=0マスターノードのステータスを確認するには、次のコマンドを使用してSSHでマスターノードに接続します。protected]マスターノード内で、次を実行します。nodes次の出力が表示されます。+」状態にあることが示されています。これで、ローカルマシンからワーカーを追加できます。ステップ5-ワーカーノードのセットアップクラスターにワーカーを追加するには、それぞれに対して単一のコマンドを実行する必要があります。このコマンドには、マスターのAPIサーバーのIPアドレスとポート、セキュアトークンなどの必要なクラスター情報が含まれます。セキュアトークンを渡すノードのみがクラスターに参加できます。+`という名前のプレイブックを作成します。~/kube-cluster/workers.yml次のテキストをファイルに追加して、ワーカーをクラスターに追加します。node_joined.txtプレイブックの機能は次のとおりです。最初のプレイでは、ワーカーノードで実行する必要があるjoinコマンドを取得します。このコマンドの形式は次のとおりです。*値を持つ実際のコマンドを取得すると、タスクはそれをファクトとして設定し、次のプレイがその情報にアクセスできるようにします。2番目のプレイには、すべてのワーカーノードでjoinコマンドを実行する単一のタスクがあります。このタスクが完了すると、2つのワーカーノードがクラスターの一部になります。完了したら、ファイルを保存して閉じます。~/kube-cluster/workers.yml完了すると、次のような出力が表示されます。failed=0ワーカーノードを追加すると、クラスターが完全にセットアップされて機能するようになり、ワーカーはワークロードを実行する準備が整います。アプリケーションをスケジュールする前に、クラスターが意図したとおりに機能していることを確認しましょう。ステップ6-クラスターの検証ノードがダウンしているか、マスターとワーカー間のネットワーク接続が正しく機能していないため、セットアップ中にクラスターが失敗することがあります。クラスターを検証し、ノードが正しく動作していることを確認しましょう。マスターノードからクラスターの現在の状態をチェックして、ノードの準備ができていることを確認する必要があります。マスターノードから切断した場合、次のコマンドを使用してSSHでマスターノードに戻すことができます。protected]次に、次のコマンドを実行して、クラスターのステータスを取得します。nodes次のような出力が表示されます。+」の場合、それらはクラスターの一部であり、ワークロードを実行する準備ができていることを意味します。`である場合、ワーカーノードがまだセットアップを完了していない可能性があります。`を再実行し、新しい出力を調べます。+」である場合、前の手順でコマンドを確認して再実行する必要があります。クラスターが正常に検証されたので、クラスターでサンプルのNginxアプリケーションをスケジュールしましょう。手順7-クラスターでのアプリケーションの実行これで、コンテナ化されたアプリケーションをクラスターにデプロイできます。わかりやすくするために、_Deployments_および_Services_を使用してNginxをデプロイし、このアプリケーションをクラスターにデプロイする方法を見てみましょう。+」など)を変更する場合、他のコンテナー化されたアプリケーションにも以下のコマンドを使用できます。+`という名前のデプロイメントを作成します。--image=デプロイメントはKubernetesオブジェクトの一種で、クラスターの存続期間中にポッドがクラッシュした場合でも、定義されたテンプレートに基づいて、指定された数のポッドが常に実行されるようにします。Image]から1つのコンテナを持つポッドが作成されます。+`という名前のサービスを作成します。これは、クラスターの各ノードで開かれた任意のポートを介してポッドにアクセスできるようにするスキームである_NodePort_を介して行われます。NodePortサービスは、クラスター内部サービスを内部および外部の両方のクライアントに公開する別の種類のKubernetesオブジェクトです。複数のポッドへのリクエストの負荷分散が可能で、Kubernetesの不可欠なコンポーネントであり、他のコンポーネントと頻繁にやり取りします。次のコマンドを実行してください。servicesこれにより、次のようなテキストが出力されます。40m上記の出力の3行目から、Nginxが実行されているポートを取得できます。30000+」より大きいランダムポートを自動的に割り当てます。http://:+`にアクセスします。Nginxの使い慣れたウェルカムページが表示されます。+`サービスを削除します。service次を実行して、サービスが削除されたことを確認します。services次の出力が表示されます。1d次に、デプロイメントを削除します。deployment以下を実行して、これが機能したことを確認します。18.04にKubernetesクラスターを正常にセットアップしました。クラスターがセットアップされたので、クラスターで何をすべきか疑問に思っている場合は、次のステップとして、クラスターに独自のアプリケーションとサービスを快適にデプロイすることです。プロセスのガイドとなる詳細情報を含むリンクのリストを次に示します。[アプリケーションのDockerizing]-Dockerを使用してアプリケーションをコンテナ化する方法を詳しく説明した例をリストします。Overview-Podがどのように機能するか、および他のKubernetesオブジェクトとの関係について詳しく説明します。ポッドはKubernetesのいたるところにあるため、それらを理解すると作業が容易になります。Overview-展開の概要を提供します。デプロイメントなどのコントローラーは、スケーリングや不健全なアプリケーションの自動ヒーリングのためにステートレスアプリケーションで頻繁に使用されるため、どのように機能するかを理解しておくと役立ちます。[サービスの概要]-Kubernetesクラスターで頻繁に使用されるもう1つのオブジェクトであるサービスについて説明します。ステートレスアプリケーションとステートフルアプリケーションの両方を実行するには、サービスのタイプとそのオプションを理解することが不可欠です。[Ingresses]です。https://kubernetes.io/docs/concepts/configuration/secret/[Secrets]。これらはすべて、実稼働アプリケーションをデプロイするときに役立ちます。Kubernetesには、提供する多くの機能と機能があります。Documentationは、概念について学習し、タスク固有のガイドを見つけ、さまざまなオブジェクトのAPIリファレンスを検索するのに最適な場所です。