コピペコードで快適生活

明日使えるソースを自分のために

Kubernetes覚え書き

Kubernetes チュートリアル で雰囲気を掴むメモ。

概念

  • kubernetesCluster
    • 構成
      • Master
      • Node
        • ワーカーマシン(物理サーバorVM)
        • マスターが公開しているKubernetes APIを使用してマスターと通信
        • 内部でコンテナを動かすためのコンテナランタイムを持つ
    • 抽象概念
      • Deployment
        • アプリケーションのインスタンスを作成し、更新する方法を指示する。
        • Deploymentコントローラーは、それらのインスタンスを継続的に監視。
      • Pod
        • 1つ以上のアプリケーションコンテナのグループとそれらのコンテナの共有リソース
        • ノードに障害が発生した場合、同じPodがクラスター内の他の使用可能なノードにスケジュールされます。
      • Kubernetes Service
        • Podの論理セットを定義し、それらのPodに対する外部トラフィックの公開、負荷分散、およびサービス検出を可能にする抽象化層。
      • レプリカ
        • 1つのDeploymentから作られる同じ機能を持つ複数のPod
  • 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>  # コンテキストの切り替え