0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【kubernetes】minikubeでいとも簡単にkubernetes(k8s)を使ってみた

Last updated at Posted at 2024-05-06

最近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を作ることにする。
※定義ファイルの詳細については割愛。

deployment.yml
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
service.yml
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 上で使用しているため、実行するにはターミナルを開く必要があります。

これでいけた。

image.png

後始末

使い終わったらちゃんと消しておく。
こういうの大事。

$ 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を使った勉強ができると思う。
こういうのは手を動かした方が身につくので簡単に試せるのはすごくありがたい。

以上。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?