Kubernetes へのデプロイ
読む時間の目安: 2 分
前提条件
- 概要 にて説明している Docker Desktop をダウンロードしインストールしていること。
- クイックスタート 2 部 においてアプリケーションのコンテナー化を一通り学んでいること。
- Docker Desktop 上において Kubernetes が有効になっていること。
- Mac: メニューバーの Docker アイコンをクリック、Preferences を実行し ‘Kubernetes’ の横がグリーンに点灯していること。
- Windows: システムトレイの Docker アイコンをクリック、Settings を実行し ‘Kubernetes’ の横がグリーンに点灯していること。
Kubernetes が起動していない場合は、本チュートリアルの 概要 に示す手順に従って設定を行ってください。
はじめに
ここまでにアプリケーションの個々のコンポーネントが、スタンドアロンなコンテナーとして実行される様子を見てきました。 ここからはそれらを整理して、Kubernetes のようなオーケストレーターによって管理してくことにします。 Kubernetes はコンテナー化されたアプリケーションに対して、そのコンテナーの能力を超えて、スケール、ネットワーク、セキュリティ、保守を行うツールを数多く提供します。
Kubernetes 上においてコンテナー化アプリケーションが適正に動作していることを確認するために、まずは開発マシン上にて Kubernetes 環境化の Docker Desktop を用いてアプリケーションデプロイを行います。 完全な Kubernetes クラスターによる本番環境での稼動は、その次に扱っていくことにします。 Docker Desktop によって構築されている Kubernetes 環境は 完全な機能 を有しています。 つまりそこには Kubernetes の全機能が含まれていて、実際のクラスター上でアプリを動作させることができ、開発マシンから容易にアクセスすることができます。
Kubernetes YAML を用いたアプリ記述
Kubernetes 内の全コンテナーは ポッド(pod)としてスケジューリングされます。 このポッドとは、リソースを共有する複数コンテナーのグループのことです。 なお現実のアプリケーションにおいては、ポッドを1つずつ生成するようなことはしません。 たいていのアプリケーション開発では deployments としてスケジューリングされます。 これは Kubernetes によって自動的に管理される、スケール変更可能なポッドのグループのことです。 そして Kubernetes によるオブジェクトは、すべて Kubernetes YAML ファイルと呼ばれるファイル内に記述されます。 この YAML ファイルに Kubernetes アプリのコンポーネントや設定をすべて記述します。 こうして Kubernetes 環境内でのアプリケーションの生成と削除が容易にできるようになります。
-
本チュートリアルのオーケストレーション概要の部において、すでに基本的な Kubernetes YAML ファイルを作り出しました。 そこでこの YAML ファイルをもう少し洗練されたものにして、掲示板アプリの実行と管理を行っていきます。
bb.yaml
というファイルに以下の内容を記述してください。apiVersion: apps/v1 kind: Deployment metadata: name: bb-demo namespace: default spec: replicas: 1 selector: matchLabels: bb: web template: metadata: labels: bb: web spec: containers: - name: bb-site image: getting-started --- apiVersion: v1 kind: Service metadata: name: bb-entrypoint namespace: default spec: type: NodePort selector: bb: web ports: - port: 3000 targetPort: 3000 nodePort: 30001
この Kubernetes YAML ファイルには二つのオブジェクトを定義しています。 それらは
---
で区切られています。Deployment
は、スケール変更可能な同一ポッドのグループを表わします。 この例ではreplica
すなわちポッドのコピーを1つだけ用意します。 そしてこのポッドは、その中に1つだけコンテナーを持ちます(このことはtemplate:
キー配下により示されます)。 ベースとするイメージは、本チュートリアルの以前の手順にて利用したbulletinboard:1.0
です。NodePort
サービスは、ホストのポート 30001 からのトラフィックを処理して、ポッド内の 3000 ポートへ接続します。 こうしてネットワーク上から掲示板アプリへアクセスできるようになります。
また Kubernetes YAML は、はじめのうちは長く複雑に見えがちですが、たいていは同一パターンを持っています。
apiVersion
、オブジェクトを扱うための Kubernetes API を表わします。kind
は、このオブジェクトがどういう種類のものかを表わします。metadata
は、たとえば name などの情報をオブジェクトに適用します。spec
は、オブジェクトに対するパラメーターや設定項目を指定します。
アプリケーションのデプロイと確認
-
端末にて
bb.yaml
を生成したディレクトリに移動し、Kubernetes にアプリケーションをデプロイします。$ kubectl apply -f bb.yaml
以下のような出力が得られます。 これは Kubernetes オブジェクトが正常に生成されたことを示しています。
deployment.apps/bb-demo created service/bb-entrypoint created
-
デプロイ結果の一覧を表示して、正常にすべてが動作していることを確認します。
$ kubectl get deployments
すべて正常であれば、以下のようにデプロイ結果が一覧表示されます。
NAME READY UP-TO-DATE AVAILABLE AGE bb-demo 1/1 1 1 40s
YAML ファイル内に指定したポッドの個々が、すべて起動していることがわかります。 同様にサービスに対しても確認します。
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE bb-entrypoint NodePort 10.106.145.116 <none> 3000:30001/TCP 53s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 138d
デフォルトの
kubernetes
サービスに加えてbb-entrypoint
サービスが表示されます。 このサービスはトラフィックをポート 30001/TCP から受け付けます。 -
ブラウザーを開いて
localhost:30001
にアクセスし掲示板アプリを開きます。 ここでも掲示板アプリを見ることができます。 これはクイックスタートチュートリアルの 2 部 において、スタンドアロンなコンテナー上に起動させたアプリと同一のものです。 -
結果を確認できたらアプリケーションを削除します。
$ kubectl delete -f bb.yaml
まとめ
開発マシン上にて Kubernetes の全機能を実現した環境に、Docker Desktop を用いてアプリケーションをデプロイすることに成功しました。 Kubernetes を使った作業には、まだまだ多くのことがあります。 これは入り口に入ったばかりということです。 アプリケーションに別のコンポーネントを加えてみれば、Kubernetes の優れた機能や性能が見えてきます。 それをまさに開発マシン上で確認できます。
Kubernetes へのデプロイに加えて、アプリケーションを Kubernetes YAML ファイルとして記述しました。 この単純なテキストファイルが、アプリケーションを生成して実行するために必要なものをすべて含んでいるわけです。 このファイルをバージョン管理システムにアップして、仲間と共有してみましょう。 そうすればこのアプリケーションを別の担当者(おそらく開発担当者から受け渡す先として、テスト環境担当者や本番環境担当者)に容易に配布できることになります。
Kubernetes リファレンス
本文において新たに用いた Kubernetes オブジェクトについての詳細は、以下を参照してください。
kubernetes, pods, deployments, kubernetes services