Kubernetes(クーバネティス)はコンテナの運用を自動化するためのオーケストレーションツールです。
下記関連ページでは、1つのホスト上でコンテナを起動させていますが、複数のホストにおいてコンテナを運用していく際に利用するのがKubernetesです。
Docker入門 [Hello World] コマンドの基本
Kubernetesを利用する環境は、大まかに以下3つに分けられます。
・GCPやAWS、Azureなどのマネージドサービス
・Rancher、Kubesprayなどを利用したオンプレミスによる構築
・MinikubeやDocker Desktop(Docker for Mac/Win)などのローカル環境
本記事ではDocker Desktopを利用してKubernetesを立ち上げます。その前にKubernetesの構成を大まかに説明してみます。
Kubernetesは、Dockerコンテナを実行するノード(Node)によって構成されます。ノードを管理するのがマスターノードであり、これらノード群をKubernetesクラスタと呼びます。
DockerホストとしてのノードにはPodが配置されます。Podは1つ以上のコンテナから構成され、このPod単位でアプリケーションとしてのコンテナが実行されます。各Podには一意の仮想NIC(プライベートIP)が割り当てられ、同じPod内のコンテナ同士はlocalhostで通信できます。
Docker DesktopでKubernetesを立ち上げる
開発環境
Docker Desktop
Version 2.0.0.3 (31259)
Kubernetes: v1.10.11
Docker DesktopのPreferenceを開き、「Enable Kubernetes」にチェックを入れたら「Apply」ボタンをクリックします。しばらくすると、下記のように「Kubernetes is running」と表示されます。
以上でKubernetesクラスタが構築されています。ターミナルでノードの情報を確認してみます。KubernetesのCLIツールであるkubectlコマンドを利用します。
1 2 3 4 |
kubectl get nodes NAME STATUS ROLES AGE VERSION docker-for-desktop Ready master 1d v1.10.11 |
docker-for-desktopという名前のマスターノードが作成されているのが確認できました。本記事ではこの1つのノード(シングルノード)において、Podを起動します。
Podの起動
Podを起動させてみます。今回は単純に1つのコンテナであるNginxが起動するPodを作成します。
1 2 3 |
kubectl run testnginx --image nginx deployment.apps "testnginx" created |
testnginxという名前を指定しています。正確にはkubectl runの実行によってtestnginxという名前のDeployment(後述)が作成されます。–imageオプションにはダウンロードする公式のnginxイメージを指定しています。※通常ではマニフェストファイル(docker-compose.ymlのようなYAMLファイル)によってPod作成をおこないます。関連ページをご覧下さい。
関連ページ
Kubernetesのマニフェスト(Manifest)ファイルでNginxを起動
kubectl runの実行によって作成されたDeployment(デプロイメント)の確認です。
1 2 3 4 |
kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE testnginx 1 1 1 1 2m |
DeploymentはReplicaSet(レプリカセット)を作成し管理します。そしてこのReplicaSetPodによってPodは複数作成され管理されます。Deployment>ReplicaSet>Pods のような関係を持ち、Deploymentがアプリケーションのデプロイにおいて基本単位となるリソースです。NAMEにtestnginxが表示されていることが確認できますが、後にPodを削除する場合などにこの名前を利用します。
Podの一覧を表示させます。podsは略してpoだけでも機能します。
1 2 3 4 |
kubectl get pods NAME READY STATUS RESTARTS AGE testnginx-d9695875f-4df2q 1/1 Running 0 1m |
Deployment名であるtestnginxがプレフィックスとして付加され、testnginx-d9695875f-4df2qという名前のPodが確認できました。
Serviceの作成
ブラウザで起動しているNginxを確認するには、Podに対してクラスタ外部からアクセスするためのService(サービス)を作成する必要があります。kubectl exposeを利用してServiceを作成します。
1 |
kubectl expose deployment testnginx --port 80 --type NodePort |
deploymentにtestnginxを指定しています。–typeオプションにはNodePortを指定していますが、これはクラスタ外からアクセスするためのServiceです。他にもClusterIP、LoadBalancerなどのServiceがあります。
Serviceの一覧を表示させます。
1 2 3 4 5 |
kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3m testnginx NodePort 10.107.35.249 <none> 80:30055/TCP 2m |
testnginxのServiceを確認できました。TYPEが作成時に指定したNodePortになっています。PORT(S)を見ると、30055ポートからアクセスできるようになっています。
以上で http://localhost:30055/ にて「Welcome to nginx!」の画面を確認できます。
PodとServiceの削除
作成した「testnginx」の削除をおこないます。
1 |
kubectl delete deployment testnginx |
作成した「testnginx」のServiceの削除をおこないます。
1 |
kubectl delete service testnginx |