前書き
https://www.digitalocean.com/community/tutorials/webinar-series-building-containerized-applications [このシリーズの前のチュートリアル]では、Docker Composeを使用したマルチコンテナーアプリケーションの管理について説明しました。 Dockerコマンドラインインターフェイス(CLI)とDocker Composeは単一のマシンで実行されているコンテナをデプロイおよびスケーリングできますが、https://kubernetes.io/ [Kubernetes]は複数のマシンまたはホストにデプロイされたマルチコンテナアプリケーションを処理するように設計されています。
Kubernetesは、コンテナ化されたアプリケーションを管理するためのオープンソースのコンテナオーケストレーションツールです。 Kubernetes _cluster_には、_Master Nodes_と_Worker Nodes_の2つの主要コンポーネントがあります。 マスターノードのセットは、ワーカーノードとデプロイされたアプリケーションを管理するコントロールプレーンとして機能します。 ワーカーノードは、コンテナ化されたアプリケーションの実行を担当するKubernetesクラスターの主力製品です。
マスターノードは、コマンドラインツールとリッチクライアントがアプリケーションの定義を含む_job_を送信するAPIを公開します。 各アプリケーションは、1つ以上の_containers_、ストレージ定義、およびそれらが公開される内部および外部ポートで構成されます。 マスターノードで実行されているコントロールプレーンは、ワーカーノードの1つのコンテナをスケジュールします。 アプリケーションがスケーリングされると、コントロールプレーンは、使用可能なワーカーノードのいずれかで追加のコンテナーを起動します。
Kubernetesの詳細な紹介については、チュートリアルhttps://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes[Kubernetesの紹介]を参照してください。
https://stackpoint.io [StackPointCloud]は、Webベースのインターフェースを使用して3つの手順でKubernetesクラスターをデプロイします。 簡素化されたユーザーエクスペリエンスにより、Kubernetesのインストールと構成の複雑さを隠します。 DigitalOceanは、StackPointがサポートするクラウドプラットフォームの1つです。 システムの管理と構成に精通していない開発者は、StackPointを使用してKubernetesをDigitalOceanにすばやくインストールできます。 サポートされている機能と価格の詳細については、そのサイトを参照してください。
このチュートリアルでは、StackPointを介してDigitalOceanでKubernetesをセットアップおよび構成し、コンテナ化されたアプリケーションをクラスターにデプロイします。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
`+ curl `コマンドがインストールされたローカルマシン。これを使用して、コマンドラインツールをダウンロードし、Kubernetesクラスターを管理します。 ` curl +`コマンドはmacOSおよびUbuntu 16.04に既にインストールされています。
-
DigitalOceanアカウント。 このチュートリアルでは、StackPointを使用してDigitalOceanアカウントに接続し、3つの1GBドロップレットをプロビジョニングします。
ステップ1 – Kubernetesのインストール
DigitalOceanでKubernetesのインストールを開始するには、https://stackpoint.io/ [Stackpoint.io]にアクセスして、[ログイン]ボタンをクリックします。
image:https://assets.digitalocean.com/articles/webinar_3_kubernetes_stackpoint/0ZKPzXu.png [StackPoint Webページ]
これにより、IDプロバイダーを選択し、既存の資格情報でログインできるページに移動します。 リストからDigitalOceanを選択し、DigitalOceanのユーザー名とパスワードでログインします。
image:https://assets.digitalocean.com/articles/webinar_3_kubernetes_stackpoint/vGNs8Fb.png [プロバイダーの選択]
次のページで、利用可能なクラウドプラットフォームのリストからDigitalOceanを選択します。
image:https://assets.digitalocean.com/articles/webinar_3_kubernetes_stackpoint/PLSX1LC.png [DigitalOceanプロバイダーを選択]
これで、クラスターを構成できます。 [編集]ボタンをクリックして、DigitalOceanプロバイダーの設定を編集します。
image:https://assets.digitalocean.com/articles/webinar_3_kubernetes_stackpoint/KwGSvAH.png [DigitalOceanプロバイダーの概要]
これにより、プロバイダーの構成画面が表示されます。
image:https://assets.digitalocean.com/articles/webinar_3_kubernetes_stackpoint/1UL1uRg.png [DigitalOceanプロバイダー構成ページ]
[地域]ドロップダウンリストから選択した地域を選択します。 他の設定はデフォルト値のままにしておくことができます。 完了したら、[送信]をクリックします。
次の画面で、選択したクラスター名を入力し、[送信]をクリックします。
image:https://assets.digitalocean.com/articles/webinar_3_kubernetes_stackpoint/tjZ7EM4.png [クラスター名を入力]
これでクラスターのインストールが開始され、クラスターの進行状況を追跡できるページに移動します。 インストールには約15分かかります。
image:https://assets.digitalocean.com/articles/webinar_3_kubernetes_stackpoint/LlfpVjS.png [クラスターのステータス]
クラスターを構成したら、コマンドラインツールをセットアップしてクラスターを操作できます。
ステップ2 – Kubernetes CLIの構成
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
次に、Kubernetesクラスターで「+ kubectl +」アプリを指定します。 そのためには、Stackpointから構成ファイルをダウンロードする必要があります。 ブラウザのクラスターステータスページに戻ります。 クラスターの準備ができて安定していることを確認したら、次の図に示すようにクラスター名をクリックします。
image:https://assets.digitalocean.com/articles/webinar_3_kubernetes_stackpoint/h84fVAg.png [クラスター名]
左側のメニューの* kubeconfig *リンクをクリックして、構成ファイルをローカルマシンにダウンロードします。
画像:https://assets.digitalocean.com/articles/webinar_3_kubernetes_stackpoint/xwSsvWo.png [img]
ターミナルに戻り、環境変数 `+ KUBECONFIG `をダウンロードしたファイルのパスに設定します。 ファイルがホームディレクトリの「 Downloads +」フォルダにダウンロードされたとすると、次のコマンドを発行します。
export KUBECONFIG=
+ kubectl
configureを使用して、クラスターと通信できることを確認しましょう。
ステップ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 –アプリケーションの展開とアクセス
シンプルなNginx Webサーバーを起動して、ローカルマシンからデフォルトのWebページにアクセスしてみましょう。 このコマンドを実行してhttps://hub.docker.com/_/nginx/[Nginx image]をhttps://hub.docker.com/[Docker Hub]から取得し、 `+ myweb +`というデプロイメントを作成します。
kubectl run --image=nginx:latest myweb
このコマンドは、コンテナを_Pod_と呼ばれるKubernetes固有のアーティファクトにパッケージ化してデプロイすることを除いて、 `+ docker run +`コマンドに似ています。 ポッドの詳細については、このシリーズの次のパートで説明します。
コマンドを実行すると、次の出力が表示されます。
Outputdeployment "myweb" created
次に、ポッドが `+ nginx +`コンテナで作成されていることを確認します。
kubectl get pods
次の出力が表示されます。
OutputNAME READY STATUS RESTARTS AGE
myweb-59d7488cb9-jvnwn 1/1 Running 0 3m
Pod内で実行されている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:/TCP 6m
この場合、NodePortはポート「31930」です。 すべてのワーカーノードはこのポートを使用してHTTP要求に応答します。 テストしてみましょう。
DigitalOceanコンソールを使用して、いずれかのワーカーノードのIPアドレスを取得します。
画像:https://assets.digitalocean.com/articles/webinar_3_kubernetes_stackpoint/w9acP7y.png [Droplets]
`+ curl `コマンドを使用して、ポート ` 31930 +`上のノードの1つにHTTPリクエストを送信します。
curl http://: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を使用すると、KubernetesをDigitalOceanに簡単にインストールできます。
このシリーズの次のパートでは、Kubernetesの構成要素についてさらに詳しく説明します。