この記事は、クラウドでのコンテナー化されたワークロードのデプロイと管理に関するウェビナーシリーズを補足するものです。 このシリーズでは、コンテナライフサイクルの管理、マルチコンテナアプリケーションのデプロイ、ワークロードのスケーリング、Kubernetesの操作など、コンテナの基本事項について説明します。 また、ステートフルアプリケーションを実行するためのベストプラクティスについても説明します。
このチュートリアルには、シリーズの3番目のセッションであるKubernetes入門の概念とコマンドが含まれています。
序章
このシリーズの前のチュートリアルでは、DockerComposeを使用したマルチコンテナーアプリケーションの管理について説明しました。 Dockerコマンドラインインターフェース(CLI)とDocker Composeは、単一のマシンで実行されているコンテナーをデプロイおよびスケーリングできますが、 Kubernetes は、複数のマシンまたはホストにデプロイされたマルチコンテナーアプリケーションを処理するように設計されています。
Kubernetesは、コンテナ化されたアプリケーションを管理するためのオープンソースのコンテナオーケストレーションツールです。 Kubernetes cluster には、マスターノードとワーカーノードの2つの主要コンポーネントがあります。 マスターノードのセットは、ワーカーノードとデプロイされたアプリケーションを管理するコントロールプレーンとして機能します。 ワーカーノードは、コンテナ化されたアプリケーションの実行を担当するKubernetesクラスターの主力製品です。
マスターノードは、コマンドラインツールとリッチクライアントがアプリケーションの定義を含むjobを送信するためのAPIを公開します。 各アプリケーションは、1つ以上のコンテナー、ストレージ定義、およびそれらが公開される内部ポートと外部ポートで構成されます。 マスターノードで実行されているコントロールプレーンは、ワーカーノードの1つでコンテナをスケジュールします。 アプリケーションがスケーリングされると、コントロールプレーンは、使用可能なワーカーノードのいずれかで追加のコンテナーを起動します。
Kubernetesの詳細な概要については、チュートリアルKubernetesの概要を参照してください。
StackPointCloud は、ウェブベースのインターフェースを使用して3つのステップでKubernetesクラスターをデプロイします。 簡素化されたユーザーエクスペリエンスを通じて、Kubernetesのインストールと設定の複雑さを隠します。 DigitalOceanは、StackPointでサポートされているクラウドプラットフォームの1つです。 システムの管理と構成に精通していない開発者は、StackPointを使用してKubernetesをDigitalOceanにすばやくインストールできます。 サポートされている機能と価格の詳細については、それらのサイトを参照してください。
このチュートリアルでは、StackPointを介してDigitalOceanでKubernetesをセットアップおよび構成し、コンテナー化されたアプリケーションをクラスターにデプロイします。
前提条件
このチュートリアルに従うには、次のものが必要です。
curl
コマンドがインストールされたローカルマシン。これを使用して、Kubernetesクラスターを管理するためのコマンドラインツールをダウンロードします。curl
コマンドはすでにmacOSとUbuntu16.04にインストールされています。- DigitalOceanアカウント。 このチュートリアルでは、StackPointを使用してDigitalOceanアカウントに接続し、3つの1GBドロップレットをプロビジョニングします。
ステップ1-Kubernetesをインストールする
DigitalOceanへのKubernetesのインストールを開始するには、 Stackpoint.io にアクセスし、[ログイン]ボタンをクリックします。
これにより、IDプロバイダーを選択し、既存の資格情報を使用してログインできるページに移動します。 リストからDigitalOceanを選択し、DigitalOceanのユーザー名とパスワードを使用してログインします。
次のページで、利用可能なクラウドプラットフォームのリストからDigitalOceanを選択します。
これで、クラスターを構成できます。 [編集]ボタンをクリックして、DigitalOceanプロバイダーの設定を編集します。
これにより、[プロバイダーの構成]画面が表示されます。
Regionドロップダウンリストからお好みのリージョンを選択してください。 他の設定はデフォルト値のままにしておくことができます。 完了したら、送信をクリックします。
次の画面で、選択したクラスター名を入力し、送信をクリックします。
これでクラスターのインストールが開始され、クラスターの進行状況を追跡できるページが表示されます。 インストールには約15分かかります。
クラスタを構成したら、それを操作するためのコマンドラインツールを設定できます。
ステップ2–KubernetesCLIの設定
DigitalOceanで実行されているKubernetesクラスターと通信するには、開発マシンにコマンドラインツールが必要です。 KubernetesのCLIであるkubectl
を使用します。
次のコマンドを実行して、Googleのサーバーからkubectl
をインストールします。
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl
次の出力が表示されます。
Output % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 63.7M 100 63.7M 0 0 5441k 0 0:00:12 0:00:12 --:--:-- 4644k
kubectl
バイナリが現在のディレクトリにダウンロードされました。ダウンロードしたバイナリの権限を変更し、/usr/local/bin
ディレクトリに移動して、どこからでも実行できるようにします。
chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl
次に、kubectl
アプリをKubernetesクラスターに向けます。 そのためには、Stackpointから構成ファイルをダウンロードする必要があります。 ブラウザのクラスタステータスページに戻ります。 クラスタの準備ができて安定していることを確認したら、次の図に示すようにクラスタ名をクリックします。
左側のメニューのkubeconfigリンクをクリックして、構成ファイルをローカルマシンにダウンロードします。
ターミナルに戻り、環境変数KUBECONFIG
をダウンロードしたファイルのパスに設定します。 ファイルがホームディレクトリのDownloads
フォルダにダウンロードされたとすると、次のコマンドを発行します。
export KUBECONFIG=~/Downloads/kubeconfig
kubectl
を構成したら、クラスターと通信できることを確認しましょう。
ステップ3–Kubernetesのインストールを確認する
クライアントとともに完全に構成されたクラスターができたので、いくつかのコマンドを実行して環境を確認しましょう。
次のコマンドを実行して、クラスターに関する情報を取得します。
kubectl cluster-info
次の出力が表示されます。
OutputKubernetes master is running at https://139.59.17.180:6443 Heapster is running at https://139.59.17.180:6443/api/v1/namespaces/kube-system/services/heapster/proxy KubeDNS is running at https://139.59.17.180:6443/api/v1/namespaces/kube-system/services/kube-dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
出力は、クラスターが機能していること、およびKubernetesマスターノードが稼働中であることを確認します。
次に、マスターノードで実行されているすべてのコンポーネントの正常性を確認しましょう。 クラスターが構成されたばかりの場合、すべてのコンポーネントが正常な状態を示すまでに時間がかかる場合があります。 これらのコンポーネントは、コントロールプレーンとして機能するKubernetesマスターノードの一部です。
次のコマンドを実行します。
kubectl get cs
次の出力が表示されます。
OutputNAME STATUS MESSAGE ERROR scheduler Healthy ok controller-manager Healthy ok etcd-0 Healthy {"health": "true"}
最後に、実行中のKubernetesクラスターのすべてのノードを一覧表示しましょう。
kubectl get nodes
次のような出力が表示されます。
OutputNAME STATUS ROLES AGE VERSION spc52y2mk3-master-1 Ready master 29m v1.8.5 spc52y2mk3-worker-1 Ready <none> 22m v1.8.5 spc52y2mk3-worker-2 Ready <none> 22m v1.8.5
これにより、1つのマスターノードと2つのワーカーノードを持つクラスターで、アプリケーションをデプロイする準備ができていることが確認されます。 それでは、アプリケーションをクラスターにデプロイしましょう。
ステップ4–アプリケーションのデプロイとアクセス
単純なNginxWebサーバーを起動し、ローカルマシンからデフォルトのWebページにアクセスしてみましょう。 次のコマンドを実行して、 Docker HubからNginxイメージをプルし、myweb
というデプロイメントを作成します。
kubectl run --image=nginx:latest myweb
このコマンドはdocker run
コマンドに似ていますが、Podと呼ばれるKubernetes固有のアーティファクトにコンテナーをパッケージ化してデプロイする点が異なります。 このシリーズの次のパートでは、ポッドについて詳しく学習します。
コマンドを実行すると、次の出力が表示されます。
Outputdeployment "myweb" created
次に、ポッドがnginx
コンテナで作成されていることを確認します。
kubectl get pods
次の出力が表示されます。
OutputNAME READY STATUS RESTARTS AGE myweb-59d7488cb9-jvnwn 1/1 Running 0 3m
ポッド内で実行されているWebサーバーにアクセスするには、ポッドをパブリックインターネットに公開する必要があります。 次のコマンドでこれを実現します。
kubectl expose pod myweb-59d7488cb9-jvnwn --port=80 --target-port=80 --type=NodePort
Outputservice "myweb-59d7488cb9-jvnwn" exposed
これで、ポッドは任意のポートのクラスターのすべてのノードで公開されます。 --port
および--target-port
スイッチは、Webサーバーが使用可能になるポートを示します。 スイッチ--NodePort
は、クラスター上の任意のノードを使用してアプリケーションにアクセスできることを保証します。
myweb
デプロイメントのNodePortを取得するには、次のコマンドを実行します。
kubectl get svc myweb-59d7488cb9-jvnwn
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE myweb-59d7488cb9-jvnwn NodePort 10.3.0.119 <none> 80:31930/TCP 6m
この場合、NodePortはポート31930
です。 すべてのワーカーノードは、このポートを使用してHTTPリクエストに応答します。 それをテストしてみましょう。
DigitalOceanコンソールを使用して、いずれかのワーカーノードのIPアドレスを取得します。
curl
コマンドを使用して、ポート31930
上のノードの1つにHTTP要求を送信します。
curl http://your_worker_1_ip_address:31930/
Nginxのデフォルトのホームページを含む応答が表示されます。
Output<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> ... Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
コンテナ化されたアプリケーションがKubernetesクラスタに正常にデプロイされました。
結論
Kubernetesは人気のあるコンテナ管理プラットフォームです。 StackPointを使用すると、DigitalOceanにKubernetesを簡単にインストールできます。
このシリーズの次のパートでは、Kubernetesの構成要素について詳しく説明します。