投稿日:2020年10月3日
kubectlはKubernetesのクラスタを操作することのできるコマンドラインツールです。この記事ではKubernetes初心者向けにkubectlで簡単なサーバーを起動する方法を解説します。
この記事ではkubectlを実際に使ってKubernetesのクラスタを操作してざっくり流れを理解することを目的としています。Kubernetesのそれぞれの単語、Deployment、Service、Podなどの単語については解説はしていません。
この記事でKubernetesの全体の流れを掴んでから解説を見に行くことをオススメします。
この記事ではMinikubeとkubectlがすでに環境にインストールされていることを前提としています。まだインストールできていない方は前の記事、または公式サイトを参考にインストールしてから記事を読み始めることをオススメします。
まずはMinikubeを実行してクラスターを実行します。
自分の場合driverがkvm2なのでkvm-qemu-uriオプションをつけていますが、virtualboxやdockerを使用する場合このオプションは必要ありません。
$ minikube start --driver=kvm2 --kvm-qemu-uri qemu:///system
Minikubeはminikube startコマンドでクラスタの起動をすることができます。このコマンドはVirtualMachineの作成と初期設定をし、そこで単一ノードのKubernetesクラスタを実行してくれます。
このコマンドは追加でkubectlのインストールと設定もしてくれます。
ではkubectl使ってクラスタをいじってみましょう。
まずはechoserverというDockerイメージのDeploymentを作成します。
ちなみにここで使用するechoserverはポート8080番でサンプルのHTTPサーバーを起動するイメージです。
deploymentの作成はkubectl create deploymentというコマンドを使います。
$ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
deployment.apps/hello-minikube created
k8s.gcr.io/echoserver:latestというImageを使うDeploymentをhello-minikubeという名前で作成しました。
作成したDeploymentの情報はkubectl get deploymentコマンドやkubectl describe deploymentコマンドで見ることができます。
$ kubectl get deployment hello-minikube
NAME READY UP-TO-DATE AVAILABLE AGE
hello-minikube 1/1 1 1 65s
$ kubectl describe deployment hello-minikube
Name: hello-minikube
Namespace: default
CreationTimestamp: Fri, 02 Oct 2020 23:14:32 +0900
Labels: app=hello-minikube
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=hello-minikube
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=hello-minikube
Containers:
echoserver:
Image: k8s.gcr.io/echoserver:1.10
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: hello-minikube-5d9b964bfb (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 78s deployment-controller Scaled up replica set hello-minikube-5d9b964bfb to 1
作成したDeploymentをServiceとして公開してみましょう。
Deploymentの公開はkubectl expose deploymentコマンドを使います。
$ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed
ここで渡しているオプションの--type=NodePortはServiceのタイプの指定です。
Serviceが公開されたことでPodも起動しています。
現在起動しているPodを確認するにはkubectl get podコマンドを使用します。
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-5d9b964bfb-77zwg 1/1 Running 0 2m31s
今STATUSの値はRunningになっています。ContainerCreatingだった場合にはPodは起動中なので少し待ちましょう。
Podの起動が確認できたら動作を確認してみましょう。Serviceが公開されているローカルのURLはminikube serviceコマンドに--urlオプションをつけることで確認できます。
$ minikube service hello-minikube --url
http://192.168.39.47:32317
ブラウザでURLを開くと、HTTPリクエストの内容と起動しているPodの内容を表示してくれます。
最後に環境をキレイにしておきます。
$ kubectl delete services hello-minikube
service "hello-minikube" deleted
$ kubectl delete deployment hello-minikube
deployment.apps "hello-minikube" deleted