Slide 1

Slide 1 text

Kubernetes Introduction Oracle Cloud Hangout Café Season7 #1 Yutaka Ichikawa Oracle Corporation Japan Solutions Architect Jun07, 2023

Slide 2

Slide 2 text

Copyright © 2023, Oracle and/or its affiliates 2 Profile Name • Yutaka Ichikawa/市川 豊 Belong • Solutions Architect Role • Principal Cloud Solution Engineer SNS • Twitter/GitHub/Qiita:cyberblack28 Blog • https://cyberblack28.hatenablog.com/ Materials • https://speakerdeck.com/cyberblack28/ Community • Oracle Cloud Hangout Cafe #ochacafe • CloudNative Days Tokyo #cndt #o11y2022 Certified • Certified Kubernetes Administrator • Certified Kubernetes Application Developer • Certified Kubernetes Security Specialist • Kubernetes and Cloud Native Associate Publications

Slide 3

Slide 3 text

Copyright © 2023, Oracle and/or its affiliates 3 • 第1章 コンテナの世界に飛び込む前に • 第2章 コンテナアプリケーション開発に必要なソフトウェア • 第3章 コンテナアプリケーション開発のライフサイクル Build・ Ship・Run • 第4章 コンテナオーケストレーション • 第5章 Kubernetes でコンテナアプリケーションを動かすまで • 第6章 ローカル開発の準備 • 第7章 コンテナアプリケーションにおける CI/CD 解説動画 (https://onl.sc/XJm16m8) 解説資料 (https://onl.sc/hjuqfdU)

Slide 4

Slide 4 text

Copyright © 2023, Oracle and/or its affiliates 4 ThinkIT + Oracle Cloud Hangout Café Oracle Cloud Hangout Café ダイジェスト • 第1回「CI/CD最新事情」 2023年1月 • 第2回「マイクロサービスの認証・認可とJWT」 2023年2月 • 第3回「Kubernetes Operator 超入門」 2023年3月 • 第4回「Kubernetes のセキュリティ」 2023年4月 • 第5回「実験!カオスエンジニアリング」 2023年5月 • 第6回「Service Mesh がっつり入門!」 2023年6月 https://thinkit.co.jp/article/20858

Slide 5

Slide 5 text

Copyright © 2023, Oracle and/or its affiliates 5 1. コンテナとコンテナオーケストレーション • これまでのアプリケーション開発 • OS/ライブラリとアプリケーションの分離 • 仮想マシンとコンテナの違い • OS/ライブラリとアプリケーションの統合 • Docker 実践 ~ Build ~ • Docker 実践 ~ Ship ~ • Docker 実践 ~ Run ~ • Docker 実践 ~ Build/Ship/Run ~ • コンテナライフサイクル • コンテナを支えるオーケストレーション Agenda 2. Kubernetes コンポーネント • Control Plane & Node • Pod • ReplicaSet & Deployment • Service • Ingress • PersistentVolume & PersistentVolumeClaim • ConfigMap & Secret • Namespace & Label 3. Kubernetes クラスタ構築&アプリケーションデプロイ • クラスタ構築 • WordPressを動かしてみる

Slide 6

Slide 6 text

Copyright © 2023, Oracle and/or its affiliates 6 コンテナとコンテナ・オーケストレーション

Slide 7

Slide 7 text

Copyright © 2023, Oracle and/or its affiliates 7 コンテナ技術とコンテナ・オーケストレーション これまでのアプリケーション開発 物理マシン 仮想マシン 仮想マシン(クラウド) コンテナ 物理サーバでアプリケーションを稼働 VM 物理サーバ上に複数の仮想マシンでアプリケーションを稼働 クラウドをベースとしたスケーラブルな仮想マシンでアプリケーションを稼働 物理マシン・仮想マシンもノードとして束ねて、コンテナという小さい単位 でアプリケーションを稼働

Slide 8

Slide 8 text

Copyright © 2023, Oracle and/or its affiliates 8 コンテナ技術とコンテナ・オーケストレーション これまでのアプリケーション開発 アプリケーション コードをソースコードリポジトリに コミット/プッシュ CI/CDパイプラインによる テスト、ビルド、デプロイ Developer Code Repository CI/CD Pipeline すべて自動化されている場合もあれば、手動で行う場合もあります。 本番環境 ステージング環境 検証環境 Operator Infrastructure Engineer 開発環境 OS/ライブラリ VM 物理マシン 仮想マシン 仮想マシン (クラウド)

Slide 9

Slide 9 text

Copyright © 2023, Oracle and/or its affiliates 9 コンテナ技術とコンテナ・オーケストレーション OS/ライブラリとアプリケーションの分離 アプリケーション 本番環境 ステージング環境 検証環境 開発環境 OS/ライブラリ VM 物理マシン 仮想マシン 仮想マシン (クラウド) アプリケーションは物理マシンや仮想マシンのOS/ライブラリ上で稼働 稼働するアプリケーションは実行環境に依存する 環境差異が原因で他の環境で稼働するけど、 本番環境で稼働しない等の障害が発生する OSのパッチバージョンが異なる、このライブラリが無 かった、関係ないものがインストールされている…

Slide 10

Slide 10 text

Copyright © 2023, Oracle and/or its affiliates 10 コンテナ技術とコンテナ・オーケストレーション OS/ライブラリとアプリケーションの分離 アプリケーション OS/ライブラリ • 仮想マシンイメージがベンダー製品特有(ベンダー ロックイン) • 容量も重い(数ギガ~数十ギガ) • 可搬性(Portability)が低い Xen Server 仮想マシン イメージ KVM VMWare ハイパーバイザー ハードウェア VMWare Xen/Server KVM 物理/仮想マシンにおける、OS/ライブラリのアップデートには人手や時間を 要するため、アプリケーションのリリースに影響する… 仮想マシン

Slide 11

Slide 11 text

Copyright © 2023, Oracle and/or its affiliates 11 コンテナ技術とコンテナ・オーケストレーション OS/ライブラリとアプリケーションの分離 これまでのアプリケーション開発 OS/ライブラリが既に整っている実行環境にアプリケーションをデプロイするという形式 1.アプリケーション • 環境差異による問題が発生 • OS/ライブラリ側に何かあるとアプリケーションに影響 2.インフラ • 仮想マシンイメージがベンダー製品特有(ベンダーロックイン) • 仮想マシンイメージの容量が重く可搬性(Portability)が低い • 物理/仮想マシンの特性上、OS/ライブラリのアップデートに時間を要して、アプリケーションのリリースに影響する

Slide 12

Slide 12 text

Copyright © 2023, Oracle and/or its affiliates 12 コンテナ技術とコンテナ・オーケストレーション 仮想マシンとコンテナの違い ハードウェア ハイパーバイザー OS/Hyper Visor OS/Hyper Visor カーネル カーネル アプリケーション アプリケーション ライブラリ ライブラリ 仮想マシン 仮想マシン ハードウェア カーネル OS/Hyper Visor OS/Hyper Visor コンテナ コンテナ コンテナエンジン 各仮想マシンのカーネル上で実行、隔離性が高いが、起動 が遅く(数分)オーバヘッドが大きい カーネルを共有しているため、隔離性は低いが、起動が高速 (数秒)でオーバヘッドが小さい 仮想マシン コンテナ アプリケーション アプリケーション ライブラリ ライブラリ

Slide 13

Slide 13 text

Copyright © 2023, Oracle and/or its affiliates 13 コンテナ技術とコンテナ・オーケストレーション OS/ライブラリとアプリケーションの統合 OS/ライブラリ アプリケーション コンテナイメージ ビルド(Build) OS/ライブラリ • OS/ライブラリとアプリケーションをパッケージイメージ化 • 技術としてはOSSのため、ベンダーロックインを回避 • イメージはこれまでの仮想マシンイメージに比べるとはるかに軽いのでポータビリティ性が高い 1.ビルド(Build)

Slide 14

Slide 14 text

Copyright © 2023, Oracle and/or its affiliates 14 コンテナ技術とコンテナ・オーケストレーション OS/ライブラリとアプリケーションの統合 • イメージをレジストリに保存して、共有 2.シップ(Ship) OS/ライブラリ OS/ライブラリ OS/ライブラリ イメージレジストリ Push Pull シップ(Ship) イメージの共有 OS/ライブラリ コンテナプラットフォーム

Slide 15

Slide 15 text

Copyright © 2023, Oracle and/or its affiliates 15 コンテナ技術とコンテナ・オーケストレーション OS/ライブラリとアプリケーションの統合 • コンテナイメージを基にコンテナを起動 3.ラン(Run) コンテナプラットフォーム上でイメージからコンテナを起動して、アプリケーションを稼働。 イメージもプラットフォームも特定ベンダー技術に依存しないため、仮想マシンイメージと違って、ベンダーロックインも回避。 OS/ライブラリ ラン(Run) OS/ライブラリ コンテナプラットフォーム コンテナ コンテナイメージ

Slide 16

Slide 16 text

Copyright © 2023, Oracle and/or its affiliates 16 コンテナ技術とコンテナ・オーケストレーション OS/ライブラリとアプリケーションの分離 コンテナアプリケーション開発 OS/ライブラリとアプリケーションを統合して、軽量イメージ化して、コンテナプラットフォームにコンテナとしてデプロイする形式 1.アプリケーション • OS/ライブラリとアプリケーションが一つに統合されているため、環境差異による問題が起きにくい 2.インフラ • 仮想マシンイメージと仕組みが異なり、OSSベースでベンダーロックインも回避、軽量で可搬性(Portability)が高い • OS/ライブラリのアップデートも容易なため、リリースサイクルを速め、スピード(Agility)が向上

Slide 17

Slide 17 text

Copyright © 2023, Oracle and/or its affiliates 17 コンテナ技術とコンテナ・オーケストレーション Docker 実践 ~ Build ~ 「 $ docker image build 」 コマンドを実行して Dockerfile からコンテナイメージを作成 Container Image コンテナイメージ FROM centos:7 RUN yum -y install epel-release RUN yum -y install nginx COPY index.html /usr/share/nginx/html ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"] Dockerfile $ docker image build Build

Slide 18

Slide 18 text

Copyright © 2023, Oracle and/or its affiliates 18 コンテナ技術とコンテナ・オーケストレーション コンテナイメージの構造 Container Image 読み込み専用 (ReadOnly) ベースイメージ CentOS イメージ層 FROM centos:7 RUN yum -y install epel-release RUN yum -y install nginx COPY index.html /usr/share/nginx/html ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;“] Dockerfile ① ② ③ ④ ⑤ ⑤ ④ ③ ② ① コンテナ起動時の構造 ベースイメージ CentOS イメージ層 書き込み可能 イメージ層 読み込み専用 (ReadOnly) 「 $ docker container run 」 コマンドでコンテナが起動すると、 自動的に書き込み可能なレイ ヤーが作られる仕組み ⑤ ④ ③ ② ① 書き込み可能なイメージ層は 「 $ docker container commit 」 コマンドで 保存されて、その層が読込専用となります。左例 でいうと⑥の層ができることになります。 6

