Slide 1

Slide 1 text

2023/02/16 第96回 雲勉【オンライン︓初⼼者向け】 インフラエンジニアのKubernetes⼊⾨

Slide 2

Slide 2 text

アジェンダ 2 0.⾃⼰紹介 1.はじめに 2.Kubernetesのイメージ 3.Kubernetesってなに 4.Kubernetesのアーキテクチャ 5.Kubernetesのリソース 6.最後に 7.質疑応答(~20:00)

Slide 3

Slide 3 text

0.講師⾃⼰紹介 3 n ⽥中 弘紀 • クラウドインテグレーション事業部 構築第⼋セクション 第⼆グループ • 経歴 ⼩売店(接客販売) 1年半 オンプレミスインフラエンジニア(運⽤保守) 6年 • アイレット歴 2年9ヶ⽉ (構築、運⽤保守) • 沖縄とロナウジーニョが好き

Slide 4

Slide 4 text

1. はじめに 4

Slide 5

Slide 5 text

1.はじめに 5 n 今回の雲勉は ・ Kubernetesを知らない ・ Kubernetesをこれから学習していきたい という⽅を対象とさせていただいております

Slide 6

Slide 6 text

1.はじめに 6 n 今回の⽬標 ・Kubernetesの基本的な仕組みを知る ・Kubernetes基本的なリソースの役割を知る お話の中で、 AWSが提供しているAmazon Elastic Kubernetes Service (EKS)では についても少し触れたいと思います

Slide 7

Slide 7 text

2. Kubernetesのイメージ 7

Slide 8

Slide 8 text

2.Kubernetesのイメージ 8 n Kubernetesのイメージ 皆さんはKubernetesに対してどういったイメージをお持ちでしょうか 私は ・コンテナをいい感じにアレしてくれる ぐらいの認識でした。 雲勉を通してKubernetesがどういったものなのか︖ というイメージを掴んで頂ければと思います。

Slide 9

Slide 9 text

3. Kubernetesってなに 9

Slide 10

Slide 10 text

3. Kubernetesってなに 10 n Kubernetesってなんなの コンテナオーケストレーション です。

Slide 11

Slide 11 text

3. Kubernetesってなに 11 n コンテナオーケストレーションの役割 ・コンテナが1つの環境であれば特に問題は無いかもしれないがそういったケースは少ない。 ・実際のシステム構築では、「冗⻑性」、「可⽤性」、「保守性」も考える必要がある。 ・コンテナの数を増やしたい ・サーバーが1台だと不安 ・システム運⽤を簡素化したい

Slide 12

Slide 12 text

3. Kubernetesってなに 12 n コンテナオーケストレーションの役割 その悩みを解消してくれるものがコンテナオーケストレーション ・コンテナの死活監視 ・コンテナの⾃動復旧 ・コンテナホストの管理 ・コンテナの配置管理 ・コンテナの負荷分散 ・etc.. といった事がコンテナオーケストレーションを利⽤する事で可能になる

Slide 13

Slide 13 text

3. Kubernetesってなに 13 n 代表的なコンテナオーケストレーション ・Kubernetes (クバネティス) ⇦ 今回はこちらのお話 ・Docker Swarm(ドッカースウォーム) etc..

Slide 14

Slide 14 text

3. Kubernetesってなに 14 n Kubernetesって何がいいの ・コンテナのオートスケールが出来たりと機能に優位性がある ・AWS、Google Cloud、Azureといった代表的なクラウドサービスでも マネージドサービスとして提供されているのでロックインされずにマルチプラットフォームで の利⽤が出来る ・コミュニティが盛んでアップデートのサイクルも速く、デファクトスタンダードとされている

Slide 15

Slide 15 text

4. Kubernetesのアーキテクチャ 15

Slide 16

Slide 16 text

4.Kubernetesのアーキテクチャ 16 n Kubernetesクラスター ・Kubernetesクラスターはマスターノードとワーカーノード構成されています。 ・マスターノードは「クラスター内のワーカーノードとPodを管理」するもの。 Control Planesとも呼ばれる。 ・ワーカーノードは「コンテナであるPodをホスト」するもの。Nodesとも呼ばれる。 Control Planesを構成するコンポーネントがワーカーノードにも存在する。 Kubernetesクラスター マスターノード ワーカーノード

