最近k8sの理解を深めたく勉強しており、ローカルで簡単にpodを作れるツールを使ってみたので記事にする。
本来ならEKSとECSを使って遊びたかったがお金がそこそこかかってしまうので今回は断念した。
色々探した結果、ローカルで簡単にkubernetesを使えるminikubeというツールがあったので使ってみた。
※minikubeを入れるだけでマスターノードやワーカーノードが自動で構築されるので、必要なファイルを作るだけでpodを作れる。
minikubeをインストール
minikubeはnodebrewを使ってインストールできる。
$ brew install minikube
$ which kubectl
/usr/local/bin/minikube
minikubeを起動する。
$ minikube start
多少時間がかかるが、「終了しました!」と出ればOK。
ノードを確認する。minikubeが表示されていれば準備完了。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 2m19s v1.30.0
kubectlが使えない場合は、インストールする。
$ brew install kubectl
deploymentとserviceの作成
pod作成に必要なdeploymentの定義とpodアクセスに必要なserviceの定義を作る。
あるあるだが、今回はApacheサーバー用のpodを作ることにする。
※定義ファイルの詳細については割愛。
apiVersion: apps/v1
kind: Deployment
metadata:
name: sampledep
spec:
selector:
matchLabels:
app: samplekube
replicas: 3
template:
metadata:
labels:
app: samplekube
spec:
containers:
- name: samplecontainer
image: httpd
ports:
- containerPort: 80
apiVersion: v1
kind: Service
metadata:
name: sampleservice
spec:
type: NodePort
ports:
- port: 8099
targetPort: 80
protocol: TCP
nodePort: 30080
selector:
app: samplekube
これらを適応する。
これでpod3台とserviceができるはず。
$ kubectl apply -f deployment.yml
deployment.apps/sampledep created
$ kubectl apply -f service.yml
service/sampleervice created
pod, serviceの確認とアクセス
podを確認する。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sampledep-5566c97977-8jpz9 1/1 Running 0 4m53s
sampledep-5566c97977-lqjd4 1/1 Running 0 4m53s
sampledep-5566c97977-txggc 1/1 Running 0 4m53s
3台のpodが立ち上がっており想定通り。
サービスも確認する。
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 12m
sampleservice NodePort 10.105.94.250 <none> 8099:30080/TCP 18s
想定どおりノードポートのサービスが作成された。
画面からも確認してみる。
サービスの情報から http://localhost:30080 にアクセスすればApacheの初期画面が見れるはず・・・
と思ったが、見れなかった。
minikubeでノードポートにアクセスするにはアクセス用のトンネルを起動させる必要がある。らしい。
$ minikube service sampleservice
|-----------|---------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|---------------|-------------|---------------------------|
| default | sampleservice | 8099 | http://192.168.49.2:30080 |
|-----------|---------------|-------------|---------------------------|
🏃 sampleservice サービス用のトンネルを起動しています。
|-----------|---------------|-------------|------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|---------------|-------------|------------------------|
| default | sampleservice | | http://127.0.0.1:59348 |
|-----------|---------------|-------------|------------------------|
🎉 デフォルトブラウザーで default/sampleservice サービスを開いています...
❗ Docker ドライバーを darwin 上で使用しているため、実行するにはターミナルを開く必要があります。
これでいけた。
後始末
使い終わったらちゃんと消しておく。
こういうの大事。
$ kubectl delete -f deployment.yml
deployment.apps "sampledep" deleted
$ kubectl delete -f service.yml
service "sampleservice" deleted
$ minikube stop
✋ 「minikube」ノードを停止しています...
🛑 SSH 経由で「minikube」の電源をオフにしています...
🛑 1 台のノードが停止しました。
minikubeを使えばかなり簡単にローカルでkubernetesを使った勉強ができると思う。
こういうのは手を動かした方が身につくので簡単に試せるのはすごくありがたい。
以上。