2019年2月19日に弊社が所属する任意団体「道南ITコミュニティはこだてIKA」が「Kubernetesのハンズオン勉強会」を開催いたしました。
講師プロフィール
寺田佳央氏は、日本マイクロソフト株式会社で働いている方でJava エバンジェリストとして、マイクロソフト・プラットフォームにおける Java の利用促進・啓蒙活動を実施中。
勉強会の概要
2日間にわたる内容でした。内容は以下です。
- 寺田さんに登壇していただき、説明を聴きながら全員でハンズオンを行いました
- 2チームに分かれて1日目に行ったKubernetesの環境を自分たちで一から構築しました
1日目
寺田さんに登壇していただき、説明を聴きながら全員でハンズオンを行いました
2日目
2チームに分かれて1日目に行ったKubernetesの環境を自分たちで一から構築しました
PodとContainer
Container(コンテナ)は、ホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができます。そのため、軽量で高速に起動、停止などが可能です。DockerのイメージはこのContainerの単位で扱います。
Pod(ポッド)は、Containerの集まりで単一のアプリケーションインスタンス。複数のコンテナを含めることができます。
以下の図は、Podのなかにコンテナが3つある場合と1つの場合を表しました。
Deployment
Deployment(デプロイメント)は、1つ以上の同一Podに対応し、起動するPod数(レプリカ)、各Podの要求リソースとリソース制限、コンテナの設定等を管理します。
以下の図では、DeploymentのReplicasを2にセットして、自動でPodが2つ生成される。
そのあと不具合でPodが1つ死んでしまいましたが、自動でPodを1つ立て直し2に復活したケースを表現しました。
Node
Node(ノード)はKubernetesのMasterサーバが管理する子サーバ。VMのことでContainerを走らせるためのリソースです。
以下の図は、Node1とNode2のリソースを使用し、Replicas に3と6にセットしたDeploymentを実行したケースを表現しました。
ServiceとIngress
Service(サービス)は、Deploymentに対応し、外からアクセスをDeploymentの各Podに振り分けます。
Ingress(イングレス)は、外からのアクセスをURLに基づいて、Serviceに振り分けます。
Kubernetesのメリット・デメリット
メリット
- Service単位で自動スケールアウト
- レプリカ数を増やすのみ、また状態に応じて自動で増減(オートスケール)できるため。
- 負荷分散
- 障害時のセルフヒーリング
- コンテナの死活監視
デメリット
- スケールアップしにくい
- スケールアップには、より高性能なNode(VM)の起動が別で必要になるため。(VMの起動は遅い)
- メジャーアップデートのスパンが短くかつ後方互換性が低いため、EOL対応が頻繁に発生
- 3-4ヶ月に1回メジャーアップデートがあり、3バージョンほどでEOLになるため、1年ほどでAKSのアップデータとが必要になる。その際、後方互換がないためアップデートに合わせたソースの変更が都度必要になる。