SlideShare a Scribd company logo
2018/5/30
佐々木 健
「入門Kubernetes」輪読会
6章
Label と Annotation
この文書について
毎週水曜日にDMM社内で開催されている輪読会の
資料です。
30分の枠で、みんなでちょっとずつ読んでいくぞ。
今までの振り返り
1章: Kubernetesの概要
2章: Dockerの説明
3章: Kubernetesクラスタの作り方
4章: Kubernetes API、kubectlコマンドの説明
5章: Podの説明
今日の内容(目次)
6章: Label と Annotation
●
6.1 Label
●
6.1.1Labelの適用
●
6.1.2Labelの変更
●
6.1.3Labelセレクタ
●
6.1.4APIオブジェクト内のLabelセレクタ
●
6.2 Annotation
●
6.2.1Annotationの定義
●
6.3 後片付け
●
6.4 まとめ
今日の内容(ゴール)
●
Label 機能について学ぶ
●
Label機能の目的
●
オブジェクトのグループ化ができる
●
一覧表示、操作
●
Labelの使い方
●
Annotation機能について学ぶ
●
Annotation機能の目的
●
オブジェクトに対するメタデータ付与
●
Annotationの使い方
●
Labelとの使いわけ
6章 イントロ
●
Kuberenetesはアプリケーションが大きく複雑に
なっても、うまく管理するための機能が用意され
ている。
●
沢山のKubernetesオブジェクトをグルーピングするため
のLabel機能
●
個々のKubernetesオブジェクトに追加情報を付与する
Annotation機能
6.1 Label (目的)
●
Labelはどういう目的で作られたか?
●
巨大なアプリケーションを動かしてきたGoogleの経験か
ら生まれてきたもの。
●
詳しくは「SRE本」を読め、とのこと。
●
どこが該当するか良くわからんかったけどまあ全体なのかしら?
●
本番環境においては、1つしか作らない、ということは
まずない。なので1つずつ管理するこということはせず
に、まとめて管理したい。
●
階層構造はうまく機能しない。フラットに管理したい。
6.1 Label (構造1)
●
キーと値(key、value)のペア。
●
Kubernetesオブジェクトに付与する。
●
1つのオブジェクトに、Labelは複数付与できる。
6.1 Label (構造2)
●
キーと値はどちらも文字列
●
キーは、プレフィックス(オプション)+名前
●
プレフィックスはDNSサブドメイン
●
プレフィックスはオプションなのでなくても良い
●
プレフィックス長は253文字以内
●
プレフィックスと名前の間の区切りは”/”
●
名前は63文字以内
●
先頭と末尾は必ずアルファベット文字列か数字
●
途中は、”-”、”_”、”.” を使っても良い
●
値は63文字以内の文字列
●
使っていい文字列は名前と一緒
6.1 Label に関する情報
●
https://kubernetes.io/docs/concepts/overvie
w/working-with-objects/labels/
Motivation
Labels enable users to map their own organizational structures onto system objects
in a loosely coupled fashion, without requiring clients to store these mappings.
Service deployments and batch processing pipelines are often multi-dimensional
entities (e.g., multiple partitions or deployments, multiple release tracks, multiple
tiers, multiple micro-services per tier). Management often requires cross-cutting
operations, which breaks encapsulation of strictly hierarchical representations,
especially rigid hierarchies determined by the infrastructure rather than by users.
表6.1 Labelの例
キー 値
acme.com/app-version 1.0.0
appVersion 1.0.0
app.version 1.0.0
kubernetes.io/cluster-service true
6.1.1 に進む前の準備
●
6.1.1から先は実際に、kubectlコマンドを使って
LabelやAnnotationを操作していく。
●
なので、kubectlコマンドを動かせる環境は用意
しておく必要がある。
●
詳しくは、3章を参考のこと
●
Google Cloud Platform を使うのがやっぱり楽ちん
ちょっと目をつぶること
●
Deployment という機能が、しれっと出てくる。
●
バージョンのリリース管理に使われる機能
●
Podの集まりを作成できる
●
詳しくは12章
●
この章では、Deploymentオブジェクトに、Labelを付けていく、
という例で使われている。
●
ReplicaSet という機能も、しれっと出てくる。
●
Podのレプリカを簡単に管理する機能
●
詳しくは8章
6.1.1 Labelの適用
●
Labelを付けたDeployment を作成する。
●
alpaca、banbicoot という2つのアプリケーションを作る
●
それぞれ別の環境に置く
●
バージョンもそれぞれ2つ作る
6.1.1 具体的なコマンド
kubectl run alpaca-prod 
--image=gcr.io/kaur-demo/kuard-amd64:1 
--replicas=2 
--labels="ver=1,app=alpaca,env=prod"
kubectl run alpaca-test 
--image=gcr.io/kaur-demo/kuard-amd64:2 
--replicas=1 
--labels="ver=2,app=alpaca,env=test"
kubectl run bandicoot-prod 
--image=gcr.io/kaur-demo/kuard-amd64:2 
--replicas=2 
--labels="ver=2,app=bandicoot,env=prod"
kubectl run bandicoot-staging 
--image=gcr.io/kaur-demo/kuard-amd64:2 
--replicas=1 
--labels="ver=2,app=bandicoot,env=staging"
●
4つのアプリケーショ
ンを作っている
●
紫のところが上と異
なるところ。
(余談) オブジェクト定義の行数
% kubectl get deployments -o=yaml | wc
246 458 6524
% kubectl get pods -o=yaml | wc
576 1180 18365
●
オブジェクトの定義をyamlで吐き出してみると、
結構な行数になっているのがわかる。
(余談) Yamlを眺める
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
.....
labels:
app: alpaca
canary: "true"
env: test
ver: "2"
.....
spec:
replicas: 2
selector:
matchLabels:
app: alpaca
env: prod
ver: "1"
.....
.....
●
こんな感じで定義さ
れる。
●
metadataの中で定
義されている。
●
selectorの中にも定
義される。
Labelを見る
% kubectl get deployments --show-labels
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE LABELS
alpaca-prod 2 2 2 0 22h app=alpaca,env=prod,ver=1
alpaca-test 1 1 1 0 22h app=alpaca,env=test,ver=2
bandicoot-prod 2 2 2 0 22h app=bandicoot,env=prod,ver=2
bandicoot-staging 1 1 1 0 22h app=bandicoot,env=staging,ver=2
●
Deploymentオブジェクト毎にLabelが付けられて
いるのがわかる。
特定のLabelの値を見る (6.1.2)
% kubectl get deployments -L app
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE APP
alpaca-prod 2 2 2 0 22h alpaca
alpaca-test 1 1 1 0 22h alpaca
bandicoot-prod 2 2 2 0 22h bandicoot
bandicoot-staging 1 1 1 0 22h bandicoot
●
-L オプションで見ることができる
PodのLabelはどうなってる?(6.1.3)
% kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
alpaca-prod-5d649f7444-864f7 0/1 ImagePullBackOff 0 22h app=alpaca,env=prod,pod-template-
hash=1820593000,ver=1
alpaca-prod-5d649f7444-8h2nc 0/1 ImagePullBackOff 0 22h app=alpaca,env=prod,pod-template-
hash=1820593000,ver=1
alpaca-test-b5ddbb4db-7xwvk 0/1 ImagePullBackOff 0 22h app=alpaca,env=test,pod-template-hash=618866086,ver=2
bandicoot-prod-56f8f74f8b-jg7ss 0/1 ImagePullBackOff 0 22h app=bandicoot,env=prod,pod-template-
hash=1294930946,ver=2
bandicoot-prod-56f8f74f8b-wmq8h 0/1 ImagePullBackOff 0 22h app=bandicoot,env=prod,pod-template-
hash=1294930946,ver=2
bandicoot-staging-84bb77d6-8585q 0/1 ErrImagePull 0 22h app=bandicoot,env=staging,pod-template-
hash=40663382,ver=2
●
DeploymentオブジェクトのLabelが継承されている。
●
Replica分、Podが複製されている。
●
pod-template-hashというLabelはDeploymentによって付けられ
たもので、どのテンプレートからPodが作成されたのかを追跡でき
るようにしている。
6.1.2 Labelの変更
% kubectl label deployments alpaca-test "canary=true"
deployment "alpaca-test" labeled
% kubectl label deployments alpaca-test "canary-"
deployment "alpaca-test" labeled
●
作成後もLabelを追加したり修正したりできる。
●
削除はLavelの「キー」の末尾に”-”を付ける
●
本では値の末尾って書いてあるけど多分間違い
6.1.3 Labelセレクタ
●
Labelを付けるのは、オブジェクトをグルーピング
するため
●
複数のオブジェクトから、該当するグループのオ
ブジェクトを操作したり、指定したり、関連付けし
たりするために使う。
●
kubectl コマンドでは --selector フラグを使って
指定することができる。
●
特定のグループだけ削除、みたいなこともできる。
●
-l オプションでもだいたいOK。
具体例1
% kubectl get pods --selector="ver=2"
NAME READY STATUS RESTARTS AGE
alpaca-test-b5ddbb4db-7xwvk 0/1 ImagePullBackOff 0 1d
bandicoot-prod-56f8f74f8b-jg7ss 0/1 ImagePullBackOff 0 1d
bandicoot-prod-56f8f74f8b-wmq8h 0/1 ImagePullBackOff 0 1d
bandicoot-staging-84bb77d6-8585q 0/1 ImagePullBackOff 0 1d
具体例2
% kubectl get pods --selector="app in (alpaca,bandicoot)"
NAME READY STATUS RESTARTS AGE
alpaca-prod-5d649f7444-864f7 0/1 ImagePullBackOff 0 1d
alpaca-prod-5d649f7444-8h2nc 0/1 ImagePullBackOff 0 1d
alpaca-test-b5ddbb4db-7xwvk 0/1 ImagePullBackOff 0 1d
bandicoot-prod-56f8f74f8b-jg7ss 0/1 ImagePullBackOff 0 1d
bandicoot-prod-56f8f74f8b-wmq8h 0/1 ImagePullBackOff 0 1d
bandicoot-staging-84bb77d6-8585q 0/1 ImagePullBackOff 0 1d
具体例3
% kubectl label deployments alpaca-test "canary=true"
deployment "alpaca-test" labeled
% kubectl get deployments --selector="canary"
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
alpaca-test 1 1 1 0 1d
表6.2 セレクタで使える演算子
演算子 説明
key=value key は value である
key!=value key は value ではない
key in (value1, value2) key は value1 か value2 のどちらかである
key notin (value1, value2) key は value1 と value2 のどちらでもない
key keyが設定されている
!key keyが設定されていない
6.1.4 APIオブジェクト内の
Labelセレクタ
●
Kuberenetsオブジェクトが他のKubernetesオブ
ジェクトを参照する際にもLabelセレクタが使わ
れる。
●
Labelセレクタは単純な文字列表現だけでなく、
パース可能な構造体でも表現できる。
(再掲) Yamlを眺める
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
.....
labels:
app: alpaca
canary: "true"
env: test
ver: "2"
.....
spec:
replicas: 2
selector:
matchLabels:
app: alpaca
env: prod
ver: "1"
.....
.....
●
Labelはこういうオブ
ジェクト構造になって
いる。
●
selectorの定義が書
かれているが、これ
は単純な文字列表現
の例
パース可能な構造体で書かれた例
selector:
matchLabels:
app: alpaca
matchExpressions:
- {key: ver, operator: In, values: [1,2]}
●
app=alpaca, ver in (1,2)
●
これは以下のように表現できる
6.2 Annotation
●
Annotationはツールやライブラリを手助けするた
めのメタデータ置き場
●
オブジェクトに関連する情報をなんでも付与でき
る。
●
Kubernetesのいろいろな機能で使われている。
●
ただし、Labelと違ってセレクタ的な使い方はでき
ない。
6.2 Annotation に関する情報
●
https://kubernetes.io/docs/concepts/overvie
w/working-with-objects/annotations/
Attaching metadata to objects
You can use either labels or annotations to attach metadata to Kubernetes objects.
Labels can be used to select objects and to find collections of objects that satisfy
certain conditions. In contrast, annotations are not used to identify and select objects.
The metadata in an annotation can be small or large, structured or unstructured, and
can include characters not permitted by labels.
6.2.1 Annotationの定義
●
Labelと同じフォーマットを使用できる。
●
値の部分はフリーフォーマット。Labelと違って柔
軟性は高い
●
バリデーションはされない。
kubectlでAnnotationの設定
% kubectl annotate deployments alpaca-test description='hogehoge'
deployment "alpaca-test" annotated
% kubectl annotate deployments alpaca-test description-
deployment "alpaca-test" annotated
●
labelコマンドを同じように annotate で設定できる
●
削除は「キー」の末尾に”-”を付ける
Yaml内のAnnotation表現
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
description: hogehoge
6.3 後片付け
●
kubectl delete deployment --all
6.4 まとめ
●
LabelとAnnotationについて学んだ。
●
グルーピングにはLabelを便利に使いましょう。
●
オブジェクト間で参照するためのセレクタという仕組みもある
●
オブジェクトにメタデータを付与するためには
Annotationをうまく使いましょう。
●
Label、Annotationをうまく使うと、Kubernetesはよ
り柔軟に使うことができる。
●
自動化、ワークフロー構築、等で便利
今回のセクションの感想
●
やっぱりこの本、説明がいまいちな感がある。
●
説明が下手だったり妙なジャンプがあったり、1人で読んでたら心が
折れる気がした。
●
Kubernetesは概念とか用語をすぐには理解しにくいので、とりあえ
ずいじってみつつ、適当にリファレンスを見ていく、みたいな勉強方
法が良いのかなあ。
●
でもまあ、Kubernetesは考え方がエレガントで良くできてるなあ、
とは今回も思った。
●
すべてがオブジェクト、APIを使ってやりとりをする、APIを気軽に叩くために
kubectl がある、環境ができちゃえばサクサクいじれる、等々、いろいろ格
好良い。
おしまい

