Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kubernetes入門#3 About ConfigMap and Secret / Kub...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
hi-rose
March 22, 2019
Technology
620
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kubernetes入門#3 About ConfigMap and Secret / Kubernetes Getting Started#3
hi-rose
March 22, 2019
More Decks by hi-rose
See All by hi-rose
20231118_過去の叡智から学ぶ効率的なアウトプット術
hirose39
0
160
Kubernetes入門#5 The pod resource and QoS / Kubernetes Getting Started#5
hirose39
1
360
Kubernetes入門#4 About Kubernetes Uses With GKE & EKS
hirose39
1
360
Kubernetes入門#2 CronJob / Kubernetes Getting Started#2 CronJob
hirose39
1
590
Kubernetes入門#1 運用例の紹介 / Kubernetes Getting Started#1 Case Introduction for k8ssa
hirose39
0
300
Other Decks in Technology
See All in Technology
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
20260619 私の日常業務での生成 AI 活用
masaruogura
1
230
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
130
Bucharest Tech Week 2026 - Guardians of the Cloud-Native Galaxy
edeandrea
PRO
0
120
ザ・データベース、MySQL ~ OSC 2026 Sendai ~
sakaik
0
120
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.5k
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
140
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
4
2.5k
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
220
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
270
200個のGitHubリポジトリを横断調査したかった
icck
0
130
失敗を資産に変えるClaude Code
shinyasaita
0
710
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
260
Faster Mobile Websites
deanohume
310
31k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
600
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Between Models and Reality
mayunak
4
340
We Are The Robots
honzajavorek
0
250
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
750
The untapped power of vector embeddings
frankvandijk
2
1.8k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Color Theory Basics | Prateek | Gurzu
gurzu
0
370
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
Transcript
Kubernetes Sapporo for Beginners Kubernetes 入門 #3 ~ ハンズオン:設定をConfigMap/Secretとして登録しよう~
Kubernetes Sapporo for Beginners 自己紹介 廣瀬 亮輔(Ryosuke Hirose)/@hi-rose • 旭川高専卒業後、札幌で今の会社に就職してシステム開発 ◦
言語経験:C#、Java、delphiなど ◦ ミドルウェア経験:SQLServer、Oracle、Apache、Tomcatなど • 2017年4月からアーキテクト部署となりクラウドシステムのバックエンド系基盤機能開発に ◦ Kubernetesもそのころから利用 ▪ 普段GCPで使用しているため、 GCP実装ベースでの理解が中心となります ◦ データマイグレーション系サービスのプロジェクトリーダー 2
Kubernetes Sapporo for Beginners 事前準備 注意事項! コマンドは hands-onリポジトリをcloneした場所をカレントディレクトリとして記載しています。 3
Kubernetes Sapporo for Beginners 今日のゴール • ConfigMap/Secretがどんなものかわかるようになる • ConfigMap/Secretを動かして動作を理解する 4
Kubernetes Sapporo for Beginners ConfigMap/Secretについて ConfigMapとは Kubernetes上で設定情報を保持することを目的とするリソースとなります。 Key-Value形式やファイル形式で Kubernetesに登録することが可能です。 Secretとは
基本的な動作はConfigMapと同様ですが、接続情報や証明書ファイルのように、機密情報を取り扱う際に利 用します。 Kubernetes内部の動作として、kubectlを使った時に値が見えにくくなっていたり、 Podへの情報の受け渡し方 法がSSL/TLSを用いて転送されたりと、扱いが変わります。 ※今回はスキーマレスの Opaque Type(Generic)のみを取り扱います。 ConfigMap/Secret共通 1つの定義につき1MBまでという制限があります。 5
Kubernetes Sapporo for Beginners ConfigMap/Secretを使用する理由 ConfigMapやSecretを使用せずにコンテナに対して設定を記述する場合、 1. プログラム内にハードコーディング/設定ファイルとして保持する 2. Dockerビルド時に、設定ファイルや起動スクリプトとしてコンテナイメージに埋め込む
3. Deployment等のKubernetesワークロードのマニフェストファイル内に記述する といった手段が考えられますが、 1. 設定毎にプログラム管理が必要になる 2. 設定毎にコンテナイメージの作成が必要となる 3. 設定の違いによりマニフェストファイルの管理が必要となり煩雑化する といった問題が発生しますし、機密情報を扱うことには適していません。 そのため、環境毎・ワークロード毎に可変となる情報については ConfigMap/Secretで管理すべきと言えま す。 6
Kubernetes Sapporo for Beginners 今回のハンズオン構成 Kubernetesに対して登録したConfigMap/Secretをコンテナ内部の様子を見て確認していきます。 Pod内のコンテナへ情報を受け渡す方法として、環境変数として受け渡すパターンと、ファイルを Volumeとし てマウントするパターンがありますが、その動作の違いについても見ていきます。 7
ConfigMap Secret Kubernetes Master kubectl で反映 Kubernetes Node kubectlで デプロイ Pod 我々 Kubectl exec … echo! ls! Cat! rm! touch!
Kubernetes Sapporo for Beginners Let's ハンズオン1 STEP1.kubectl createコマンドでConfigMapおよび、SecretをKey-Value形式で登録します。 8 $
kubectl create configmap --save-config handson-configmap --from-literal=environment=develop --from-literal=domain=develop.example.jp configmap “handson-configmap” created $ kubectl create secret generic --save-config handson-secret --from-literal=mysql.host=127.0.0.1 --from-literal=mysql.password=p@ssword secret “handson-secret” created 以下の情報をConfigMap指定 environment=develop domain=develop.example.jp 以下の情報をSecret指定 mysql.host=127.0.0.1 mysql.password=p@ssword
Kubernetes Sapporo for Beginners Let's ハンズオン2 STEP2.登録内容を確認します。 9 $ kubectl
describe configmap/handson-configmap Name: handson-configmap Namespace: default Labels: <none> Annotations: (略) Data ==== environment: ---- develop domain: ---- develop.example.jp Events: <none> $ kubectl describe secret/handson-secret Name: handson-secret Namespace: default Labels: <none> Annotations: Type: Opaque Data ==== mysql.host: 9 bytes mysql.password: 8 bytes Secretは内容が 出ない
Kubernetes Sapporo for Beginners Let's ハンズオン3 STEP3.マニフェストファイルから登録します。( 登録内容) 10 $
kubectl apply -f ./Step4-ConfigMap-Secret/secret/handson-secret-file.yaml secret handson-secret-file created STEP4.登録内容を確認します。 $ kubectl get secrets -o json handson-secret-file 略
Kubernetes Sapporo for Beginners Let's ハンズオン4 STEP5.Podをデプロイします。( デプロイ定義) 11 $
kubectl apply -f ./Step4-ConfigMap-Secret/deployment/deployment-alpine.yaml Deployment.apps “alpine” created STEP6.POD名を確認し、EnvFromとして設定した環境変数を確認します。 $ kubectl get pod $ kubectl exec -it 【確認したPOD名】 -- env ~略~ environment=develop domain=develop.example.jp mysql.host=127.0.0.1 mysql.password=p@ssword ~略~ EnvFromに設定した環 境変数がセットされて いる。
Kubernetes Sapporo for Beginners Let's ハンズオン5 STEP7.VolumeマウントしたSecretファイルを確認する。 12 $ kubectl
exec -it 【確認したPOD名】 -- ls /config Base-path-name secret-file.yaml $ kubectl exec -it 【確認したPOD名】 -- cat /config/secret-file.yaml Username: sapporo Password: pass Base64が復号化された状態でマウントされてい る。
Kubernetes Sapporo for Beginners Let's ハンズオン6 STEP8.Volumeマウントされた場所が読み取り専用であることを確認する。 13 $ kubectl
exec -it 【確認したPOD名】 -- rm -rf /config/secret-file.yaml Rm: can’t remove ‘/config/secret-file.yaml’: Read-only file system Command terminated with exit code 1 ConfigMapやSecretでマウントされた場所は読 み取り専用となる。
Kubernetes Sapporo for Beginners Let's ハンズオン7 STEP9.Volumeマウントしているファイルを更新して、 POD内のファイルが更新されることを確認する。( 更新内 容)
14 $ kubectl apply -f ./Step4-ConfigMap-Secret/secret/handson-secret-file-modify.yaml Deployment.apps “alpine” configured $ kubectl exec -it 【確認したPOD名】 -- cat /config/secret-file.yaml Username: sapporo Password: modify 一定期間ごとの更新タイミング(デフォルト 60秒)が過ぎた後にファイルが更新されてい ることがわかる。 環境変数の方は起動時に指定され、 ConfigMap/Secretを更新しても途中更新され ないため注意。
Kubernetes Sapporo for Beginners 後片付け STEP10.以下を実行して作成したリソースを削除する 15 $ kubectl delete
deployment alpine $ kubectl delete configmap handson-configmap $ kubectl delete secret handson-secret handson-secret-file
Kubernetes Sapporo for Beginners 補足:Secretのマニフェストファイル管理について Secretをマニフェストファイルとして管理し、 Git等に登録する場合、デフォルトでは平文 (Base64)での保存とな り、リポジトリに権限がある 管理上問題がある場合、マニフェストファイルを暗号化するための
kubesecというツールを使うことで値部分を 暗号化してマニフェストファイルを管理することができます。 16 Kind: Secret : Data: Id: dXNlcg== Pass: cGFzcw== Kind: Secret : Data: Id: AAAbcC12… Pass: XXyz99… マニフェスト元ファ イル kubesecで暗号 化したファイル この状態で Git管理 Kind: Secret : Data: Id: dXNlcg== Pass: cGFzcw== : マニフェスト元ファ イル Gitから取得後、 Kubernetesに applyする際に kubesecで復号化
Kubernetes Sapporo for Beginners 質疑応答 お聞きいただきありがとうございました。 何でも気軽にご質問くださいませ! 17