Slide 17

Slide 17 text

4.Kubernetesのアーキテクチャ 17 n Kubernetesのアーキテクチャ 管理者 kubectlコマンド Pod container kubelet kube-proxy Pod container kube-apiserver kube-scheduler kube-controller-manager etcd ワ " カ " ノ " ド マ ス タ " ノ " ド kubelet kube-proxy container runtime container runtime Kubernetesクラスター

Slide 18

Slide 18 text

4.Kubernetesのアーキテクチャ 18 n コントロールプレーン Kubernetesクラスター内の「ノード」や「Pod」といったリソースを管理するもの ノード コンポーネント名 役割 マスターノード kube-apiserver KubernetesへのAPIリクエストを受け取りリソースを管理する kube-scheduler 新しく作成されたPodなどを適切なワーカーノードを選択して割り当てる kube-controller-manager リソースの状態を管理し、要求される状態を維持する。 例えばDepoloymentやReplicaSetで要求されるPodの数を維持する etcd ノードやクラスターなどの情報を保存する ワーカーノード kubelet コンテナの起動や削除を管理する kube-proxy クラスター内外のPodに対するアクセスをルーティングする

Slide 19

Slide 19 text

4.Kubernetesのアーキテクチャ 19 n kube-scheduler ・新しく作成されたPodなどを適切なワーカーノードを選択して割り当てる 管理者 kubelet Pod container kube-apiserver kube-scheduler etcd kubectlコマンド 管理者から送られてきたKubernetesクラスターが あるべき姿(Podがいくつ起動しておくべきかなど)の情報を保存 Podの要求を監視し、適切なワーカーノードを選択 Podの起動を指⽰ Podが起動される マスターノード ワーカーノード container runtime Podの起動を指⽰

Slide 20

Slide 20 text

4.Kubernetesのアーキテクチャ 20 n kube-controller-manager ・リソースの状態を管理し、要求される状態を維持するようにコントロールするもの 管理者 Pod container kube-apiserver etcd kubectlコマンド 管理者から送られてきたKubernetesクラスターが あるべき姿(Podがいくつ起動しておくべきかなど)の情報を保存 Podが起動される kube-controller-manager Deployment Contoroller ..etc Deployment 変化が発⽣した場合あるべき姿を保持しようとする ReplicaSet ReplicaSetを管理する Podを管理する Contorollerが監視 kube-scheduler

Slide 21

Slide 21 text

4.Kubernetesのアーキテクチャ 21 n kube-proxy ・ クラスタ内外のPodに対するアクセスをルーティングする 管理者 Pod container kube-apiserver etcd kubectlコマンド 管理者から送られてきたKubernetesクラスターが あるべき姿(Podがいくつ起動しておくべきかなど)の情報を保存 ルーティングを変更 Service kube-proxy マスターノード ワーカーノード 適切なPodにルーティング ユーザー

Slide 22

Slide 22 text

4.Kubernetesのアーキテクチャ 22 n Kubernetesのアーキテクチャ 管理者 kubectlコマンド Pod container kubelet kube-proxy Pod container kube-apiserver kube-scheduler kube-controller-manager etcd ワ " カ " ノ " ド マ ス タ " ノ " ド kubelet kube-proxy container runtime container runtime Kubernetesクラスター

Slide 23

Slide 23 text

4.Kubernetesのアーキテクチャ 23 n EKSでは Pod container kubelet kube-proxy Pod container kube-apiserver kube-scheduler kube-controller-manager etcd ワ " カ " ノ " ド マ ス タ " ノ " ド kubelet kube-proxy container runtime container runtime EC2やFargeteが該当 AWSのEKSは マスターノードを提供している Kubernetesクラスター

Slide 24

Slide 24 text

4.Kubernetesのアーキテクチャ 24 n まとめ ・Kubernetesクラスタはマスターノードとワーカーノードで構成されている ・マスターノードは「クラスター内のワーカーノードとPodを管理」するもの ・ワーカーノードは「コンテナであるPodをホスト」するもの ・コントロールプレーンは複数のコンポーネントで構成されている ・Kubernetesはkubectlというコマンドで操作をする ・Kubernetesの設定ファイルはマニュフェストというyaml形式のファイルで定義される

