Kubernetes覚え書き
Kubernetes チュートリアル で雰囲気を掴むメモ。
概念
- kubernetesCluster
- 構成
- Master
- クラスターの管理をする
- Node
- ワーカーマシン(物理サーバorVM)
- マスターが公開しているKubernetes APIを使用してマスターと通信
- 内部でコンテナを動かすためのコンテナランタイムを持つ
- Master
- 抽象概念
- Deployment
- Pod
- 1つ以上のアプリケーションコンテナのグループとそれらのコンテナの共有リソース
- ノードに障害が発生した場合、同じPodがクラスター内の他の使用可能なノードにスケジュールされます。
- Kubernetes Service
- Podの論理セットを定義し、それらのPodに対する外部トラフィックの公開、負荷分散、およびサービス検出を可能にする抽象化層。
- レプリカ
- 1つのDeploymentから作られる同じ機能を持つ複数のPod
- 構成
- Minikube
- ローカルマシン上にVMを作成し、1つのノードのみを含む単純なクラスターをデプロイする軽量なKubernetes実装
- minikube install https://kubernetes.io/ja/docs/tasks/tools/install-minikube/
- context
- clusterへの接続情報
minikubeのインストールと起動&停止
# https://kubernetes.io/ja/docs/tasks/tools/install-minikube/ # 事前インストール # - kubectl (k8sのcli) # - VirtualBox (ハイパーバイザー) # インストール brew install minikube # 起動 minikube start --driver=virtualbox # 状態確認 minikube status # 停止 minikube stop
kubectlコマンド
# バージョン確認 kubectl version # ノード確認 kubectl get nodes # deploymentの作成 # kubectl create deployment [名前] --image=[コンテナイメージ] kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 # deploymentの確認 kubectl get deployments # curl http://localhost:8001/version kubectl proxy
PODの走査
# podsの一覧を表示 kubectl get pods # podsの詳細情報を表示 kubectl describe pods # podnameの取得 export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') echo Name of the Pod: $POD_NAME # 単一Pod上の単一コンテナ内のログを表示 kubectl logs $POD_NAME # 単一Pod上の単一コンテナ内でコマンドを実行 kubectl exec $POD_NAME env kubectl exec -ti $POD_NAME bash
Serviceの走査
# サービスの作成 (expose=晒す) # typeにはClusterIP(Default), NodePort, LoadBalancer, ExternalNameが指定できる kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 # サービス一覧の確認 kubectl get services # サービスの詳細表示 kubectl describe services/kubernetes-bootcamp
Scaling
# Deploymentsの確認 kubectl get deployments # デプロイされた現在のReplicaSetの情報 kubectl get rs # Deployments名を指定してレプリカを4に増やす kubectl scale deployments/kubernetes-bootcamp --replicas=4 # Podが増えていることを確認できる kubectl get pods -o wide kubectl describe deployments/kubernetes-bootcamp # nodeのポート番号取得 export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') echo NODE_PORT=$NODE_PORT # curlで接続確認 curl $(minikube ip):$NODE_PORT
ローリングアップデート
# 設定確認 kubectl get deployments kubectl get pods kubectl describe pods # deploymentsのコンテナイメージを差し替え # デプロイされる kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2 # Deploymentの進捗状況を確認 kubectl rollout status deployments/kubernetes-bootcamp # ロールバック # Deploymentはバージョン管理されているので、前の状態に戻すことができる。 kubectl rollout undo deployments/kubernetes-bootcamp
contextの切り替え
$ kubectl config current-context # 現在のコンテキスト $ kubectl config get-contexts # コンテキストの一覧 $ kubectl config use-context <context> # コンテキストの切り替え