Slide 19

Slide 19 text

Copyright © 2023, Oracle and/or its affiliates 19 コンテナ技術とコンテナ・オーケストレーション Docker 実践 ~ Build ~ # docker image build -t cyberblack/test-nginx . Sending build context to Docker daemon 25.09kB Step 1/5 : FROM centos:7 7: Pulling from library/centos ab5ef0e58194: Pull complete Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c Status: Downloaded newer image for centos:7 ---> 5e35e350aded Step 2/5 : RUN yum -y install epel-release ---> Running in 83d64f46ae64 ・ ・省略(yumの処理) ・ Complete! Removing intermediate container 83d64f46ae64 ---> 827e069c2cf4 Step 3/5 : RUN yum -y install nginx ---> Running in 5a61a4cfa4c1 ・ ・省略(yumの処理) ・ Complete! Removing intermediate container 5a61a4cfa4c1 ---> 8e94cdfc1d95 Step 4/5 : COPY index.html /usr/share/nginx/html ---> f78c1d4c9694 Step 5/5 : ENTRYPOINT [“nginx”, “-g” “daemon off;”] ---> Running in 115085b978f4 Removing intermediate container 115085b978f4 ---> aa214ab9d4f0 Successfully built aa214ab9d4f0 Successfully tagged cyberblack/test-nginx:latest FROM centos:7 RUN yum -y install epel-release RUN yum -y install nginx COPY index.html /usr/share/nginx/html ENTRYPOINT [“/usr/sbin/nginx”, “-g”, “daemon off;“] ① ② ③ ④ ⑤ Dockerfile コンテナイメージ # docker image build -t cyberblack/test-nginx . Build ※ cyberblack の箇所は DockerHub アカウント名 cyberblack/test-nginx ① ② ③ ⑤ ④

Slide 20

Slide 20 text

