実際のクラスタにサンプルアプリケーションをデプロイしながら、Kubernetesの基本的な概念を学びます。概要とともに、サンプルアプリケーションを開発してデプロイする方法を学びます。クラスタに最初のアプリケーションをデプロイする上でどのような作業が必要なのかを重点的に説明します。理論のトピックを避けるわけではなく、必要に応じてその場で学んでいきます。したアプローチにより、抽象的で無意味なものになりがちな、早すぎる段階での議論や説明が避けられます。クラスタを(DigitalOcean上に)構築する方法を習得して、クラスタでアプリケーションを実行できるようになります。このトピックに魅力を感じた場合は、ぜひお読みください。"この記事では、Kubernetesの基本的な概念を学ぶと同時に、Kubernetesクラスタにサンプルアプリケーションをデプロイする方法を理解できます。コンテナ化したアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソースシステムです。このプラットフォームでは、アプリケーションをマイクロサービスと呼ばれる小規模のシステムに分解して開発を進め、それらのシステムを取りまとめて(つまり、オーケストレーションして)、デプロイできます。アプリケーションのマイクロサービスを管理の容易な論理ユニットへと整理しやすくなるよう、様々なオブジェクトが用意されています。マイクロサービスになじみがない場合、あいまいで抽象的すぎるかもしれません。今回の記事の目標はそのような概論を避けることですので、さっそく実践に入りましょう。実装が提供されています。その中でも利用率がきわめて高い実装は、以下のとおりです。ローカルで使用できるようになるオープンソースツールです。クラスタをセットアップします。社のソリューションです。社のソリューションです。社のソリューションです。無期限で無償となっている唯一のソリューションです(ただし、ローカルでしか実行できないことから、有用性もさほど高くありません)。無料枠が設定され、初期費用なしで利用を開始できるソリューションは他にもいくつかありますが、クラスタを実行し続けると、最終的には料金の請求が発生します。含まれていないことにお気づきかもしれません。Serviceを投入した直後であり、同サービスが今なお限定提供モードであるためです。ついては、すべての機能が実装され、十分なサポートが提供されているものの、本番運用可能とは言えない部分(エラーが発生するおそれ)があります。この記事の目的を果たす上では、現行のサービスは十分に安定しています。クレジットが利用できるので、無償でクラスタを構築できます。クラスタを構築する前に、kubectlと呼ばれるツールが必要になります。クラスタをターミナルから簡単に管理できるコマンドラインインターフェイスです。kubectlを使いこなすまでに、さほど時間はかかりません。向けの手順に従ってください。手順が記述されています。Linux(およびUbuntuなどの派生バージョン)macOS(HomebrewまたはMacPortsを使用することで導入可能)Windows(PowerShellとChocolateyについて手順の記載あり)それぞれの手順に従ってkubectlをマシンにインストールした後、以下のコマンドを実行すると、ツールが使用可能になったかどうかを確認できます。refused」というメッセージが表示されています。このメッセージは、kubectlのインストールは問題なく完了したものの、(存在しているはずの)クラスタが使用可能でないことを意味します。クラスタを構築する方法を学んでいきます。クラスタがすでに存在している場合は、このセクションの作業を省略できます。クラスタを作成します。作成する場合は、前述したこちらの紹介リンクを利用してください。紹介リンクを利用しない場合は、最初からクラスタの料金が発生します。上にアカウントを作成すると、確認の電子メールが送信されます。電子メール内のリンクを使用して、電子メールアドレスを確認してください。クレジットカード情報の入力を求められます。入力しても問題はありません。米ドル分を超えない限り、請求は発生しません。有効なクレジットカード情報を入力した後、その次の画面では、プロジェクトを作成できます。ダッシュボードに進んでもかまいません。Access」をクリックしてください)。新しいページが表示され、フォームで以下の情報を入力できるようになります。version」:この記事の手順は、1.13.5-do.1バージョンでテストされています。他のバージョンをテストしたい場合は、任意のバージョンを使用してかまいません。結果をぜひお知らせください。region」:任意の地域を選択できます。つのノードがあることを確認してください。Tags」:タグ付けに関しては、注意事項は特にありません。name」:クラスタには任意の名前を設定できます(たとえば、「kubernetes-tutorial」)。使用できる名前であることを確認してください(名前に空白文字が含まれていないなど)。Cluster」ボタンをクリックできるようになります。クラスタの構成ファイルはもうダウンロードできます。このファイルには、クラスタの管理者としての作業に必要な資格情報が収められています。この情報はクラスタのダッシュボードに表示されます。Cluster」ボタンをクリックすると、クラスタのダッシュボードにリダイレクトされます。File」ボタンがあります。このボタンをクリックして、構成ファイルをダウンロードします。このファイルのダウンロードが完了したら、ターミナルを開いて、ホームディレクトリの.kubeディレクトリにファイルを移動します(必要に応じてディレクトリを作成します)。~/.kube必要な場合、最後のコマンドの記述を調整して、ダウンロード済みファイルの適切なパスを指定してください。資格情報の格納場所は、~/.kubeディレクトリにすることをおすすめします。kubectlのデフォルトでは、configという名前のファイルがクラスタとの情報のやり取りに使用されます(.kubeディレクトリにファイルがある場合)。番目の方法は、kubectlコマンドで--kubeconfigフラグを使用して別のファイルを指定することですが、とても非能率的です。番目の方法は、KUBECONFIG環境変数を定義することです。--kubeconfigを毎回入力する必要がなくなります。番目の方法は、コンテキストを同一のconfigファイルにマージした後、コンテキストを切り替えることです。番目の方法(KUBECONFIG環境変数の設定)が最も簡単ですが、お好みに応じて、別のアプローチを任意に選択してかまいません。この環境を設定するには、以下のコマンドを実行します。KUBECONFIG=~/.kube/kubernetes-tutorial-kubeconfig.yaml注:ファイルパスは環境によって異なる場合があります。上のコマンドに適切なパスを指定したことを確認してください。このコマンドでは、このターミナルのセッションに対してのみ、この環境が設定されます。新しいターミナルを開く場合は、このコマンドをもう一度実行する必要があります。クラスタを準備し、kubectlで使用する資格情報を定義したので、クラスタとの情報のやり取りを開始できます。導入する場合は、クラスタを構成するノードに問題がないことを以下のコマンドで確認できます。以上のノードが含まれたリストが出力されます。バージョンが記述されています。この情報については、現時点で特に留意する必要はありません。クラスタのノードの詳細については、後ほど詳しく学んでいきます。ノードのリストを参照して、どのノードのステータスも「ready」であれば、準備は完了です。アプリケーションをデプロイしましょう。デプロイを進めていくとわかるとおり、難しくはないものの、数多くの手順が必要です。上で実行するには何らかの準備が必要な)手持ちのアプリケーションをデプロイしたり、デプロイ用にアプリケーションを新しく作成したりするのではなく、既存のサンプルアプリケーションをデプロイします。具体的には、ユーザー同士で意見を出し合えるアプリケーションをデプロイします。人々のやり取りに似ていますが、認証が不要で、はるかにシンプルです。ファイルの保存先となるディレクトリを作成することです(このディレクトリには、kubernetes-tutorialなど任意の名前を設定できます)。利用する際、クラスタ内でオーケストレーションするリソースの記述には、多くの場合、この"マークアップ言語"を使用します。ディレクトリを作成した後、そのディレクトリにdeployment.yamlという名前のファイルを作成し、以下のコードを記述します。3000この構成ファイルは、特に理解しにくいものではありません。Deployment)を定義するものです。このコンテナは、auth0blog/kubernetes-tutorialというイメージを使用してサンプルアプリケーションを実行します。何を実行するかをクラスタに指示するには、レジストリにあるイメージを利用することが一般的です。Hubレジストリにあるイメージを取得しようとします。イメージを非公開のままにしておきたい場合は、非公開レジストリを使用することもできます。このファイルのその他のプロパティについては、現時点で特に留意する必要はありません。これから学んでいきます。つの新しい概念が登場していることに注目してください。デプロイメントとは、基本的に、目的となるシステムステートを記述したものです。クラスタに指示します。コンテナ:コンテナは、実行中のアプリケーション、およびそのライブラリと依存関係を保持する最も低レベルのマイクロサービスです。アドレスを通じて世界に公開することが可能で、通常はポッドの構成要素です。学ぶべき重要な事項は、ポッドとは何かです。作成し管理してデプロイできる最小のコンピューティングユニットです。関連性がきわめて強く個別にデプロイできないマイクロサービス(コンテナ)をグループにまとめたものと考えてください。今回の場合は、ポッドには単一のコンテナであるサンプルアプリケーションが保持されています。注:昨今、ポッドとレプリケーションのオーケストレーションには、デプロイメントを使用する手法が好ましいとされています。エキスパートが一般に使用していたのは、レプリケーションコントローラとレプリケーションセットでした。このチュートリアルに沿って作業を進めていく上で、こうした他のオブジェクトについて学ぶことは必須ではありませんが、関心がある場合は、これらのオブジェクトの相違点をこちらのわかりやすい資料で確認できます。クラスタで実行するために、以下のコマンドを実行する必要があります。deployment.yamlこのコマンドを実行すると、クラスタは実行を開始し、目的のステートに到達しているかどうかを確認します。2)をクラスタのノード上で実行しようとします。その後、「サンプルアプリケーションをクラスタにデプロイしたから、これでアプリケーションをブラウザから使えるようになる」とお考えかもしれません。そこまでシンプルではありません。ポッドが、絶えず生成されては消える信頼できない処理ユニットであることが問題です。したがって、その一過性の性質上、ポッド自体に外部からアクセスすることはできません。あることを通知しました。アドレスを持つポッドを新しく起動します。アドレスを手動で追跡することは困難です。サービスを使用します。デプロイメント用に新しいポッドが起動される可能性がある状況は、(たとえば、ユーザーの増加に対応できるように)クラスタにアプリケーションのスケーリングを要求した場合です。サービスについて学ぶ前に、ポッドが実際に稼働していることを以下のコマンドで確認しましょう。クラスタ内の使用可能なポッドのリストが出力されます。含まれていることがわかります(「READY」列の「1/1」)。ポッドのステータス、再起動回数(問題がなければ「0」)、存続時間も確認できます。サービスとイングレスを使用してデプロイメントを公開するポッド、デプロイメント、コンテナについて学んだ今、新しいデプロイメントを利用してみたくなったのではないでしょうか。利用するには、デプロイメントを外部に公開するためのイングレスルールを作成する必要があります。通じて、クラスタ内のサービスに対する外部からのアクセスを管理するオブジェクト」です。終端処理、名前ベースの仮想ホスティングをサポートできます。クラスタにイングレスルールを構成するには、まず、イングレスコントローラが必要です。こちらでわかるとおり、多種多様なイングレスコントローラが利用できます。イングレスコントローラを利用します。このコントローラをクラスタにインストールする手順は、きわめてシンプルです。最初に必要な作業は、以下のコマンドを実行して、いくつかの必須リソースをインストールすることです。https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml次に、このコマンドを実行して、コントローラに必要な別の一連のリソースをインストールします。クラスタを実行している場合は、必要に応じて、これらと異なる一連のコマンドを実行します。相違点の詳細については、こちらの資料を確認してください。上のコマンドが正常に機能したことを確認するには、以下のコマンドを実行します。ingress-nginxこのコマンドを実行すると、nginx-ingress-controller-...という名前のポッドが表示され、ステータスが「running」となっているはずです。ingress-nginxフラグは、ingress-nginx名前空間にあるポッドのリストを出力することを指定しています。クラスタ内のリソースを整理するための優れた手段です。この機能については、別の機会に詳しく取り上げる予定です。クラスタ内にイングレスコントローラを構成した後、次の作業はサービスを作成することです。ここで、なぜサービスなのでしょうか。イングレスでないのは、なぜでしょうか。その理由は、ポッドが一過性のものであることから(何らかの理由で削除されたり、レプリケーションルールに基づいて新しいものが作成される可能性があります)、すべての関連ポッドを単一の要素として表現する(つまり、ここでは、それらのポッドに関係しているデプロイメントを表現する)静的なリソースが必要であることです。ポッドに対してサービスを定義すると、当該のサービスをポイントするイングレスルールを作成できるようになります。作成するには、service.yamlという名前のファイルを作成して、以下のコードを追加します。多種多様なサービスを利用できます。デプロイメントをクラスタ内部でのみ公開する場合に役立ちます。この種のサービスは、デプロイメントを外部に公開するものではありません。外部への公開用に他のタイプのサービスも存在していますが(詳細はこちらの資料で確認できます)、今回のシリーズでは使用しません。次に、以下のコマンドを実行して、このサービスをクラスタ内に作成します。service.yamlこのコマンドを実行すると、クラスタ内でのデプロイメントを表現するサービスが作成されます。このサービスが当該のデプロイメントの(つまり、実際にはポッドの)ブローカとして機能しているかどうかを把握するため、kubernetes-tutorial-deploymentをポイントするselector.appプロパティをサービスの記述(service.yaml)に追加しました。deployment.yamlファイルをもう一度参照すると、同じ値(kubernetes-tutorial-deployment)を持つlabels.appというプロパティがあることがわかります。これらのプロパティを使用して、このサービスをデプロイメントのポッドと紐付けます。注目すべき重要事項があります。3000をリッスンすることです。3000)が使用されるように定義したことがわかります。したがって、リクエストがポッドへとリダイレクトされるとき、サービスで適切なポートが宛先となっていることを確認する必要があります。つのサービスが表示されます。自体で使用されるメインのサービスです。一方は、作成したサービスkubernetes-tutorial-cluster-ipです。アドレス(CLUSTER-IP)を持っています。これらのアドレスを把握する必要はありません。今後わかりますが、イングレスではサービスをもっと効率的な方法で参照できます。サービスを作成した後は、いよいよイングレス(およびいくつかのルール)を定義して、このサービス(およびサービスが表現しているデプロイメント)を外部に公開できます。公開するには、ingress.yamlという名前のファイルを作成し、以下のコードを記述します。80このファイルでは、イングレスのリソースを単一のルール(spec.rules)で定義します。80)上のkubernetes-tutorial-cluster-ipサービス(以前に作成したサービスの名前)へとリダイレクトするよう指示するものです。新しいイングレスをクラスタにデプロイするには、以下のコマンドを実行します。アドレスを把握する必要があります。このためには、以下のコマンドを実行します。アドレス)をingress-nginxサービスから抽出しています。機能の詳細については、こちらを参照してください。アドレス(たとえば、104.248.109.181)が出力されます。アドレスにアクセスすると、デプロイしたアプリケーションが表示されます。アプリケーションをエミュレートしているに過ぎず、有用性はさほど高くなく、アイデンティティ管理(ユーザー認証)の仕組みすら備えていません。作業はこれで終了です。魅力の一端を感じられたのではないでしょうか。提供されるクレジットを使い切ることがないよう、今回のクラスタはすぐに削除するとよいでしょう。セクションにアクセスして、画面右側の「More」ボタンをクリックし、「Destroy」をクリックします。プロセスを実行するかどうかの確認画面が表示されます。"Kubernetesアプリケーションを初めてデプロイしてみましたがとても簡単でした。クラスタを作成した後、そのクラスタを利用してサンプルアプリケーションを起動しました。基本的な概念を学びました。マイクロサービスアプリケーションをオーケストレーションできるよう、より高度な概念の学習へと踏み出す準備が整いました。この記事がお役に立った場合、また、このトピックについてコンテンツの拡充をご希望の場合は、下にあるディスカッションのセクションでぜひお知らせください。アプリケーションビルダーのためにつくられた最初のアイデンティティ管理プラットフォームであり、カスタムビルドアプリケーションに必要とされる唯一のアイデンティティソリューションです。シンプルで、拡張性のある、スケーラブルなプラットフォームを提供し、あらゆるオーディエンスのために、あらゆるアプリケーションのアイデンティティを守ります。億回以上のログインを保護し、法人企業が信頼されるエレガントなデジタルエクスペリエンスを世界中の顧客に提供できるようにします。Twitterをご覧ください。