Kubernetes 上にデプロイ

Docker デスクチップはスタンドアロン Kubernetes サーバとクライアントを含むだけでなく、Docker コマンドライン・インターフェースと統合しています。 Kubernetes サーバはローカルの Docker インスタンス内で実行します。設定の変更はできず、単一ノードのクラスタです。

ローカルシステム上の Docker コンテナ内で Kubernetes サーバが稼働します。また、用途はローカルでのテストのみです。Kubernetes サポートを有効化したら、Kubernetes 、 Swarm 、そしてスタンドアロン・コンテナを、それぞれ並列にワークロードをデプロイ可能となります。

Kubernetes を有効化し、 Kubernetes 上にワークロードをデプロイするテストを開始するには、 Docker Desktop for Mac > Docker for Mac を始めよう を御覧ください。

Docker コマンドを使う

docker stack deploydocker-compose.yml ファイルとスタック名を使い、Kubernetes 上にスタックをデプロイ可能です。

docker stack deploy --compose-file /path/to/docker-compose.yml mystack
docker stack services mystack

デプロイしたサービスは kubectl get services コマンドで表示できます。

名前空間の指定

デフォルトでは default namespace (名前空間)が使われます。名前空間は --namespace フラグで指定します。

docker stack deploy --namespace my-app --compose-file /path/to/docker-compose.yml mystack

kubectl get services -n my-app の実行は、 my-app 名前空間にデプロイしているサービスのみ表示します。

デフォルトのオーケストレータを上書き

Kubernetes でテストをしながら、複数のワークロードを swarm モードにデプロイしたい場合があるでしょう。 DOCKER_STACK_ORCHESTRATOR 環境変数を使い、操作中のターミナル・セッションや単一の Docker コマンドで、デフォルトのオーケストレータを上書きします。この環境変数は 設定されていない (デフォルト、この場合はオーケストレータが Kubernetes)か、 swarm または kubernetes をセットします。以下はコマンドを実行する前に環境変数を設定し、単一デプロイメント用のオーケストレータを上書きするコマンドです。

DOCKER_STACK_ORCHESTRATOR=swarm docker stack deploy --compose-file /path/to/docker-compose.yml mystack

あるいは、デプロイメント向けのデフォルト・オーケストレータをデプロイ時に上書きする場合は、 --orchestrator フラグでも設定できます。

docker stack deploy --orchestrator swarm --compose-file /path/to/docker-compose.yml mystack

注釈

Kubernetes と swarm モードで同じアプリをデプロイすると、ポートやサービス名に競合を引き起こす場合があります。

kubectl コマンドを使う

Windows Kubernetes 統合機能により、Kubernetes CLI コマンドが /usr/local/bin/kubectl に提供されています。この場所はシェルの PATH 変数に入っていない場合があるため、コマンドはフルパスで実行するか、 PATH に追加する必要があります。 kubectl に関する情報は、 公式 kubectl ドキュメント を御覧ください。コマンドのテストは、利用可能なノード一覧の表示で行えます。

kubectl get nodes

NAME                 STATUS    ROLES     AGE       VERSION
docker-desktop       Ready     master    3h        v1.8.2

アプリ例

Docker は以下のデモ用アプリケーションを作成しました。 docker stack deploy コマンドを使って swarm モードや Kubernetes にデプロイできます。

version: '3.3'

services:
  web:
    image: dockersamples/k8s-wordsmith-web
    ports:
     - "80:80"

  words:
    image: dockersamples/k8s-wordsmith-api
    deploy:
      replicas: 5
      endpoint_mode: dnsrr
      resources:
        limits:
          memory: 50M
        reservations:
          memory: 50M

  db:
    image: dockersamples/k8s-wordsmith-db

既に Kubernetes YAML ファイルがある場合は、 kubectl コマンドを使ってデプロイできます。