Copyright © 2023, Oracle and/or its affiliates 20 コンテナ技術とコンテナ・オーケストレーション Docker 実践 ~ Ship ~ ビルドしたイメージを「 $ docker image push 」してアップロード、イメージレジストリからイメージを 「 $ docker image pull 」してダウンロードできます。また、イメージレジストリ及びリポジトリはパブリック/プライベートがあ るので環境に合わせて利用できます。 コンテナエンジン(dockerd) ハードウェア pull コンテナ イメージレジストリ CentOS リポジトリ Ubuntu リポジトリ Container Image push tag:latest tag:6.7 ・ ・ tag:latest tag:14.04 ・ ・ Ship Nginx リポジトリ tag:latest tag:19.1 ・ ・ カーネル run build Container Image Container Image $ docker image pull $ docker image push Dockerfile

Slide 21

Slide 21 text

Copyright © 2023, Oracle and/or its affiliates 21 コンテナ技術とコンテナ・オーケストレーション Docker 実践 ~ Ship ~ # docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: cyberblack Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded Hub Docker Hub にログイン

Slide 22

Slide 22 text

Copyright © 2023, Oracle and/or its affiliates 22 コンテナ技術とコンテナ・オーケストレーション Docker 実践 ~ Ship ~ # docker image push cyberblack/test-nginx The push refers to repository [docker.io/cyberblack/test-nginx] 39e4809cbd03: Pushed 66061884888d: Pushed 5a338cc84c53: Pushed 77b174a6a187: Mounted from library/centos latest: digest: sha256:8287e7100ce2ddf7cd76202ab25ccbfd287b223242231cd83005ed0cda1e9c f6 size: 1160 Docker Hub に Push Container Image cyberblack/test-nginx # docker pull cyberblack/test-nginxUsing default tag: latest latest: Pulling from cyberblack/test-nginx ab5ef0e58194: Already exists 1379c469e275: Pull complete dbb831d3fcac: Pull complete a6bb76d398b0: Pull complete Digest: sha256:8287e7100ce2ddf7cd76202ab25ccbfd287b223242231cd83005ed0cda1e9cf6 Status: Downloaded newer image for cyberblack/test-nginx:latest docker.io/cyberblack/test-nginx:latest Docker Hub から Pull Hub cyberblack/test-nginx Push Pull Ship # docker image push cyberblack/test-nginx # docker image pull cyberblack/test-nginx Container Image $ docker image push $ docker image pull

Slide 23

Slide 23 text

Copyright © 2023, Oracle and/or its affiliates 23 コンテナ技術とコンテナ・オーケストレーション Docker 実践 ~ Run ~ ローカルでbuildしたコンテナイメージやコンテナレジストリからpullしたコンテナイメージを基に 「 $ docker container run 」コマンドを実行して、コンテナを起動します。 コンテナエンジン(dockerd) ハードウェア pull コンテナ イメージレジストリ CentOS リポジトリ Ubuntu リポジトリ Container Image push tag:latest tag:6.7 ・ ・ tag:latest tag:14.04 ・ ・ Nginx リポジトリ tag:latest tag:19.1 ・ ・ カーネル run build Container Image Container Image $ docker container run Dockerfile Run

Slide 24

Slide 24 text

Copyright © 2023, Oracle and/or its affiliates 24 コンテナ技術とコンテナ・オーケストレーション Docker 実践 ~ Run ~ # docker container run --name sample-nginx -d -p 8080:80 cyberblack/test-nginx a8506ee968e6d5ae664ba4046fe15b518127f6c826247fcaac2f3c1cd24e4cef コンテナを起動と同時に Docker イメージを展開 # docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a8506ee968e6 cyberblack/test-nginx "nginx -g 'daemon of…" 13 seconds ago Up 12 seconds 0.0.0.0:8080->80/tcp sample-nginx コンテナ稼働を確認 # curl http://localhost:8080 Welcome to nginx!

Hello,Docker & Kubernetes

コンテナ(Nginx)にアクセス sample-nginx port:80 localhost port:8080 localhost ポート8080経由でコンテナーの80ポートへ curl でアクセス # curl http://localhost:8080 Run

Slide 25

Slide 25 text

Copyright © 2023, Oracle and/or its affiliates 25 コンテナ技術とコンテナ・オーケストレーション Docker 実践 ~ Build/Ship/Run ~ Build Ship Run イメージレジストリ Dockerfile コンテナイメージ アプリケーション フレームワーク アプリケーション ライブラリ OS イメージ ① コンテナイメージ自動作成 ③ イメージを基にコンテナを起動 イメージの 作成手順を記載 $ docker image pull $ docker image push $ docker image build $ docker container run コンテナ ② Docker イメージの保存・共有

Slide 26

Slide 26 text

Copyright © 2023, Oracle and/or its affiliates 26 コンテナ技術とコンテナ・オーケストレーション コンテナを支えるオーケストレーション 単体のコンテナでは、コンテナ自体が落ちたり、コンテナ環境を支えるホストなどのハードウェアや仮想マシンに障害が発生 して稼働が停止した場合などの対処が無く、システム自体利用不可。 この状態でのプロダクション利用は厳しい。 コンテナの停止、ホストが停止した場合でも自動修復して、サービス無停止による継続。アプリケーションをサービス無停 止の状態でデプロイ可能な DevOps 環境を構築する上でコンテナーオーケストレーションは必須。 OKE Compute OCIR コンテナイメージ Kubernetes

Slide 27

Slide 27 text

Copyright © 2023, Oracle and/or its affiliates 27 コンテナ技術とコンテナ・オーケストレーション コンテナを支えるオーケストレーション Kubernetes は、Google 社内のコンテナーオーケストレーションシステムである Borg からインスパイアされて開発された OSS のコンテナーオーケストレーション。 読み方:クーバーネーティス、クーバネティス、クバネティス等 略称:K8s(Kubernetes) 8文字 現在は、CNCF (Cloud Native Computing Foundation) で管理され、多数の企業が参加するコミュニティで開発。

Slide 28

Slide 28 text

Copyright © 2023, Oracle and/or its affiliates 28 コンテナ技術とコンテナ・オーケストレーション コンテナを支えるオーケストレーション Kubernetesの主な役割と実現 • コンテナのスケジューリング • ローリングアップデート • オートスケーリング • 死活監視 • 頻繁なアプリケーションのデプロイを可能にするシステム基盤 • 無停止によるリリース、高可用なシステム基盤 • 負荷に応じた伸縮自在なシステム基盤 主な役割 実現 • コンテナの自動修復 • サービスディスカバリ • ロードバランシング

Slide 29

Slide 29 text

Copyright © 2023, Oracle and/or its affiliates 29 コンテナ技術とコンテナ・オーケストレーション コンテナを支えるオーケストレーション マニフェストファイル YAML Controllerがあるべき理想の状態へ収束 Controller 内の Reconciliation loop(調整ループ)と呼ばれる、 あるべき理想の状態へ収束させるループ処理を実行。 Kubernetesクラスタ 登録 Controller 監視 コンテナ管理 (作成・削除) Reconciliation loop 宣言的オペレーション

