kubernetes(k8s)のチュートリアルをざっくりやって見る
概要
前々から気になってはいたものの
仕事に追われて遊べなかったKubernetisで遊んでみた。
とりあえず公式のTutorialをローカル環境(Mac)で一通りやってわかったことをざっくりとメモしとこう
kubernetes(k8s)とは
いわゆるコンテナオーケストラレーションらしい。
dockerとかで使うコンテナを用いて運用する際に必要なやつ。
コンテナのメモリとかcpuの制御、コンテナのデプロイ、ロールバックとか色々してくれる素敵なやつ。
ローカル環境開発ではdocker使ったことあるけど、本番でも使えれば!なんて人は勉強する価値あるかと。
基本的な構成
クラスター構成
k8sはデプロイなどを管理する「Master」とそれ以外の「Node」というクラスターで構成されている。
node構成
nodeは複数の「pod」で構成され、podには「container」と永続化するデータを格納する「volume」が複数存在する。
下準備
minikubeインストール
ローカル環境でクラスターを使うには、minikubeとDocker Desktop for Macを使う2パターンあるみたい。Tutorialではminikube使ってたんでそれで行くことにする。
# minikubeインストール brew cask install minikube # VirtualBox重たくて嫌いなんでhyperkitでクラスタ起動する ## hyperkit導入 curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-hyperkit chmod +x docker-machine-driver-hyperkit sudo mv docker-machine-driver-hyperkit /usr/local/bin/ sudo chown root:wheel /usr/local/bin/docker-machine-driver-hyperkit sudo chmod u+s /usr/local/bin/docker-machine-driver-hyperkit ## minikubeでクラスタ起動 minikube start --vm-driver=hyperkit ## virtualboxで起動しようとしてエラーになったからdeleteするとうまくいった ## minikube delete
実際に触って見るぞ
アプリケーションをクラスタにデプロイする
dockerのイメージを指定してデプロイできるのだよ
# デプロイ kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080 # デプロイされてるの確認 kubectl get deployments kubectl get pods
外部からアクセスできるようにservice生成
# 外部公開(service生成) kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 kubectl get services # 公開してるポート番号の取得 export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') echo NODE_PORT=$NODE_PORT # 実際にアクセス curl $(minikube ip):$NODE_PORT
podのスケールアップ・スケールダウン
アクセス負荷を考慮してスケールアップしたりダウンしたりコマンドでちょろっとできる
スケールアップ
# スケールアップ(pod4つに増やす) kubectl scale deployments/kubernetes-bootcamp --replicas=4 # 増えてるー kubectl get deployments kubectl get pods -o wide
スケールダウン
# スケールダウン(pods2つにする) kubectl scale deployments/kubernetes-bootcamp --replicas=2 # 減ってるー kubectl get deployments kubectl get pods -o wide
ロードバランシング
なんどもアクセスすると異なるpodにアクセス(ロードバランシング)していることがわかる
# アクセスして見る kubectl describe services/kubernetes-bootcamp export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') echo NODE_PORT=$NODE_PORT # 毎度違うpodにアクセスしてるーー curl $(minikube ip):$NODE_PORT
アプリケーションのアップデート、ロールバック
アップデート
# set imageで更新したいバージョンを指定 kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2 # version2に更新されてる kubectl describe services/kubernetes-bootcamp ## rollout でもversion upできるらしいもじゃ kubectl rollout status deployments/kubernetes-bootcamp
ロールバック
# ロールバックできる!! kubectl rollout undo deployments/kubernetes-bootcamp # versionが戻ってる kubectl describe services/kubernetes-bootcamp
まとめ
ざっくりと理解。次は以下交えて実際のアプリケーション作ってみよー