Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
初めてのKubernetes (ハンズオン)
Search
NearMeの技術発表資料です
PRO
May 31, 2023
Programming
1.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
初めてのKubernetes (ハンズオン)
NearMeの技術発表資料です
PRO
May 31, 2023
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
AIエージェントのための 隔離された安全なインフラ設計
nearme_tech
PRO
0
15
Claude Code × git worktree で並列開発 (続き) -差分のサービスだけを併設する-
nearme_tech
PRO
1
68
Claude Code × git worktree で並列開発 — サブモジュール構成のリポジトリで成立させる —
nearme_tech
PRO
0
79
LLM + 強化学習
nearme_tech
PRO
0
35
PosthogのA/Bテスト機能の紹介
nearme_tech
PRO
1
110
AIフレンドリーなプロダクトに向けて
nearme_tech
PRO
2
70
初めてのLean言語
nearme_tech
PRO
0
110
Apache Airflow Workflow orchestration without turning cron into spaghetti
nearme_tech
PRO
2
48
実務で役立つ幾何学 ボロノイ図の基礎から グラフ・ネットワーク応用まで
nearme_tech
PRO
1
87
Other Decks in Programming
See All in Programming
ジョジョの世界をXRで再現する
mofurune
0
150
R8 の設定見直しでアプリサイズ削減
andpad
0
200
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
470
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
260
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
すこし踏み込む CancellationToken
htkym
2
1.7k
APNsからLive Activityを開始する話
yumnumm
0
160
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
160
パーソナライズPodcastを作った話
repunit11
0
130
Kubernetes祭り #2 OP/ED
bells17
0
110
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
210
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
350
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
430
Ruling the World: When Life Gets Gamed
codingconduct
0
400
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Accessibility Awareness
sabderemane
1
240
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
870
The Curse of the Amulet
leimatthew05
3
15k
Exploring anti-patterns in Rails
aemeredith
4
530
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
610
Why Our Code Smells
bkeepers
PRO
340
58k
Transcript
0 初めてのKubernetes (ハンズオン) 2023-05-26 第45回NearMe技術勉強会 Kenji Hosoda
1 Kubernetes(クバネティス)とは? “デプロイやスケーリングを自動化したり、コンテナ化されたアプリケーションを管理したり するための、オープンソースのシステム” https://kubernetes.io/ 私のイメージ インフラに関わる様々なツールが揃っていて、かつ、オープンソー スで利用できるので、これ一つ覚えればインフラで出来ることの幅 が広がる。ただし、運用は面倒なところもあるので、小規模のサー ビスだと割に合わない場合もある。
2 古き良きWebサービスのホスティング ロードバランサ ノード1 ノード2 SSHログイン Webサービス コード 設定 Webサービス
コード 設定 これはこれでいい部分もある
3 KubernetesによるWebサービスのホスティング ワーカーノード1 設定ファイル ロードバランサ Pod Pod Pod Pod Pod
Pod Pod Service ワーカーノード2 Pod Container Container コントロールプレーン ワーカーノードを管理 Container Registry イメージをダウンロード だいぶ省略して書いてます
4 Kindを利用してローカルにクラスタを作成してみよう (他のOSの場合:https://kind.sigs.k8s.io/docs/user/quick-start#installation) kind create cluster kind get clusters docker
ps Docker上で動いていることを確認 kindのインストール brew install kind # For mac クラスタの作成
5 kubectlを利用してみよう brew install kubectl # For mac kubectl version
--client kubectl 他のOS: https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/install-kubectl.html kubectlのインストール kubectl cluster-info --context kind-kind kubectl config use-context kind-kind コンテキストをkindのクラスタに設定 kubectl get node ノードの取得 → kindのデフォルトはワーカーノードとコントロールプレーンまとめて 1台で動作
6 Deploymentを利用して、Podをスケールさせよう apiVersion: apps/v1 kind: Deployment metadata: labels: app: web-nginx
name: web-nginx spec: replicas: 3 selector: matchLabels : app: web-nginx template: metadata: labels: app: web-nginx spec: containers: - image: nginx name: nginx ports: - containerPort : 80 web-nginx.yaml Podの定義 3つにスケール kubectl apply -f web-nginx.yaml web-nginx.yamlマニフェストの適用 kubectl get pod Podが3つにスケールしていることを確認
7 7 DeploymentのPodを削除してみよう kubectl get pod Podの一覧を取得 kubectl delete pod
web-nginx-694c7647c-7d9rk 一つのPodを削除 kubectl get pod Podの一覧を取得 → しばらくすると新たな Podが構築される ※Deploymentで管理されたPodなので再構築される。 Pod単体で構築した場合は再構築されない。
8 8 Podの数を変更してみよう apiVersion: apps/v1 kind: Deployment metadata: labels: app:
web-nginx name: web-nginx spec: replicas: 2 selector: matchLabels : app: web-nginx template: metadata: labels: app: web-nginx spec: containers: - image: nginx name: nginx ports: - containerPort : 80 web-nginx.yaml 2つに変更 kubectl apply -f web-nginx.yaml 変更したweb-nginx.yamlマニフェストの適用 kubectl get pod Podが2つになっていることを確認 また3つに戻してみよう
9 9 Kubernetesは宣言的 設定ファイル 状態A 設定ファイル 状態B 障害が起こっても自律的に復帰する 次の状態への変化は自動的に行う (Reconcile処理)
10 10 ノードを増やしてみよう 1/3 kind delete cluster kind create cluster
--config=my-cluster.yaml クラスタを再構築して、 Ingress用のcluster設定を適用 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker kubeadmConfigPatches: - | kind: JoinConfiguration nodeRegistration: kubeletExtraArgs: node-labels: "my-label=true" my-cluster.yaml (kindのIngress用のcluster設定) kubectl get node ワーカーノードが2つ、コントロールプレーンのノードが 1つあることを確認 ラベルをつける ことができる my-label=true
11 11 ノードを増やしてみよう 2/3 kubectl apply -f web-nginx.yaml web-nginx.yamlマニフェストの適用 kubectl
get pod -o wide 2つのノードにPodが展開されていることを確認 my-label=true
12 12 特定のノードでPodを動かしてみよう apiVersion: apps/v1 kind: Deployment … spec: containers:
- image: nginx name: nginx ports: - containerPort: 80 nodeSelector: my-label: "true" web-nginx.yaml my-label=true kubectl apply -f web-nginx.yaml web-nginx.yamlマニフェストの適用 kubectl get pod -o wide 2特定のラベルがついたノードにのみ Podが配置されていることを確認 特定ラベルがついたノードを選択 (Affinityを用いてもっと細かい制御が可能 )
13 13 特定のPodのログを見てみよう kubectl get pod Podの一覧を取得 kubectl logs web-nginx-f5bb6cbf5-b299w
一つのPodのログを取得 ※1つのPod内に複数のContainerがある場合は、Container名も指定する
14 14 特定のPodにログインしてみよう kubectl get pod Podの一覧を取得 kubectl exec -it
web-nginx-694c7647c-kj7kr /bin/bash 一つのPodにログイン ※1つのPod内に複数のContainerがある場合は、Container名も指定する
15 マニフェストからリソースを削除してみよう kubectl delete -f web-nginx.yaml web-nginx.yamlマニフェストのリソースを削除 kubectl get pod
Podが削除されていることを確認
16 16 namespaceを利用してみよう kubectl get namespace namespaceの一覧を取得 kubectl create namespace
sandbox namespaceを作成 kubectl apply -f web-nginx.yaml -n sandbox web-nginx.yamlマニフェストをnamespaceを指定して適用 kubectl get pod 指定なしだとnamespaceは”default”なのでpodは表示されない kubectl get pod -n sandbox namespaceを指定するとpodが表示される kubectl delete -f web-nginx.yaml -n sandbox namespaceを指定してリソースを削除
17 Serviceを利用して”Webサービス”にアクセス # 先のDeploymentの定義に追記 --- apiVersion: v1 kind: Service metadata:
name: web-nginx spec: selector: app: web-nginx ports: - port: 8080 targetPort: 80 web-nginx.yaml kubectl apply -f web-nginx.yaml web-nginx.yamlマニフェストを適用 kubectl get svc Serviceの確認 kubectl port-forward svc/web-nginx 8888:8080 Serviceをポートフォワードして外出しする curl localhost:8888 “Webサービス”のレスポンスを確認 ※3つのPod内のどれかにアクセスしている “- - -”は区切りで必要
18 Ingressを利用して”Webサービス”をホスティング 1/2 kind delete cluster kind create cluster --config=my-cluster.yaml
クラスタを再構築して、 Ingress用のcluster設定を適用 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane kubeadmConfigPatches : - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: node-labels: "ingress-ready=true" extraPortMappings : - containerPort: 80 hostPort: 80 protocol: TCP my-cluster.yaml (kindのIngress用のcluster設定) kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress -nginx/main/deploy/static/provider/kind/deploy.yaml nginx-ingress-controllerの構築
19 Ingressを利用して”Webサービス”をホスティング 1/2 # 先のServiceの定義に追記 --- apiVersion: networking.k8s.io/v1 kind: Ingress
metadata: name: example-ingress spec: rules: - host: a.example.com http: paths: - pathType: Prefix path: "/" backend: service: name: web-nginx port: number: 8080 web-nginx.yaml kubectl apply -f web-nginx.yaml web-nginx.yamlマニフェストを適用 # /etc/hostsに以下を追記 127.0.0.1 a.example.com /etc/hostsの編集 curl http://a.example.com/ a.example.comにアクセス
20 20 Lensを利用してクラスタ全体を見てみよう https://k8slens.dev/ からデスクトップアプリをダウンロード ・各種リソースを俯瞰して見れる ・直接Podのログが見れる ・直接Podにログインできる ・ポートフォワードを構築して内部にアクセ スできる
・(Prometheusと組み合わせてモニタリン グできる)
21 21 最後に kind delete cluster 今回、ストレージ周りや、定期実行周りは紹介しきれなかったですが、これらもよく利用される のでぜひキャッチアップしてみてください。 最後に、kindは地味にCPUやメモリを喰うので不要ならクラスタは削除しておいてください (他
のツールと比べて軽い方ではあるのですが)。
22 Thank you