Slide 30

Slide 30 text

Copyright © 2023, Oracle and/or its affiliates 30 コンテナ技術とコンテナ・オーケストレーション コンテナを支えるオーケストレーション Kubernetesは分散処理基盤 Virtual Machine & BareMetal Kubernetes Container

Slide 31

Slide 31 text

Copyright © 2023, Oracle and/or its affiliates 31 コンテナ技術とコンテナ・オーケストレーション コンテナを支えるオーケストレーション Kubernetes is becoming the Linux of the cloud by Jim Zemlin (The Linux Foundation)

Slide 32

Slide 32 text

Copyright © 2023, Oracle and/or its affiliates 32 コンテナ技術とコンテナ・オーケストレーション コンテナを支えるオーケストレーション Multi-Cloud to Multi-Kubernetes Cloud Native to Kubernetes Native

Slide 33

Slide 33 text

Copyright © 2023, Oracle and/or its affiliates 33 Kubernetes コンポーネント

Slide 34

Slide 34 text

Copyright © 2023, Oracle and/or its affiliates 34 Control Plane & Node

Slide 35

Slide 35 text

Copyright © 2023, Oracle and/or its affiliates 35 Kubernetes コンポーネント Control Plane & Node Kubernetes には、構成要素として Control Plane と Worker Node というコンポーネントがある Control Plane クラスタの制御を受け持ち、スケジューリングやイベント検知など、クラスタの全体に関わる管理を担う。 Node アプリケーションコンテナの稼働場所となり、コンテナランタイムが稼働し、Control Plane と連携してコン テナの起動などの実行を担う。

Slide 36

Slide 36 text

Copyright © 2023, Oracle and/or its affiliates 36 Kubernetes コンポーネント Control Plane & Node

Slide 37

Slide 37 text

Copyright © 2023, Oracle and/or its affiliates 37 Kubernetes コンポーネント Control Plane コンポーネント 概要 API server Kubernetes への API リクエストを REST で受け付けるフロントエンドサーバ オブジェクトのCRUDやユーザおよびサービスアカウントの認証認可、リクエストの制御を行う Admission Control 機能がある Scheduler Pod を最適な Node に配置する Cloud controller manager クラウドプロバイダーの機能と連携して、ロードバランサやディスクボリュームなどのリソースを管理する Controller Manager Kubernetes クラスタのリソース状態を管理して、要求される各リソースの状態(あるべき姿)を維持する etcd Kubernetes クラスタに登録される全ての情報を保存するデータストア(KVS)

Slide 38

Slide 38 text

Copyright © 2023, Oracle and/or its affiliates 38 Kubernetes コンポーネント Node コンポーネント 概要 kubelet Node への Pod のスケジューリングを監視して、Container Runtime を利用して Pod の生成、更新、破棄などを行う Container Runtime kubelet によるコンテナイメージの取得とコンテナの作成、更新、破棄などを実行。 Kubernetes は、コンテナランタイムの取替が可能 なため、containerd 、cri-o 、gVisor など利用可能 kube-proxy 各 Node で動作する、Service オブジェクトが持つ仮想的な Cluster IP や NodePort 宛のトラフィックを Pod へ正常に転送する ネットワークプロキシの役割を担う

Slide 39

Slide 39 text

Copyright © 2023, Oracle and/or its affiliates 39 Pod

Slide 40

Slide 40 text

Copyright © 2023, Oracle and/or its affiliates 40 Kubernetes コンポーネント Pod Container Container Node1 Node2 • 1つまたは複数のコンテナをデプロイする最小単位 • Pod 内のコンテナは同じホスト名と IP アドレスを持つ • Pod 内のコンテナは同じポート番号を持つことはできない • Pod 内のコンテナはローカルホスト通信 • Pod 内のコンテナは同じ Node 上で稼働、Node をまたぐことはできない

Slide 41

Slide 41 text

Copyright © 2023, Oracle and/or its affiliates 41 Kubernetes コンポーネント Pod ができるまでの仕組み 1.Podを作るマニ フェストまたはコマン ドを kubectl で実 行すると、 API serverが受け付け て、etcd に格納。 2.Scheduler は API serverを経由して etcd を監視、 更新されるとリソース(ここではPod)をどの Node に配置 するか決める。 3. Scheduler が配置する Pod の nodename を更新、 kubelet も API server 経由で etcd を監視して いるので、 nodename が合致する kubelet が ContainerRuntime を利用して Pod(コンテナ)を作成。 Pod (コンテナ)を作成したことを API serverに伝えると、 API server が etcd を更新。 Container Image Registry

Slide 42

Slide 42 text

Copyright © 2023, Oracle and/or its affiliates 42 ReplicaSet & Deployment

Slide 43

Slide 43 text

Copyright © 2023, Oracle and/or its affiliates 43 Kubernetes コンポーネント ReplicaSet ReplicaSet は、 Pod のレプリカを作成して、マニフェストファイルで定義されたレプリカ数( replicas )を保証し、定義され た数の Pod を常に起動させる仕組み。 Kubernetes Cluster ReplicaSet (Replica 数 = 5)

Slide 44

Slide 44 text

Copyright © 2023, Oracle and/or its affiliates 44 Kubernetes コンポーネント ReplicaSet ReplicaSet は、Node や Pod に障害が発生した場合、定義されたレプリカ数を保証するために、別ノードで復旧、 Kubernetes のセルフヒーリング機能。 ReplicaSet (Replica 数 = 5) Kubernetes Cluster

Slide 45

Slide 45 text

Copyright © 2023, Oracle and/or its affiliates 45 Kubernetes コンポーネント Deployment Deployment は ReplicaSet の作成、更新、履歴管理を行う。ローリングアップデート、ロールバックを可能にする。 1世代 2世代 3世代 4世代 ローリングアップデート ロールバック replicas:5 Image: nginx:1.15 replicas:5 Image: nginx:1.16 replicas:5 Image: nginx:1.17 replicas:5 Image: nginx:1.18

Slide 46

Slide 46 text

Copyright © 2023, Oracle and/or its affiliates 46 Kubernetes コンポーネント Deployment & ReplicaSet & Pod の関係 管理 管理 上位リソース Pod Replicaset Deployment

Slide 47

Slide 47 text