More Related Content

PDF
qmake入門
PDF
Grailsのススメ(仮)
PDF
マイクロサービス時代の生存戦略 with HashiCorp
PDF
インフラエンジニアのためのRancherを使ったDocker運用入門
PDF
GKEで半年運用してみた
PPTX
Jenkins x Kubernetesが簡単だと思ったら大変だった話
PPTX
Heap statsfx analyzer
PDF
Dockerイメージ管理の内部構造
qmake入門
Grailsのススメ(仮)
マイクロサービス時代の生存戦略 with HashiCorp
インフラエンジニアのためのRancherを使ったDocker運用入門
GKEで半年運用してみた
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Heap statsfx analyzer
Dockerイメージ管理の内部構造

What's hot (19)

ODP
20130329 rtm4
PDF
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
PDF
Head toward Java 16 (Night Seminar Edition)
PPTX
jcmd をさわってみよう
PDF
Gradle a new Generation Build Tool
PDF
試して学べるクラウド技術! OpenShift
PDF
普通のRailsアプリをdockerで本番運用する知見
PDF
Docker + Checkpoint/Restore
PDF
Docker 17.06 Updates 最近何が変わったの?
PDF
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
PDF
jjugccc2018 app review postmortem
PDF
はじめての CircleCI
PDF
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
PDF
Re: 運用に自動化を求めるのは間違っているだろうか
PDF
TectonicはKubernetesの構築・管理基盤である -概要の章-/-構築の章-
PPTX
Dockerの基本的な話
PDF
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
PDF
Docker技術情報アップデート 2015年7月号
PDF
Dockerを活用したリクルートグループ開発基盤の構築
20130329 rtm4
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
Head toward Java 16 (Night Seminar Edition)
jcmd をさわってみよう
Gradle a new Generation Build Tool
試して学べるクラウド技術! OpenShift
普通のRailsアプリをdockerで本番運用する知見
Docker + Checkpoint/Restore
Docker 17.06 Updates 最近何が変わったの?
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
jjugccc2018 app review postmortem
はじめての CircleCI
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Re: 運用に自動化を求めるのは間違っているだろうか
TectonicはKubernetesの構築・管理基盤である -概要の章-/-構築の章-
Dockerの基本的な話
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
Docker技術情報アップデート 2015年7月号
Dockerを活用したリクルートグループ開発基盤の構築
Ad

