0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ローカル環境にファイルを作成せずにKubernetesクラスタを実行する

Last updated at Posted at 2024-01-24

目的

 マニフェストファイル、Dockerfileなどを使わずにコマンドラインのみでKubernetesクラスタを作成、実行することを目指します。
 今回はDjangoを例にとり、"Congratulations!"ページを表示させるところまで行います。

環境・使用したツール

OS コマンドラインツール Docker Kubernetes
Windows11 powershell7.4.1 Docker Desktop minikube

手順

1. クラスタを作成する

minikube start

2. デプロイメントを作成する

 デプロイメントを作成するため、次のコマンドを実行します。

kubectl create deployment django --image=python -- sleep infinity

注意
 sleep infinityのコマンドについては、CrashLoopBackOffを防ぐために仮に指定しています。もっと合理的な方法があるかもしれません。

 このコマンドを実行してしばらく待ってからkubectl get podsを実行すると、次のようにSTATUSの項目がRunningになると思います。(NAMEの項目はこの通りである必要はありません)

NAME                     READY   STATUS    RESTARTS   AGE
django-d6587fc44-4mmw2   1/1     Running   0          44m

3. Pod内部にDjangoプロジェクトを作成する

 次のコマンドを実行してPodにアクセスします。django-d6587fc44-4mmw2の部分は、先ほどkubectl get podsでpodsの内容を取得した際のNAMEの項目を適宜入力してください。

kubectl exec -ti django-d6587fc44-4mmw2 -- bash

 すると、Pythonのイメージから作成されたPodの内部にアクセスできると思います。Writing your first Django app, part 1などを参考にしてDjangoプロジェクトを作成するところまでおこなってください。

4. サーバーを起動する

 manage.pyファイルがあるディレクトリに移動し、次のコマンドを入力してください。0.0.0.0:8000のようにIPアドレス部を0.0.0.0と指定します。ポート番号は任意です。

python manage.py runserver 0.0.0.0:8000

5. Podを外部に公開する

 別の端末を起動するなどして、ローカル環境で次のコマンドを実行します。 タイプはNodePortなどでも動きます。 (この記述によると、LoadBalancerは適切ではない可能性があります。)ポート番号は4.で指定した番号と同じものを指定してください。nameオプションは省略できます。

kubectl expose deployment django --name=django-service --type=LoadBalancer --port=8000

 ここでkubectl get servicesを実行すると、次のような結果が表示されます。新しいサービスが作成されているのが分かると思います。

NAME             TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
django-service   LoadBalancer   10.108.118.243   <pending>     8000:31584/TCP   7s
kubernetes       ClusterIP      10.96.0.1        <none>        443/TCP          27m

 さらに次のコマンドを実行すると、自動でブラウザが立ち上がりDjangoの"Congratulations!"ページが表示されます。django-serviceの部分は、kubectl get servicesで取得したサービス名を入力してください。

minikube service django-service
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?