Copyright © 2023, Oracle and/or its affiliates 47 Kubernetes コンポーネント セルフヒーリングの仕組み Container Image Registry マニフェスト ファイル(yaml) replicas:3 replicas:3 1.「kubectl create -f deployment.yaml」 kubectl コマンドでマニフェストファイル(あるべき姿の定義)を登録します。etcd に格納されます。 2. Controller Manager が API server を経由して etcd から Node の状況 ( Deployment と ReplicaSet の定義、あるべき姿 ) を常に監視して、 差異が生じた場合に再作成を実行 3. kubelet は、再作成のアクションを確認して、コンテナを起動。 4. kubelet は Node の状況確認及び自分の Node の状況を API server に連絡、API server は、更新内容を etcd 書き込む。

Slide 48

Slide 48 text

Copyright © 2023, Oracle and/or its affiliates 48 Kubernetes コンポーネント Reconcile Loop Kubernetes は、マニフェストファイルの内容をあるべき理想の形(Desired State)とする。 そして、常にその状態であるかを監視して、相違がある場合、 Reconcile Loop により自動修復。 登録 監視 Controller Reconcile Loop あるべき理想の形でない 場合、修復を行う。 コンテナの作成、削除 クラスタの状態

Slide 49

Slide 49 text

Copyright © 2023, Oracle and/or its affiliates 49 Kubernetes コンポーネント Reconcile Loop Reconcile Loop とは、 Controller 内で実行されている理想とするあるべき姿に収束させるループ機能。 Observe Diff Act Act: Observe: Diff: 現状確認 理想と現実の差分計算 差分に対する処理

Slide 50

Slide 50 text

Copyright © 2023, Oracle and/or its affiliates 50 Kubernetes コンポーネント Reconcile Loop 例:3個の Nginx コンテナ( Pod )を起動することを理想とする 理想の状態 クラスタの状態

Slide 51

Slide 51 text

Copyright © 2023, Oracle and/or its affiliates 51 Kubernetes コンポーネント Reconcile Loop 2個のコンテナ( Pod )しか起動していない場合 理想の状態 クラスタの状態

Slide 52

Slide 52 text

Copyright © 2023, Oracle and/or its affiliates 52 Kubernetes コンポーネント Reconcile Loop 2個のコンテナ( Pod )しか起動していない場合 Diff: 1個のコンテナ( Pod )が足りない 理想の状態 クラスタの状態

Slide 53

Slide 53 text

Copyright © 2023, Oracle and/or its affiliates 53 Kubernetes コンポーネント Reconcile Loop 2個のコンテナ( Pod )しか起動していない場合 Act: 1個の nginx のコンテナ( Pod )を作成する 理想の状態 クラスタの状態

Slide 54

Slide 54 text

Copyright © 2023, Oracle and/or its affiliates 54 Service

Slide 55

Slide 55 text

Copyright © 2023, Oracle and/or its affiliates 55 Kubernetes コンポーネント Service Service はクラスタ内外からのリクエストを Pod にアクセスする為のルーティングや DNS 機能を提供。主な機能として、 ClusterIP 、NodePort 、LoadBalancer がある。 Kubernetes Cluster Node #1 Node #2 Node #3

Slide 56

Slide 56 text

Copyright © 2023, Oracle and/or its affiliates 56 Kubernetes コンポーネント ClusterIP クラスタ内の Pod 同士が、内部 DNS で名前解決して通信するプライベート IP アドレス。 Kubernetes Cluster 内部 DNS 代表 IP アドレス (ClusterIP) クライアント リクエスト DNS 登録/削除 名前解決 IP アドレス返答 負荷分散

Slide 57

Slide 57 text

Copyright © 2023, Oracle and/or its affiliates 57 Kubernetes コンポーネント NodePort Node の IP アドレスに公開ポート番号を開放して、クラスタ外部からのアクセスを受け付ける。 Service は、kube-proxy と連携して、各ノードにポートを開き、ノード横断で Pod にリクエストを送信。 Kubernetes Cluster クラスタ外リクエスト Node #1 IP address:NodePort クラスタ外リクエスト Node #2 IP address:NodePort クラスタ外リクエスト Node #3 IP address:NodePort type: NodePort Node #1 Node #2 Node #3

Slide 58

Slide 58 text

Copyright © 2023, Oracle and/or its affiliates 58 Kubernetes コンポーネント LoadBalancer クラスタ外のロードバランサと連携して外部からのアクセスを受け付ける。各クラウドプロバイダーで対応。 type: LoadBalancer Node #1 Node #2 Node #3 Kubernetes Cluster 外部ロードバランサ クラスタ外リクエスト 外部IPアドレス

Slide 59

Slide 59 text

Copyright © 2023, Oracle and/or its affiliates 59 Ingress

Slide 60

Slide 60 text

Copyright © 2023, Oracle and/or its affiliates 60 Kubernetes コンポーネント Ingress Ingress は外部からの HTTP(S) トラフィックを内部 Service にルーティングし、レイヤ7のロードバランシングを提供。 パスベースルーティング、HTTPS終端、名前ベースのバーチャルホスティングも可能。 外部 DNS VIP 外部公開用 アドレス (外部LB) 外部クライアント (ブラウザ) https://xxxx.sample.co.jp/foo 名前解決 Internet Kubernetes Cluster https://xxxx.sample.co.jp/bar path: /foo path: /bar

Slide 61

Slide 61 text

Copyright © 2023, Oracle and/or its affiliates 61 Volume & PersistentVolume & PersistentVolumeClaim

Slide 62

Slide 62 text

Copyright © 2023, Oracle and/or its affiliates 62 Kubernetes コンポーネント Volume コンテナ側からマウント可能なボリューム領域。保存領域の実態をポイントする。 Volume は、あらかじめ用意された利用可能な Volume を Pod のマニフェストファイルから直接指定して利用。 Container Volume Container NIC ※例として Container を 2個としています。 ローカルディスクなど IP アドレス コンテナ同士は、 ローカルホスト通信 Kubernetes Cluster

Slide 63

Slide 63 text

Copyright © 2023, Oracle and/or its affiliates 63 Kubernetes コンポーネント PersistentVolume (PV) & PersistentVolumeClaim (PVC) PersistentVolume は、永続ボリュームと連携して、Kubernetes クラスタにボリュームを登録するリソース。 PersistentVolumeClaim は、PersistentVolume をアサインするリソース。 Pod から PersistentVolume を利用 する場合、 Pod のマニフェストにPersistentVolumeClaim を定義して利用。 Container Container NIC ※例として Container を 2個としています。 IP アドレス コンテナ同士は、 ローカルホスト通信 ストレージプラグイン を利用することで多 種の外部ストレージ を利用できます。 Kubernetes Cluster Volume Volume

Slide 64

Slide 64 text

