selmertsxの素振り日記

ひたすら日々の素振り内容を書き続けるだけの日記

KubernetesとGKEの学習

最初に

この記事は、下記の書籍を読んだ上で自分の理解を整理するためにまとめたものです。

マルチホストでDockerを動かそう

GCPでのk8s活用について

  • GKEを利用する上で必要なサービスは下記の通り

Google Container Build

  • Docker Imageを作成するためのコマンドツール
  • Imageを作るためのソースリポジトリは色々選べる

Google Kubernetes Engine

  • Dockerコンテナを管理するフルマネージドサービス
  • k8sを利用しているので、kubectlコマンドなどで操作可能

Google Container Registry

Kubernetesの概要

アプリケーションの構成管理

Pod

  • 複数のコンテナをまとめたもの
  • アプリケーションデプロイの単位
  • 適切にスケールできるように、役割の異なるものは別ポッドにすること
  • Podは必ず同じノード上にデプロイされる

ReplicaSet

  • Kubernetesクラスタ上であらかじめ指定された数のPodを作成/起動しておくこと
  • 何か問題が起きても、ここで指定した個数分Podが立ち上がるように動き続ける

Deployment

  • ReplicaSetの履歴を管理するもの
  • 定義されたレプリカの数を維持する役目を負うのがReplicaSet
  • ReplicaSetの作成や更新を定義するのがDeployment

Service

  • K8sのネットワークを管理する機能
  • Podに対して、外部からアクセスするときに必要。
  • Load Balancerは、Serviceに対応するIPアドレス+ポート番号にアクセスすると、複数のPodに対するレイヤー4レベルの負荷分散をする
    • トランスポートレイヤー
    • Borgとかと同じ話かな
  • Cluster IP => クラスタ内のPod同士で通信するためのプライベートIPアドレス
  • External IP => 外部のクライアントから接続するためのパブリックIPアドレス

K8sの構成要素

マスター

データストア etcd

クラスタ構成を保持するKVS

Node

  • 実際にDockerコンテナを動作させるサーバ
  • kubelet というエージェントが動いてる
  • kubeletは、Podの定義ファイルに従ってDockerコンテナを実行したり、ストレージをマウントしたりする
  • ノードのステータスを監視して、APIサーバーに通知する機能も持つ

manifestファイル

  • k8sでは、クラスタの構成情報をYAMLまたはJSONで記述する
  • この定義ファイルをmanifestファイルと呼ぶ

docker-compose.yml とか task definitionを思い出すなぁ。