Slide 25

Slide 25 text

5. Kubernetesのリソース 25

Slide 26

Slide 26 text

5. Kubernetesのリソース 26 n Kubernetesのリソース ・ Kubernetesクラスター上で稼働するもの マニュフェストと呼ばれるyaml形式のファイルであるべき姿を定義し、その情報がetcd に記録される ・Kubernetesを学習する上で押さえておきたいリソースについてお話しをしていきます

Slide 27

Slide 27 text

Kubernetesクラスターを論理的に分割するもの 27

Slide 28

Slide 28 text

5. Kubernetesのリソース 28 n NameSpace ・ Kubernetesクラスターの分離機能 ・PodやServiceといったリソースをノードを跨いで論理的にグルーピングすることが出来る ワーカーノード1 dev Namespace prd Namespace ワーカーノード2 dev Namespace prd Namespace Kubernetesクラスター

Slide 29

Slide 29 text

コンテナの起動に関連するもの 29

Slide 30

Slide 30 text

5. Kubernetesのリソース 30 n Pod ・ ⼀つ以上のコンテナから構成されているもの ・NginxとMySQLのメインコンテナを⼀つのPodに包括するような構成は推奨されていない container(Nginx) Pod container(MySQL) メインコンテナを⼀つのPodに包括する事は 結合度合いが⾼くなってしまうため、推奨されていない Pod container(MySQL) Pod container(Nginx) コンテナを⼀つずつのPodとして 疎結合な構成とする事が推奨されている

Slide 31

Slide 31 text

5. Kubernetesのリソース 31 n Pod ・メインコンテナを補助するような役割を持ったコンテナを起動させるマルチコンテナが 利⽤されることはある container(Nginx) Pod container(ログ転送) メインコンテナのログを外部に出⼒ Pod container(Nginx) 外部サービスとの連携などで 外部サービスが受け取れるようにデータを整形する ストレージサーバー container(データ整形) 外部サービスなど サイドカーパターン アダプタパターン

Slide 32

Slide 32 text

5. Kubernetesのリソース 32 n ReplicaSet ・Podのレプリカを作成し、指定したPodの数を維持し続けるもの ・ノードやPodが停⽌した場合でも 指定したPodの数を維持し続けるように別のPodを⽴ち上げる 3つのPodを起動するように定義しておくと 障害が発⽣した場合でも 新しくPodを起動してくれる ワーカーノード1 dev Namespace ワーカーノード2 dev Namespace ワーカーノード1 dev Namespace ワーカーノード2 dev Namespace

Slide 33

Slide 33 text

5. Kubernetesのリソース 33 n Deployment ・ReplicaSetを管理する事で、 Rolling UpdateやRollBackといったデプロイ管理を提供するもの ・デフォルトの動作はRolling Updateとなるが、Recreateもサポートしている ・ReplicaSetはRolling Updateはサポートしていない ・Rolling Update中で幾つずつPodを更新するかなどの調整も出来る

Slide 34

Slide 34 text

5. Kubernetesのリソース 34 n Rolling Update Podの数を3として起動しているReplicaSetでコンテナイメージを更新した場合 Old image ReplicaSet New image ReplicaSet Old image ReplicaSet New image ReplicaSet Old image ReplicaSet New image ReplicaSet Old image ReplicaSet New image ReplicaSet

Slide 35

Slide 35 text

5. Kubernetesのリソース 35 n DeamonSet ・各ノードにPodを⼀つずつ配置するリソース ・各ノードに対して監視エージェントを導⼊する際などはDeamonSetとして配置する DeamonSetとして監視エージェントを導⼊ ワーカーノードが増えると⾃動的に監視エージェントが 新しいワーカーノード上で起動する ワーカーノード1 dev Namespace ワーカーノード1 dev Namespace ワーカーノード2 dev Namespace

Slide 36

Slide 36 text