Copyright © 2023, Oracle and/or its affiliates 64 Kubernetes コンポーネント PVC と PV の利用手順例 ストレージ ① インフラエンジニアがストレージを準備 ② クラスタ管理者が PV を作成し、ストレージを Kubernetes クラスタに登録 ③ 開発者が PVC を作成し、Pod からマウントする場合の名称、利用する PV 条件を指定 ④ Kubernetes は PVC の条件に合致する PV があれば PVC と PV を紐づける ⑤ 開発者は、Pod 定義で PVC を指定して Pod を生成する インフラエンジニア クラスタ管理者 開発者 ① ② ② ③ ④ ⑤ ② ③ ⑤ ② ③ ⑤ PersistentVolume マニフェストファイル PersistentVolumeClaim マニフェストファイル Pod / Deployment マニフェストファイル

Slide 65

Slide 65 text

Copyright © 2023, Oracle and/or its affiliates 65 ConfigMap & Secret

Slide 66

Slide 66 text

Copyright © 2023, Oracle and/or its affiliates 66 Kubernetes コンポーネント ConfigMap ConfigMap は、環境変数、引数等の設定情報(Key-Value 保持)をコンテナに渡すために使用。Volume として コンテナにマウントして、コンテナからはファイルとして認識される。 Kubernetes Cluster Container Volume Container NIC ※例として Container を 2個としています。 IP アドレス コンテナ同士は、 ローカルホスト通信 httpd.conf, nginx.conf のような設 定ファイルやパラメータだけでも可能 です。格納可能なデータサイズは 1MB となります。 Key=Value

Slide 67

Slide 67 text

Copyright © 2023, Oracle and/or its affiliates 67 Kubernetes コンポーネント Secret Secret は、機密性の高いデータ( ID/Password 情報、SSL/TLS 証明書、アクセストークン等)を保持する上で 使用する Volume 。 Kubernetes Cluster tmpfs 領域 tmpfs 領域は、メモリ 内に保持されるため、 Node のディスク書き 込まれない。 参照 利用する Pod が存在する場合 にのみデータを Node に送信。 転送は over SSL/TLS となる。 etcd 内では、平文で保存 されるため、etcd のアクセス 権限やセキュリティの対応が 必要。

Slide 68

Slide 68 text

Copyright © 2023, Oracle and/or its affiliates 68 Kubernetes コンポーネント Secret リソースの暗号化 Secret は、base64 でエンコードされているが、暗号化されていない。Git リポジトリに Secret の設定が定義されてい るマニフェストファイルをアップロードするのはセキュリティリスクがあるため、マニフェストファイルを暗号化するオープンソース ソフトウェアを利用する。 • Kubesec https://kubesec.io/ • SealedSecret https://github.com/bitnami-labs/sealed-secrets • ExternalSecret https://github.com/godaddy/kubernetes-external-secrets

Slide 69

Slide 69 text

Copyright © 2023, Oracle and/or its affiliates 69 Label & Namespace

Slide 70

Slide 70 text

Copyright © 2023, Oracle and/or its affiliates 70 Kubernetes コンポーネント Label & Label Selector Kubernetes 上のオブジェクトにタグのような属性を設定して、グループ化したり、特定のオブジェクトを抽出できるように する仕組み。 • Label LabelはKey/Value ペアの文字列で、Pod などのオブジェクトに任意のメタ情報を付与して識別用途として利用。 • Label Selector Label 設定値の条件に該当するものをグループとして識別用途利用。

Slide 71

Slide 71 text

Copyright © 2023, Oracle and/or its affiliates 71 Kubernetes コンポーネント Namespace Namespace は、複数のユーザー間で(リソース割り当てを介して)クラスタリソースを分割する仕組みです。 • 1ユーザー毎に1個の Namespace • Namespace におけるリソースの名前は、Namespace 内で一意である必要がありますが、Namespace 間では 一意である必要はありません • Namespace 毎にリソースの利用上限を設定可能

Slide 72

Slide 72 text

Copyright © 2023, Oracle and/or its affiliates 72 Kubernetes クラスタ構築 & アプリケーションデプロイ

Slide 73

Slide 73 text

Copyright © 2023, Oracle and/or its affiliates 73 クラスタ構築

Slide 74

Slide 74 text

Copyright © 2023, Oracle and/or its affiliates 74 Kubernetes クラスタ構築 & アプリケーションデプロイ Kubernetes クラスタ構築ツールを利用せずに、全てを1から構築する「 Kubernetes the hard way 」 https://github.com/kelseyhightower/kubernetes-the-hard-way

Slide 75

Slide 75 text

Copyright © 2023, Oracle and/or its affiliates 75 Kubernetes クラスタ構築 & アプリケーションデプロイ kubeadm https://kubernetes.io/docs/setup/independent/install-kubeadm/ Kubernetes クラスタを構築するオープンソースソフトウェア

Slide 76

Slide 76 text

76 Copyright © 2023, Oracle and/or its affiliates Virtual Machine Virtual Machine k8s-control-plane k8s-node Item Spec Shape VM.Standard.A1.Flex CPU Ampere MEM (control plane) 12GB MEM (node/manage) 6GB OS Ubuntu 20.04 ContainerRuntime Containerd CNI Calico kubectl ssh Virtual Machine manage OCI Always-Free 環境で構築できます。 User Kubernetes クラスタ構築 & アプリケーションデプロイ kubeadm https://github.com/oracle-japan/ochacafe-s5-3

Slide 77

Slide 77 text

Copyright © 2023, Oracle and/or its affiliates 77 Kubernetes クラスタ構築 & アプリケーションデプロイ Kubernetes マネージドサービス Amazon Elastic Kubernetes Service Google Kubernetes Engine Azure Kubernetes Service Oracle Container Engine for Kubernetes

Slide 78

Slide 78 text

Copyright © 2023, Oracle and/or its affiliates 78 WordPress を動かしてみる

Slide 79

Slide 79 text

Copyright © 2023, Oracle and/or its affiliates 79 WordPress を動かしてみる デモ環境で利用するソースなど https://bit.ly/ochacafe7-1

Slide 80

Slide 80 text

Copyright © 2023, Oracle and/or its affiliates 80 WordPress を動かしてみる デモ環境概要図

Slide 81

Slide 81 text

Copyright © 2023, Oracle and/or its affiliates 81 WordPress を動かしてみる OKE 構築 クイック作成で Kubernetes クラスタを構築 https://oracle-japan.github.io/ocitutorials/cloud-native/devops-for-beginners-oke/ ※構築手順は、チュートリアルを参照

Slide 82

Slide 82 text

Copyright © 2023, Oracle and/or its affiliates 82 WordPress を動かしてみる Secret 作成

Slide 83

Slide 83 text

Copyright © 2023, Oracle and/or its affiliates 83 WordPress を動かしてみる Secret 作成 $ kubectl create secret generic mysql --from-literal=password=mysql-p@ssw0d 1.データベースのパスワードを格納する Kubernetes シークレットを作成 OCI の Cloud Shell で kubectl コマンドを実行