Similar to 「入門Kubernetes」輪読会資料 6章 (20)

PDF
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
PDF
Kubernetes Meetup Tokyo #23 kubebuilder-v2
ODP
130329 04
PDF
はてなにおける継続的デプロイメントの現状と Docker の導入
PPTX
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
PPTX
Japan Container Day 2018
PDF
今だからこそ知りたい Docker Compose/Swarm 入門
PDF
Rookの基礎・バージョンアップ
PDF
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
PDF
Dockerイメージの理解とコンテナのライフサイクル
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PPTX
Kubernetes超入門 with java
PDF
kube-system落としてみました
PDF
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
PPTX
Introduction of skippbox
PDF
これから始めるAzure Kubernetes Service入門
PPTX
AKS と ACI を組み合わせて使ってみた
PDF
2015-01-27 Introduction to Docker
PDF
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
PDF
tcpdump & xtrabackup @ MySQL Casual Talks #1
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
Kubernetes Meetup Tokyo #23 kubebuilder-v2
130329 04
はてなにおける継続的デプロイメントの現状と Docker の導入
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Japan Container Day 2018
今だからこそ知りたい Docker Compose/Swarm 入門
Rookの基礎・バージョンアップ
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
Dockerイメージの理解とコンテナのライフサイクル
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Kubernetes超入門 with java
kube-system落としてみました
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Introduction of skippbox
これから始めるAzure Kubernetes Service入門
AKS と ACI を組み合わせて使ってみた
2015-01-27 Introduction to Docker
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ad