5. Kubernetesのリソース 36 n StatefulSet ・状態を保持する必要があるアプリケーションを管理するためのもの ・Databaseなどのステートフルなアプリケーションで利⽤される ・StalefulSetが再作成されても同じストレージに接続される 永続ボリュームとPodで構成される container(MySQL) Pod StatefulSet ワーカーノード ストレージ

Slide 37

Slide 37 text

5. Kubernetesのリソース 37 n Job/CronJob ・任意の時間に指定した処理をさせたい時に利⽤するもの CrongJobがJobを管理して実⾏する 毎時間Jobを実⾏ 毎⽇17時にJobを実⾏ ストレージ Podに出⼒されたファイルをストレージにアップロード メール送信

Slide 38

Slide 38 text

コンテナへのアクセスに関連するもの 38

Slide 39

Slide 39 text

5. Kubernetesのリソース 39 n Service ・受信したトラフィックを複数のPodにL4で負荷分散してくれるもの ・「ClusterIP」、「NodePort」、「LoadBlancer」のタイプが代表的 IPアドレス:AAA IPアドレス:BBB

Slide 40

Slide 40 text

5. Kubernetesのリソース 40 n Service ・Podは起動するたびにIPアドレスが変わってしまうが、Seviceを利⽤すると動的にPodを Serviceに追加してくれる IPアドレス:AAA IPアドレス:BBB Pod消失 IPアドレス:CCC IPアドレス:BBB Pod再作成

Slide 41

Slide 41 text

5. Kubernetesのリソース 41 n Service種類「 ClusterIP 」 ・Kubernetesクラスター内からのみ疎通可能なアドレスが払い出される ・Kubernetesクラスター内部間の通信のみサポートする IPアドレス:AAA IPアドレス:BBB ク ラ ス タ % 内 部 ア ド レ ス

Slide 42

Slide 42 text

5. Kubernetesのリソース 42 n Service種類「 NodePort 」 ・ノードのIPアドレスとポートを組み合わせて外部からのアクセスを可能とする ・ポート範囲は30000 から 32768で指定が可能 IPアドレス:AAA IPアドレス:BBB ノードの30080にアクセスするとServiceに転送される ノードのIPアドレス10.10.10.10:30080にアクセス ク ラ ス タ % 内 部 ア ド レ ス ワーカーノード

Slide 43

Slide 43 text

5. Kubernetesのリソース 43 n Service種類「 LoadBlancer 」 ・クラウド環境のロードバランサーによってサポートされている ・オンプレミスで利⽤する場合でも「MetalLB」といったものが利⽤出来る ・AWSだとCLB・NLB IPアドレス:AAA IPアドレス:BBB NLB CLB ク ラ ス タ % 内 部 ア ド レ ス EKS

Slide 44

Slide 44 text

5. Kubernetesのリソース 44 n Ingress ・Kubernetesクラスター外からPodへのアクセスをL7で負荷分散するもの ・Ingressを作成するにはIngressコントローラーが必要 ・AWSだとALB IPアドレス:AAA IPアドレス:BBB ALB ク ラ ス タ % 内 部 ア ド レ ス EKS

Slide 45

Slide 45 text

Kubernetesクラスター内に情報を定義するもの 45

Slide 46

Slide 46 text

5. Kubernetesのリソース 46 n Configmap ・Podに対して設定したい設定情報などのデータをkey-Value形式で保存しておくもの ・環境固有の設定などをコンテナイメージから分離できる ・暗号化されていない状態で登録されるためパスワードなどの機密情報の保存には向いていない Pod Pod nginx.conf: | user nginx; worker_processes 2; error_log /var/log/nginx/error.log; events { worker_connections 9999; } MWの設定をConfig mapとして登録 nginx nginx

Slide 47

Slide 47 text

5. Kubernetesのリソース 47 n Secret ・DBの認証情報といった機密情報をkey-Value形式で保存しておくもの ・base64でエンコードした状態でパスワードなどをマニュフェストファイルに記述し登録する ・マニュフェストファイルをGit等で管理する際は、OSSのkubesecといったソフトウェアを利⽤する username:dGFuYWth password: aXJldA== DBの接続情報をSecretとして登録 Secretから取得した情報でDBへ接続 DB

Slide 48

Slide 48 text