Slide 84

Slide 84 text

Copyright © 2023, Oracle and/or its affiliates 84 WordPress を動かしてみる NFS サーバの作成

Slide 85

Slide 85 text

Copyright © 2023, Oracle and/or its affiliates 85 WordPress を動かしてみる Kubernetes クラスタ上におけるデータの一時性と永続性 一時性( Temporary ):Pod が削除または再デプロイさると同時にデータが消えること Pod volume Container Container Container Pod volume Pod 削除 = データ削除 コンテナ内の書き込みレイ ヤーのボリュームにデータを 保存 Pod 内のボリュームにデータを保 存、例としては emptyDir

Slide 86

Slide 86 text

Copyright © 2023, Oracle and/or its affiliates 86 WordPress を動かしてみる Kubernetes クラスタ上におけるデータの一時性と永続性 永続性( Persistent ):Pod が削除または再デプロイされてもデータは消えないこと Pod volume Container ノードまたはディスク削除 = データ削除 Pod volume Container pvc pv Node Node Pod volume Container pvc pv Node External Storage 外部ストレージ・volumeの削除= データ削除 ノードにあるローカルディスクまたは PVC/PV を利用してローカルディスクにデータを保存、直 接の場合は、hostPath をマニフェストに定義する PVC/PV を利用して外部ストレージにデータを保存

Slide 87

Slide 87 text

Copyright © 2023, Oracle and/or its affiliates 87 WordPress を動かしてみる PersistentVolumeClaim と PersistentVolume の仕組み Pod PersistentVolumeClaim PersistentVolume 20GiB PersistentVolume 30GiB PersistentVolume 40GiB 5GiB のボリュームを要求 ボリュームの割り 当て 払い出されるボリュームは、要求されている 5GiB に近い 20GiB のボリュームとなるので、要求容量よりも 15GiB 多 いボリュームとなる。 PersistentVolume の容量は設計時に校了が必要。

Slide 88

Slide 88 text

Copyright © 2023, Oracle and/or its affiliates 88 WordPress を動かしてみる StorageClass による Dynamic Provisioning StorageClass の仕組みを利用して、PersistentVolumeClaim が発行されたタイミングで動的に PersistentVolume を作成して アサインできます。 Pod PersistentVolumeClaim PersistentVolume 5GiB 5GiB のボリュームを要求 ボリュームの割り 当て Dynamic Provisioning は、要求に応じて動的にボリュームを作成して割り当てる仕組み。StorageClass を登録し て、PersistentVolumeClaim から呼び出すと Provisioner が要求に応じた PersistentVolume を作成して割り当 てることができる。 StorageClass Provisioner

Slide 89

Slide 89 text

Copyright © 2023, Oracle and/or its affiliates 89 WordPress を動かしてみる NFS サーバの作成 CSI ボリューム・プラグインを利用して、ブロックボリュームの PersistentVolumeClaim を作成 nfs-pvc.yaml oci-bv ストレージ・クラスの定義 ( provisioner: blockvolume.CSI.oraclecloud.com ) で 指定された CSI プラグインを使用して、ブロック・ボリュームを動的にプロビジョニング。 $ kubectl apply -f nfs-pvc.yaml $ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nfs-pvc Pending oci-bv 1m 1.マニフェストの適用 2. PVC の確認 oci-bv ストレージ・クラスの定義に volumeBindingMode: WaitForFirstConsumer が含 まれているため、PVC のステータスは Pending となる。

Slide 90

Slide 90 text

Copyright © 2023, Oracle and/or its affiliates 90 WordPress を動かしてみる NFS サーバの作成 Deployment として、NFS サーバを作成 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nfs-pvc Bound csi-3ce3f735-04a8-4b22-a768-7ae794d200a7 50Gi RWO oci-bv 141m nfs-server.yaml NFS サーバの Pod が作成されると PVC のステータスが、Pending から Bound に変わり、バ インドされたことになる。 $ kubectl apply -f nfs-server.yaml 1.マニフェストの適用 $ kubectl get pvc 2. PVC の確認 事前に作成した、PVC を指定

Slide 91

Slide 91 text

Copyright © 2023, Oracle and/or its affiliates 91 WordPress を動かしてみる NFS サーバの作成 WordPress & MySQL から接続する NFS の Service を作成 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP,12250/TCP 33d nfs-service ClusterIP 10.96.211.52 2049/TCP,20048/TCP,111/TCP 167m nfs-service.yaml $ kubectl apply -f nfs-service.yaml 1.マニフェストの適用 $ kubectl get services 2. Service の確認

Slide 92

Slide 92 text

Copyright © 2023, Oracle and/or its affiliates 92 WordPress を動かしてみる PV & PVC の作成

Slide 93

Slide 93 text

