コンテンツにスキップ

Minikube

Minikube

minikube はローカル環境で Kubernetes 環境を設定するツールである。

minikube start | minikube

1
2
3
4
5
6
7
# x64
curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

# ARM64
curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-arm64
sudo install minikube-linux-arm64 /usr/local/bin/minikube && rm minikube-linux-arm64

Docker がインストールされていないと動かない。またユーザーを docker グループに所属させる必要がある。

1
$ minikube start

kubectlminikubeに組み込まれている。エイリアスでkubectlがあるかのように使える。

1
2
3
4
5
# kubectlを使う
$ minikube kubectl -- get pods

$ alias kubectl="minikube kubectl --"
$ kubectl get pods

Nginx を動かす

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ kompose convert -o ./nginx-manifests/ --volumes hostPath

$ minikube start

$ kubectl apply -f ./nginx-manifests/

$ kubectl port-forward service/nginx 8080:8080

$ minikube service nginx

$ kubectl delete -f ./nginx-manifests/

# 再開可能な状態で止める
$ minikube stop

# 完全消去する
$ minikube delete

kubectl applyを実行したときに Deployment でエラーが出るとき Deployment を削除してやり直す。

1
2
3
4
5
$ kubectl apply -f ./nginx-manifests/
service/nginx unchanged
The Deployment "nginx" is invalid: spec.selector: Invalid value: {"matchLabels":{"io.kompose.service":"nginx"}}: field is immutable

$ kubectl delete deployment nginx

自作のイメージを起動する

nextjs-example-compose.yml
1
2
3
4
5
6
services:
  nextjs-example:
    image: 192.168.11.42:8085/nextjs-example:latest
    ports:
      - "3000:3000"
    restart: always
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# docker-compose.ymlを変換する
$ kompose convert --file nextjs-example-compose.yml -o ./nextjs-example-manifests/

# Minikubeを起動する
$ minikube start --insecure-registry="192.168.11.42:8085"

# マニフェストを適用する
$ kubectl apply -f ./nextjs-example-manifests/

# Podを確認する
$ kubectl get pods
NAME                              READY   STATUS              RESTARTS   AGE
nextjs-example-6fbf69d677-zwql8   0/1     ContainerCreating   0          3s

# Serviceを確認する
$ kubectl get services
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP    14s
nextjs-example   ClusterIP   10.106.105.156   <none>        3000/TCP   7s

# ポートフォワーディングする
$ kubectl port-forward service/nextjs-example 3000:3000

# 完全消去する
$ minikube delete