ウェビナーシリーズ:Kubernetes入門

提供:Dev Guides
移動先:案内検索

この記事は、クラウドでのコンテナー化されたワークロードのデプロイと管理に関するウェビナーシリーズを補足するものです。 このシリーズでは、コンテナライフサイクルの管理、マルチコンテナアプリケーションのデプロイ、ワークロードのスケーリング、Kubernetesの操作など、コンテナの基本事項について説明します。 また、ステートフルアプリケーションを実行するためのベストプラクティスについても説明します。

このチュートリアルには、シリーズの3番目のセッションであるKubernetes入門の概念とコマンドが含まれています。


YouTubeビデオを見る

序章

このシリーズの前のチュートリアルでは、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の構成要素について詳しく説明します。