Kubernetes にデプロイ¶
動作条件¶
概要説明とセットアップ に記述された Docker Desktop のダウンロードとインストール
Part 2 でアプリケーションのコンテナ化を一通り行う
Docker Desktop 上で Kubernetes 機能が有効化されていることを確認
- Mac :メニューバー内の Docker アイコンをクリックし、 Preferences に移動し、「Kubernetes」の横に緑のライトが点等していること
- Windows :システムトレイ内の Docker アイコンをクリックし、 Settings に移動し、「Kubernetes」の横に緑のライトが点等していること
もし Kubernetes が起動していなければ、 オーケストレーション の手順を確認し、セットアップを完了してから以下の手順に進みます。
はじめに¶
ここからは、私たちのアプリケーションの個々のコンポーネントを、スタンドアロン・コンテナ(stand-alone container)として実行してみましょう。Kubernetes のようなオーケストレータによって管理できるように、調整する機会です。Kubernetes はコンテナ化アプリケーションのをスケール、ネットワーク機能、安全性、管理するための多くのツールを提供し、コンテナ自身に前述および後述の能力を与えます。
私たちのコンテナ化アプリケーションが Kubernetes 上でも同様に動作するのを確認します。プロダクションの完全な Kubernetes クラスタにアプリケーションを持ち出す前に、開発マシン上にある Docker Desktop の Kubernetes 環境を使い、アプリケーションをデプロイします。Docker Desktop によって作成される Kubernetes 環境は、全ての機能を持ちます。つまり、アプリケーションが Kubernetes 環境で全て動作するのであれば、実際のクラスタ上でも動作しますので、開発マシン上からも簡単に利用できるのを意味します。
Kubernetes YAML でアプリケーションを記述¶
Kubernetes 内の全てのコンテナは pod (ポッド)としてスケジュールされます。pod とは同じリソースを共有する、同じ場所に配置されるコンテナのグループです。さらに、実際のアプリケーションでは、ほとんど単体の pod を作りません。そのかわりに、多く音ワークロードは デプロイメント(deployment) としてスケジュールされます。これはスケーラブルな(拡張性を備えた)pod のグループであり、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: bulletinboard:1.0
---
apiVersion: v1
kind: Service
metadata:
name: bb-entrypoint
namespace: default
spec:
type: NodePort
selector:
bb: web
ports:
- port: 8080
targetPort: 8080
nodePort: 30001
この Kubernetes YAML ファイルには、 ---
によって区切られる2つのオブジェクトがあります。
Deployment
で、完全に等しい pod のスケーラブルなグループを記述します。この例では、1つのreplica
(レプリカ)を入手するか、 pod のコピーを入手できるようにし、その pod (template
以下に記述 )内で1つのコンテナを持ちます。このコンテナは、このチュートリアル以前のステップで用いたbulletinboard:1.0
イメージをベースとするものです。NodePort
サービスは、ホスト上のポート 30001 からのトラフィックを、 pod 内の 8080 に転送します。これにより、ネットワークから掲示板に到達可能になります。
また、kubernetes YAML を初めて見ると、長く複雑に見えてしまいますが、ほとんどが以下のように同じパターンです。
apiVersion
が示すのは、Kubernetes API で対象オブジェクトをパースする指定kind
が示すのは、これがどのような種類のオブジェクトか- いくつかの
metadata
は、オブジェクトに対して名前のようなものを適用 spec
で指定するのは、オブジェクトに対するパラメータと設定の全て
アプリケーションののデプロイと確認¶
- ターミナル上で、
bb.yaml
を作成した場所に移動し、 Kubernetes にアプリケーションをデプロイします。
kubectl apply -f bb.yaml
すると、以下のような出力が現れ、Kubernetes オブジェクトの作成に成功したことが分かります。
deployment.apps/bb-demo created
service/bb-entrypoint created
- デプロイメントのリストを表示し、全てが正常動作しているのを確認します。
kubectl get deployments
全てが正常であれば、デプロイメントは一覧に次のように表示されます。
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
bb-demo 1 1 1 1 48s
これが示すのは、YAML で命令した全ての pod が起動して実行中であることがわかります。サービスに対しても同様に確認します。
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
bb-entrypoint NodePort 10.106.145.116 <none> 8080:30001/TCP 53s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 138d
デフォルトの kubernetes
サービスに加え、私たちの bb-entrypoint
サービスが見え、ポート 30001/TCP のトラフィックを受け入れるのが分かります。
- ブラウザで
localhost:30001
を開き、掲示板を訪ねましょう。そうすると、クイックスタート・チュートリアルの Part 2 で実行したスタンドアロン・コンテナと同じ掲示板が表示されます。
- 満足したら、アプリケーションを解体します。
kubectl delete -f bb.yaml
まとめ¶
これまで、 Docker Desktop を使い、私たちの開発マシン上で全機能が揃った Kubernetes 環境に、私たちのアプリケーションをデプロイすることに成功しました。まだ Kubernetes をほとんど触っていませんが、新しいドアが開かれました。つまり、アプリケーションに他のコンポーネントを追加できますし、まさにあなたのマシン上で、Kubernetes の全ての機能とパワーを活用できるのです。
Kubenetes へのデプロイに付け加えると、アプリケーションを Kubernetes YAML ファイルとして記述しました。これはシンプルなテキストファイルで、アプリケーションを実行状態として生成するために全てを含むものです。同僚とバージョンコントロールでチェックおよび共有できるようにすると、他のクラスタ(開発環境の後に続く、テストやプロダクションに対応したクラスタ)に対するアプリケーションの配布が簡単になります。
Kubernetes リファレンス¶
この記事で使われた新しい Kubernetes オブジェクトに関する詳しい情報は、こちらをご覧ください。
参考
- Deploy to Kubernetes
- https://docs.docker.com/get-started/kube-deploy/