More from Ken SASAKI (20)

PDF
業務改善できるかな?
PDF
ステマネのお仕事
PDF
The Internet Situation in Myanmar
PDF
世界のインターネット ミャンマー編
PDF
さくらインターネット西新宿セミナールームと私
PDF
インターネットの仕組み enPiT資料
PDF
通販チャレンジ ミャンマー編
PDF
槓の光 for ssmonline #4
PDF
リモートスクラム開発のノウハウ
PDF
私が好きなITコミュニティイベント
PDF
リモートスクラム開発やってみた
PDF
Wi-Fiのイマ Internet Week 2019 発表資料
PDF
中国のネットワーク勉強会 JANOG44野良BoF資料
PDF
ダイビングのすゝめ
PDF
監視 〜 ネットワーク勉強会資料
PDF
オーケストラと&オーケストレーション
PDF
RFC 〜 ネットワーク勉強会
PDF
各種ネットワーク機器と最近の技術動向 〜 ネットワーク勉強会
PDF
TCP 〜 ネットワーク勉強会資料
PDF
プロトコル/NAT/HTTP通信の中身 〜 ネットワーク勉強会資料
業務改善できるかな?
ステマネのお仕事
The Internet Situation in Myanmar
世界のインターネット ミャンマー編
さくらインターネット西新宿セミナールームと私
インターネットの仕組み enPiT資料
通販チャレンジ ミャンマー編
槓の光 for ssmonline #4
リモートスクラム開発のノウハウ
私が好きなITコミュニティイベント
リモートスクラム開発やってみた
Wi-Fiのイマ Internet Week 2019 発表資料
中国のネットワーク勉強会 JANOG44野良BoF資料
ダイビングのすゝめ
監視 〜 ネットワーク勉強会資料
オーケストラと&オーケストレーション
RFC 〜 ネットワーク勉強会
各種ネットワーク機器と最近の技術動向 〜 ネットワーク勉強会
TCP 〜 ネットワーク勉強会資料
プロトコル/NAT/HTTP通信の中身 〜 ネットワーク勉強会資料

「入門Kubernetes」輪読会資料 6章