Copyright © 2023, Oracle and/or its affiliates 93 WordPress を動かしてみる PV & PVC の作成 WordPress & MySQL Pod から紐づける PVC & PV を作成 定義 説明 name,labels 多数 PV がある場合に識別しやすくなるため、設定が推奨 storageClassName PV の StorageClass を指定 PVC は、紐づける PV の storageClassName を指定 storage 利用する容量を指定 accessModes ・ReadWriteOnce(RWO) 単一ノードから Read/Write ・ReadOnlyMany(ROX) 複数ノードから Read ・ReadWriteMany(RWX) 複数ノードから Read/Write persistentVolumeReclaimPolicy ・Delete PV の実体が削除される ・Retain 指定しない場合は Retain 、PV の実体は削除せずに保持、他の PVC によって、 このPVは再マウントされない ・Recycle PV のデータを削除 ( rm –rf ./* ) し、再利用可能にする 他の PVC によって再マウントされる nfs nfs-service の IP アドレスを入力して、NFS サーバを指定 mysql-pv.yaml wordpress-pv.yaml wordpress-pvc.yaml mysql-pvc.yaml

Slide 94

Slide 94 text

Copyright © 2023, Oracle and/or its affiliates 94 WordPress を動かしてみる PV & PVC の作成 $ kubectl apply -f mysql-pv.yaml 1.マニフェストの適用 $ kubectl apply -f mysql-pvc.yaml $ kubectl apply -f wordpress-pv.yaml $ kubectl apply -f wordpress-pvc.yaml 2. Bound の確認 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/mysql-pvc Bound mysql-pv 10Gi RWX mysql 25h persistentvolumeclaim/nfs-pvc Bound csi-3ce3f735-04a8-4b22-a768-7ae794d200a7 50Gi RWO oci-bv 26h persistentvolumeclaim/wordpress-pvc Bound wordpress-pv 10Gi RWX wordpress 25h NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/csi-3ce3f735-04a8-4b22-a768-7ae794d200a7 50Gi RWO Delete Bound default/nfs-pvc oci-bv 26h persistentvolume/mysql-pv 10Gi RWX Retain Bound default/mysql-pvc mysql 25h persistentvolume/wordpress-pv 10Gi RWX Retain Bound default/wordpress-pvc wordpress 25h $ kubectl get pvc,pv

Slide 95

Slide 95 text

Copyright © 2023, Oracle and/or its affiliates 95 WordPress を動かしてみる Deployment & Service の作成

Slide 96

Slide 96 text

Copyright © 2023, Oracle and/or its affiliates 96 WordPress を動かしてみる Deployment & Service の作成 WordPress & MySQL の Deployment を作成 定義 説明 containers Pod 内のコンテナの設定等を指定します。 ・image イメージレジストリ指定します。 ・env 環境変数指定、ここでは環境変数として MYSQL_ROOT_PASSWORD を定義し、Secrets に登録したパスワー ドを参照しています。 ・containerPort コンテナのポート番号を指定します。 ・volumeMounts PVC で要求する volume をマウントするコンテナ側のディレクトリを指定しま す。 ・volumes 連携する PVC を指定します。 mysql.yaml wordpress.yaml

Slide 97

Slide 97 text

Copyright © 2023, Oracle and/or its affiliates 97 WordPress を動かしてみる Deployment & Service の作成 WordPress & MySQL の Service を作成 定義 説明 type ・ClusterIP クラスタ内で Pod 同士が通信するためのプライベートで IP アドレス ・NodePort 「全ての Kubernetes Node の IPアドレス:port 」で受信したトラフィックをコンテナーに転送する形で外部通信を確立 ・LoadBalancer LB 経由でアクセス可能なサービス、L4 ロードバランサ機能 mysql-service.yaml wordpress-service.yaml

Slide 98

Slide 98 text

Copyright © 2023, Oracle and/or its affiliates 98 WordPress を動かしてみる Deployment & Service の作成 WordPress & MySQL の Deployment を作成 $ kubectl apply -f mysql.yaml $ kubectl apply -f mysql-service.yaml $ kubectl apply -f wordpress.yaml $ kubectl apply -f wordpress-service.yaml 2. Pod のステータス確認 NAME READY STATUS RESTARTS AGE mysql-8585f7cbd7-9hz79 1/1 Running 0 25h nfs-server-5c9d68c76c-kxq4d 1/1 Running 0 26h wordpress-76f698c64-2qh8m 1/1 Running 0 25h $ kubectl get pods

Slide 99

Slide 99 text

Copyright © 2023, Oracle and/or its affiliates 99 WordPress を動かしてみる Deployment & Service の作成 3. Service のステータス確認 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP,12250/TCP 34d mysql-service ClusterIP 10.96.94.102 3306/TCP 26h nfs-service ClusterIP 10.96.211.52 2049/TCP,20048/TCP,111/TCP 26h wordpress-service LoadBalancer 10.96.251.162 150.230.xxx.xxx 80:32516/TCP 25h $ kubectl get services http://EXTERNAL-IP/wp-admin/install.php 4. ブラウザアクセス

Slide 100

Slide 100 text

Copyright © 2023, Oracle and/or its affiliates 100 WordPress を動かしてみる Pod のスケールアウトとインの作成 WordPress Pod を 10 個にして、スケールアップ $ kubectl scale deployment wordpress --replicas 10 スケールアップの確認 $ kubectl get pods NAME READY STATUS RESTARTS AGE mysql-c468c5548-bh6t5 1/1 Running 0 6m41s nfs-server-754d98f49b-zmfld 1/1 Running 0 10m wordpress-74d8c99c7f-6dhzg 1/1 Running 0 104s wordpress-74d8c99c7f-kg96k 1/1 Running 0 104s wordpress-74d8c99c7f-m2dg7 1/1 Running 0 104s wordpress-74d8c99c7f-mjrsm 1/1 Running 0 6m19s wordpress-74d8c99c7f-nzxkd 1/1 Running 0 104s wordpress-74d8c99c7f-pbr57 1/1 Running 0 104s wordpress-74d8c99c7f-pfrfz 1/1 Running 0 104s wordpress-74d8c99c7f-qqtdc 1/1 Running 0 104s wordpress-74d8c99c7f-rknbm 1/1 Running 0 105s wordpress-74d8c99c7f-svhpj 1/1 Running 0 104s

Slide 101

Slide 101 text

Copyright © 2023, Oracle and/or its affiliates 101 WordPress を動かしてみる Pod のスケールアウトとインの作成 WordPress Pod を 1個 にして、スケールイン $ kubectl scale deployment wordpress --replicas 1 スケールインの確認 $ kubectl get pods NAME READY STATUS RESTARTS AGE mysql-c468c5548-bh6t5 1/1 Running 0 6m41s nfs-server-754d98f49b-zmfld 1/1 Running 0 10m wordpress-74d8c99c7f-mjrsm 1/1 Running 0 6m19s

Slide 102

Slide 102 text

Copyright © 2023, Oracle and/or its affiliates 102 WordPress を動かしてみる オブジェクトの削除 WordPress と MySQL の Deployment と Service を削除 $ kubectl delete -f wordpress-service.yaml $ kubectl delete -f wordpress.yaml $ kubectl delete -f mysql-service.yaml $ kubectl delete -f mysql.yaml WordPress と MySQL の PV と PVC を削除 $ kubectl delete pvc wordpress-pvc $ kubectl delete pvc mysql-pvc $ kubectl delete pv wordpress-pv $ kubectl delete pv mysql-pv

Slide 103

Slide 103 text

Copyright © 2023, Oracle and/or its affiliates 103 WordPress を動かしてみる オブジェクトの削除 NFS の Deployment と Service と PVC を削除 $ kubectl delete service nfs-service $ kubectl delete deployment nfs-server $ kubectl delete pvc nfs-pvc Secret を削除 $ kubectl delete secret mysql

Slide 104

Slide 104 text

Copyright © 2023, Oracle and/or its affiliates 104 参考

Slide 105

Slide 105 text

Copyright © 2023, Oracle and/or its affiliates 105 参考 Docker & Kubernetes Kubernetes Security 日本語書籍 Public Cloud & Container/Kubernetes

Slide 106

Slide 106 text

Copyright © 2023, Oracle and/or its affiliates 106 参考 Certified Kubernetes Administrator 資格 Certified Kubernetes Developer Certified Kubernetes Security Specialist

Slide 107

Slide 107 text

Thank you Copyright © 2023, Oracle and/or its affiliates 107