5. Kubernetesのリソース 48 n AWSでのSecret ・EKSではDBの認証情報といった機密情報はAWS Secrets Manager利⽤する ・AWS Secrets Manager and Config Provider for Secret Store CSI Driver(ASCP)というプラグインを利⽤ ・マニュフェストファイルにはAWS Secrets Managerに対応した環境変数を記載するだけ ACSP username:iret password: cloudpack DBの接続情報をAWS Secrets Managerに登録 AWS Secrets Managerから 取得した情報でDBへ接続 RDS EKS Secrets Manager

Slide 49

Slide 49 text

KubernetesのAPIアクセス制御に関連するもの 49

Slide 50

Slide 50 text

5. Kubernetesのリソース 50 n Kubernetesのアカウント ・Kubernetesにはユーザーアカウントとサービスアカウントの2種類が存在している

Slide 51

Slide 51 text

5. Kubernetesのリソース 51 n ユーザーアカウント ・Kubernetes 外部からユーザーが Kubernetes を操作するために使うユーザーアカウント ・AWSではIAMユーザーとKubernetesに備わるRBACの仕組みを使って、「ユーザー」に 対するKubernetes上の権限を決定

Slide 52

Slide 52 text

5. Kubernetesのリソース 52 n RBACとは ・「誰が」どの「リソース」にどんな「操作」を許可するか定義するもの 誰が= ユーザー リソース=Pod,Deoloyment,Service etc.. 操作=get,create,update,delete,list,watch etc..

Slide 53

Slide 53 text

5. Kubernetesのリソース 53 n RBACとは ・どの「リソース」にどんな「操作」を許可するのかというRoleを作成して それを誰に紐づける(Binding)のかを定義してユーザーに対して権限を付与する NameSpaceで限定 クラスター全体 Role Cluster Role RoleBinding ClusterRoleBinding

Slide 54

Slide 54 text

5. Kubernetesのリソース 54 n RBACとは ワーカーノード dev Namespace prd Namespace Kubernetesクラスター Kubernetesクラスターにある全ての Podの「create」,「delete」,「get」,「describe」を許可 Namespace「prd」に対して Podの「get」,「describe」を許可 ユーザーA ユーザーB

Slide 55

Slide 55 text

5. Kubernetesのリソース 55 n サービスアカウント ・Kubernetes内で管理されているアカウントで、 Podと紐づけることでPodからKubernetes APIを操作できる ・RBACを利⽤することでサービスアカウントへ任意で権限を設定可能 ・全てのPodへのサービスアカウント付与が必須で、 何も指定しなければ「default」が⾃動で付与される ・AWSではIAM Roles for Service Accounts(IRSA)という仕組みがあり、 PodにAWSリソースへのアクセス権限を付与出来る

Slide 56

Slide 56 text

5. Kubernetesのリソース 56 n IRSA IPアドレス:AAA Pod IPアドレス:BBB Pod nginx nginx Podのサービスアカウントに紐付けたS3バケット参照権限のあるロールを利⽤してS3へアクセス S3 EKS IAM Role AWS STS Permissions https://aws.amazon.com/jp/blogs/news/diving-into-iam-roles-for-service-accounts/

Slide 57

Slide 57 text

本⽇お話するリソースの紹介は以上となります 57

Slide 58

Slide 58 text

5. Kubernetesのリソース 58 n まとめ ・Kubernetesには様々なリソースが存在する ・まずはPod,ReplicaSet,Deployment,Service,Ingressを抑える ・EKSではAWSリソースと連携する機能が⽤意されている

Slide 59

Slide 59 text

5. Kubernetesのリソース 59 n EKSのworkshop AWSではEKSのworkshopが公開されています https://www.eksworkshop.com/

Slide 60

Slide 60 text

6. 最後に 60

Slide 61

Slide 61 text

6. 最後に 61 本⽇はKubernetesを学習する上で 私が思う最初に抑えておきたい内容についてお話しさせて頂きました。 ドキュメントが豊富でworkshopといった公開されている学習⽤のコンテンツもありますので そういったものにも触れて頂ければと思います。

Slide 62

Slide 62 text

7. 質疑応答 62

Slide 63

Slide 63 text

No content