kubernetes を始めるその1(チュートリアル)

docker を触ったことすらないけど kubernetes を始める。
どの記事もやたら長くてややこしいのでひとまずチュートリアル触ってみる。

Mac で動かす(ローカル環境)

# 出力にVMXが表示されている場合(色付けされているはずです)、VT-x機能がマシンで有効になっています。
$ sysctl -a | grep -E --color 'machdep.cpu.features|VMX'

VirtualBox のインストール

Minikube のインストール

  • kubectl も使えるようになる。
  • ローカルで作業する時に必要?
$ brew install minikube

# 確認(ヘルプっぽいのが出る)
$ minikube
$ kubectl

# 必要であれば
# $ sudo mv minikube /usr/local/bin

クイックスタート

# クラスターの起動
$ minikube start

VirtualBox を使って色々起動する

$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
timeToStop: Nonexistent

# クラスターの停止
$ minikube stop
✋  ノード "minikube" を停止しています...
🛑  1台のノードが停止しました。

# クラスターの削除
$ minikube delete

http サーバー を立てて URL にアクセスする

# クラスターの起動
$ minikube start

# echoserver という http サーバーのイメージを利用して hello-minikube という名前のサービスの作成する
$ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
deployment.apps/hello-minikube created

# ポート番号 8080 でサービスを公開する
$ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed

# 動いているか確認
$ kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
hello-minikube-xxxxxxxxxx-xxxxx   1/1     Running   0          41s

# サービスの確認
$ minikube service hello-minikube --url
http://192.168.xx.xx:xxxx

URL をコピペして確認する。

ダッシュボードの表示

# URL が表示されるけど勝手にブラウザに移動する
$ minikube dashboard
ctl + c で終了

作成したサービスを削除する

# サービスの削除
$ kubectl delete services hello-minikube
service "hello-minikube" deleted

# deployment の削除
$ kubectl delete deployment hello-minikube
deployment.apps "hello-minikube" deleted

Kubernetes と Docker を使用したチュートリアルを触ってみる

例: Redisを使用したPHPのゲストブックアプリケーションのデプロイ

# RedisのマスターのDeploymentを作成する
$ kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-deployment.yaml
$ kubectl get pods

# POD-NAMEの部分を実際のPodの名前に書き換えてください。
# 起動までに少し時間がかかる
$ kubectl logs -f POD-NAME

# RedisのマスターのServiceを作成する 
$ kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-service.yaml
$ kubectl get service

# RedisのスレーブのDeploymentを作成する
$ kubectl apply -f https://k8s.io/examples/application/guestbook/redis-slave-deployment.yaml
$ kubectl get pods

# RedisのスレーブのServiceを作成する
$ kubectl apply -f https://k8s.io/examples/application/guestbook/redis-slave-service.yaml
$ kubectl get services

# ゲストブックのフロントエンドのDeploymentを作成する
$ kubectl apply -f https://k8s.io/examples/application/guestbook/frontend-deployment.yaml
$ kubectl get pods -l app=guestbook -l tier=frontend

# フロントエンドのServiceを作成する
$ kubectl apply -f https://k8s.io/examples/application/guestbook/frontend-service.yaml
$ kubectl get services

# フロントエンドのServiceをNodePort経由で表示する
# IPアドレスをコピーして、ブラウザー上でページを読み込み、ゲストブックを表示しましょう。
$ minikube service frontend --url

# フロントエンドのServiceをLoadBalancer経由で表示する
# もしfrontend-service.yamlマニフェストをtype: LoadBalancerでデプロイした場合、ゲストブックを表示するためのIPアドレスを見つける必要があります。
# 外部IPアドレス(EXTERNAL-IP)をコピーして、ブラウザー上でページを読み込み、ゲストブックを表示しましょう。
$ kubectl get service frontend
# ウェブフロントエンドをスケールする
$ kubectl scale deployment frontend --replicas=5
$ kubectl get pods

# スケールダウン
$ kubectl scale deployment frontend --replicas=2
$ kubectl get pods

クリーンアップ

$ kubectl delete deployment -l app=redis
$ kubectl delete service -l app=redis
$ kubectl delete deployment -l app=guestbook
$ kubectl delete service -l app=guestbook
$ kubectl get pods

or

全て削除する場合

$ kubectl delete deployment --all
$ kubectl delete service --all