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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
NearMeの技術発表資料です
PRO
May 31, 2023
Programming
1.8k
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の技術発表資料です
Claude Code × git worktree で並列開発 (続き) -差分のサービスだけを併設する-
nearme_tech
PRO
1
57
Claude Code × git worktree で並列開発 — サブモジュール構成のリポジトリで成立させる —
nearme_tech
PRO
0
71
LLM + 強化学習
nearme_tech
PRO
0
33
PosthogのA/Bテスト機能の紹介
nearme_tech
PRO
1
75
AIフレンドリーなプロダクトに向けて
nearme_tech
PRO
2
65
初めてのLean言語
nearme_tech
PRO
0
110
Apache Airflow Workflow orchestration without turning cron into spaghetti
nearme_tech
PRO
2
39
実務で役立つ幾何学 ボロノイ図の基礎から グラフ・ネットワーク応用まで
nearme_tech
PRO
1
77
SQL/ID抽出タスクから考える 実践的なハルシネーション対策
nearme_tech
PRO
1
90
Other Decks in Programming
See All in Programming
アクセシビリティから考える情報設計
high_g_engineer
0
380
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
320
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
160
wkhtmltopdfの次どうするか問題2026
willnet
2
1.5k
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
500
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
3.4k
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.8k
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
7.5k
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
700
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2k
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
400
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
600
Six Lessons from altMBA
skipperchong
29
4.5k
A Modern Web Designer's Workflow
chriscoyier
699
190k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
The Curse of the Amulet
leimatthew05
3
15k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
360
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