Slide 1

Slide 1 text

k8sクラスタ構築 asuka y

Slide 2

Slide 2 text

話すこと 1. Kubernetesとは 2. クラスタ構築 3. 用途 4. 最後に

Slide 3

Slide 3 text

Kubernetesとは コンテナ化したアプリケーションのデプロイ、スケーリング、および管理を行うための、 オープンソースのコンテナオーケストレーションシステム by Wikipadia VM | Node VM | Node VM | Node VM | Node k8s Container (Pod) Routing (Service) Container Container Container https://k8s:80 :80 :80 :80 :80 ※イメージ できること: deploy, auto scale, auto healing and more.

Slide 4

Slide 4 text

Kubernetesとは コンテナ化したアプリケーションのデプロイ、スケーリング、および管理を行うための、 オープンソースのコンテナオーケストレーションシステム by Wikipadia VM | Node VM | Node VM | Node VM | Node k8s Container Routing Container Container Container https://k8s:80 :80 :80 :80 :80 ※イメージ かっこいいから 自宅にも欲しい!! できること: deploy, auto scaling, auto healing and more.

Slide 5

Slide 5 text

必要なもの + ラズベリーパイ4 (&SDカード) x4 + スイッチングハブ(8 ports) - ラズベリーパイ用 PoE HAT x4 - LANケーブル x4 クラスタ構築

Slide 6

Slide 6 text

必要なもの + ラズベリーパイ4 (&SDカード) x4 + スイッチングハブ(8 ports) - ラズベリーパイ用 PoE HAT x4 - LANケーブル x4 クラスタ構築

Slide 7

Slide 7 text

クラスタ構築 ネットワークイメージ k8sノードを 10.16.1.1 ~ 10.16.1.4に固定 k8s用ネットワーク: 10.16.0.0/16 家のネットワーク: 10.8.0.0/16 k8sを操作するコンピュータのみ通信を許可

Slide 8

Slide 8 text

クラスタ構築 条件 - RAM 2GB以上 - CPU 2 cores以上 - Swap無効化 - Cgroupの有効化 インストールは公式ドキュメント通りにやれば大体できる

Slide 9

Slide 9 text

クラスタ構築 Container Runtime - v1.20からDockershimが非推奨になるらしい? → Containerd採用 - v1.20はまだ Dockerを使うのがインストールが楽 → v1.21からDocker以外も楽になった Cluster Network - クラスタを組んでもNetwork Plugin(CNI)を入れないとコンテナを デプロイできない - よく分からない → Flannel採用 $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Slide 10

Slide 10 text

クラスタ構築 最後に操作するコンピュータからアクセスできるようにする

Slide 11

Slide 11 text

用途 M1 Macの開発環境に良いんじゃないか? - 検討していた時はまだDockerForDesktopがM1対応していなかった - 16GBしかないMacに仮想環境は勿体無い

Slide 12

Slide 12 text

用途 M1 Macの開発環境に良いんじゃないか? - 検討していた時はまだDockerForDesktopがM1対応していなかった - 16GBしかないMacに仮想環境は勿体無い Dockerの動いていない Macに何ができる?

Slide 13

Slide 13 text

用途 M1 Macの開発環境に良いんじゃないか? - 検討していた時はまだDockerForDesktopがM1対応していなかった - 16GBしかないMacに仮想環境は勿体無い Dockerの動いていない Macに何ができる? 救世主! Docker in Docker!!

Slide 14

Slide 14 text

用途 Docker in Dockerを用いたセルフホスト環境 VM | Node VM | Node VM | Node VM | Node k8s Docker in Docker DockerHubからDocker in Dockerをデプロイする

Slide 15

Slide 15 text

用途 Docker in Dockerを用いたセルフホスト環境 VM | Node VM | Node VM | Node VM | Node k8s Docker in Docker DockerHubからコンテナ Registryをデプロイする Registry

Slide 16

Slide 16 text

用途 Docker in Dockerを用いたセルフホスト環境 VM | Node VM | Node VM | Node VM | Node k8s Docker in Docker Registry push Service (NodePort: 30000) 10.16.1.1:30000/sample:latest DinDからRegistryへコンテナ ImageをBuild & Push

Slide 17

Slide 17 text

用途 Docker in Dockerを用いたセルフホスト環境 VM | Node VM | Node VM | Node VM | Node k8s Docker in Docker Registry push sample deploy Service (NodePort: 30000) 10.16.1.1:30000/sample:latest クラスタ上のRegistryからデプロイ apiVersion: v1 kind: Pod metadata: name: sample spec: containers: - name: webapp image: 10.16.1.1:30000/sample ports: - containerPort: 8080

Slide 18

Slide 18 text

用途 Docker in Dockerを用いたセルフホスト環境 VM | Node VM | Node VM | Node VM | Node k8s Docker in Docker Registry push sample deploy Service (NodePort: 30000) 10.16.1.1:30000/sample:latest クラスタ上のRegistryからデプロイ apiVersion: v1 kind: Pod metadata: name: sample spec: containers: - name: webapp image: 10.16.1.1:30000/sample ports: - containerPort: 8080 自己完結!!

Slide 19

Slide 19 text

用途 TLSを適切に設定できない場合、insecure registryとしてContainer runtimeに設定す る必要がある # vim /etc/containerd/config.toml [plugins."io.containerd.grpc.v1.cri".registry.mirrors."10.16.1.1:30000"] endpoint = ["http://10.16.1.1:30000"] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."10.16.1.1:30000".tls] insecure_skip_verify = true

Slide 20

Slide 20 text

最後に 1. 本番運用するときは、 a. TLSを適切に設定するべき b. ManagedなRegistryを利用するべき c. ManagedなK8sを利用するべき 2. PoEを利用すると配線はスッキリするが、ファンの騒音がひどい a. RaspPiは電源タップを買ってファンレス運用するのがおすすめ 3. M1 Mac利用者は v1.21~を利用しよう a. v1.21は Go v1.16でbuildされているため、Nativeサポートされている

Slide 21

Slide 21 text

ありがとうございました。