learning kubernetes by minikube, 4

playing with labels

create helloworld-pod-with-labels.yaml
notice the labels part, you can define labels when deploy via yaml file. or you can use kubectl labels to change running object labels.

apiVersion: v1
kind: Pod
metadata:
  name: helloworld
  labels:
    env: production
    author: karthequian
    application_type: ui
    release-version: "1.0"
spec:
  containers:
  - name: helloworld
    image: karthequian/helloworld:latest

create sample-infrastructure-with-labels.yaml

apiVersion: v1
kind: Pod
metadata:
  name: homepage-dev
  labels:
    env: development
    dev-lead: karthik
    team: web
    application_type: ui
    release-version: "12.0"
spec:
  containers:
  - name: helloworld
    image: karthequian/helloworld:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: homepage-staging
  labels:
    env: staging
    team: web
    dev-lead: karthik
    application_type: ui
    release-version: "12.0"
spec:
  containers:
  - name: helloworld
    image: karthequian/helloworld:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: homepage-prod
  labels:
    env: production
    team: web
    dev-lead: karthik
    application_type: ui
    release-version: "12.0"
spec:
  containers:
  - name: helloworld
    image: karthequian/helloworld:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: login-dev
  labels:
    env: development
    team: auth
    dev-lead: jim
    application_type: api
    release-version: "1.0"
spec:
  containers:
  - name: login
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: login-staging
  labels:
    env: staging
    team: auth
    dev-lead: jim
    application_type: api
    release-version: "1.0"
spec:
  containers:
  - name: login
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: login-prod
  labels:
    env: production
    team: auth
    dev-lead: jim
    application_type: api
    release-version: "1.0"
spec:
  containers:
  - name: login
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: cart-dev
  labels:
    env: development
    team: ecommerce
    dev-lead: carisa
    application_type: api
    release-version: "1.0"
spec:
  containers:
  - name: cart
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: cart-staging
  labels:
    env: staging
    team: ecommerce
    dev-lead: carisa
    application_type: api
    release-version: "1.0"
spec:
  containers:
  - name: cart
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: cart-prod
  labels:
    env: production
    team: ecommerce
    dev-lead: carisa
    application_type: api
    release-version: "1.0"
spec:
  containers:
  - name: cart
    image: karthequian/ruby:latest
---

apiVersion: v1
kind: Pod
metadata:
  name: social-dev
  labels:
    env: development
    team: marketing
    dev-lead: carisa
    application_type: api
    release-version: "2.0"
spec:
  containers:
  - name: social
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: social-staging
  labels:
    env: staging
    team: marketing
    dev-lead: marketing
    application_type: api
    release-version: "1.0"
spec:
  containers:
  - name: social
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: social-prod
  labels:
    env: production
    team: marketing
    dev-lead: marketing
    application_type: api
    release-version: "1.0"
spec:
  containers:
  - name: social
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: catalog-dev
  labels:
    env: development
    team: ecommerce
    dev-lead: daniel
    application_type: api
    release-version: "4.0"
spec:
  containers:
  - name: catalog
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: catalog-staging
  labels:
    env: staging
    team: ecommerce
    dev-lead: daniel
    application_type: api
    release-version: "4.0"
spec:
  containers:
  - name: catalog
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: catalog-prod
  labels:
    env: production
    team: ecommerce
    dev-lead: daniel
    application_type: api
    release-version: "4.0"
spec:
  containers:
  - name: catalog
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: quote-dev
  labels:
    env: development
    team: ecommerce
    dev-lead: amy
    application_type: api
    release-version: "2.0"
spec:
  containers:
  - name: quote
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: quote-staging
  labels:
    env: staging
    team: ecommerce
    dev-lead: amy
    application_type: api
    release-version: "2.0"
spec:
  containers:
  - name: quote
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: quote-prod
  labels:
    env: production
    team: ecommerce
    dev-lead: amy
    application_type: api
    release-version: "1.0"
spec:
  containers:
  - name: quote
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: ordering-dev
  labels:
    env: development
    team: purchasing
    dev-lead: chen
    application_type: backend
    release-version: "2.0"
spec:
  containers:
  - name: ordering
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: ordering-staging
  labels:
    env: staging
    team: purchasing
    dev-lead: chen
    application_type: backend
    release-version: "2.0"
spec:
  containers:
  - name: ordering
    image: karthequian/ruby:latest
---
apiVersion: v1
kind: Pod
metadata:
  name: ordering-prod
  labels:
    env: production
    team: purchasing
    dev-lead: chen
    application_type: backend
    release-version: "2.0"
spec:
  containers:
  - name: ordering
    image: karthequian/ruby:latest
---

create deployment

localhost:~ xunyang$ kubectl create -f helloworld-pod-with-labels.yaml 
pod "helloworld" created
localhost:~ xunyang$ kubectl get pod
NAME         READY     STATUS              RESTARTS   AGE
helloworld   0/1       ContainerCreating   0          0s
localhost:~ xunyang$ kubectl get pod
NAME         READY     STATUS    RESTARTS   AGE
helloworld   1/1       Running   0          2s

check labels

localhost:~ xunyang$ kubectl get pods --show-labels
NAME         READY     STATUS    RESTARTS   AGE       LABELS
helloworld   1/1       Running   0          24s       application_type=ui,author=karthequian,env=production,release-version=1.0

add label

localhost:~ xunyang$ kubectl label pod/helloworld app=helloworld
pod "helloworld" labeled
localhost:~ xunyang$ kubectl get pods --show-labels
NAME         READY     STATUS    RESTARTS   AGE       LABELS
helloworld   1/1       Running   0          7m        app=helloworld,application_type=ui,author=karthequian,env=production,release-version=1.0

change lable data

localhost:~ xunyang$ kubectl label pod/helloworld app=helloxunyang
error: 'app' already has a value (helloworld), and --overwrite is false
localhost:~ xunyang$ kubectl label pod/helloworld app=helloxunyang --overwrite
pod "helloworld" labeled
localhost:~ xunyang$ kubectl get pods --show-labels
NAME         READY     STATUS    RESTARTS   AGE       LABELS
helloworld   1/1       Running   0          8m        app=helloxunyang,application_type=ui,author=karthequian,env=production,release-version=1.0

delete label

localhost:~ xunyang$ kubectl label pod/helloworld app-
pod "helloworld" labeled
localhost:~ xunyang$ kubectl get pods --show-labels
NAME         READY     STATUS    RESTARTS   AGE       LABELS
helloworld   1/1       Running   0          8m        application_type=ui,author=karthequian,env=production,release-version=1.0

Search labels

create deployment

localhost:~ xunyang$ kubectl create -f sample-infrastructure-with-labels.yaml 
pod "homepage-dev" created
pod "homepage-staging" created
pod "homepage-prod" created
pod "login-dev" created
pod "login-staging" created
pod "login-prod" created
pod "cart-dev" created
pod "cart-staging" created
pod "cart-prod" created
pod "social-dev" created
pod "social-staging" created
pod "social-prod" created
pod "catalog-dev" created
pod "catalog-staging" created
pod "catalog-prod" created
pod "quote-dev" created
pod "quote-staging" created
pod "quote-prod" created
pod "ordering-dev" created
pod "ordering-staging" created
pod "ordering-prod" created

raw data

localhost:~ xunyang$ kubectl get pods --show-labels
NAME               READY     STATUS    RESTARTS   AGE       LABELS
cart-dev           1/1       Running   0          3m        application_type=api,dev-lead=carisa,env=development,release-version=1.0,team=ecommerce
cart-prod          1/1       Running   0          3m        application_type=api,dev-lead=carisa,env=production,release-version=1.0,team=ecommerce
cart-staging       1/1       Running   0          3m        application_type=api,dev-lead=carisa,env=staging,release-version=1.0,team=ecommerce
catalog-dev        1/1       Running   0          3m        application_type=api,dev-lead=daniel,env=development,release-version=4.0,team=ecommerce
catalog-prod       1/1       Running   0          3m        application_type=api,dev-lead=daniel,env=production,release-version=4.0,team=ecommerce
catalog-staging    1/1       Running   0          3m        application_type=api,dev-lead=daniel,env=staging,release-version=4.0,team=ecommerce
helloworld         1/1       Running   0          18m       application_type=ui,author=karthequian,env=production,release-version=1.0
homepage-dev       1/1       Running   0          3m        application_type=ui,dev-lead=karthik,env=development,release-version=12.0,team=web
homepage-prod      1/1       Running   0          3m        application_type=ui,dev-lead=karthik,env=production,release-version=12.0,team=web
homepage-staging   1/1       Running   0          3m        application_type=ui,dev-lead=karthik,env=staging,release-version=12.0,team=web
login-dev          1/1       Running   0          3m        application_type=api,dev-lead=jim,env=development,release-version=1.0,team=auth
login-prod         1/1       Running   0          3m        application_type=api,dev-lead=jim,env=production,release-version=1.0,team=auth
login-staging      1/1       Running   0          3m        application_type=api,dev-lead=jim,env=staging,release-version=1.0,team=auth
ordering-dev       1/1       Running   0          2m        application_type=backend,dev-lead=chen,env=development,release-version=2.0,team=purchasing
ordering-prod      1/1       Running   0          2m        application_type=backend,dev-lead=chen,env=production,release-version=2.0,team=purchasing
ordering-staging   1/1       Running   0          2m        application_type=backend,dev-lead=chen,env=staging,release-version=2.0,team=purchasing
quote-dev          1/1       Running   0          3m        application_type=api,dev-lead=amy,env=development,release-version=2.0,team=ecommerce
quote-prod         1/1       Running   0          3m        application_type=api,dev-lead=amy,env=production,release-version=1.0,team=ecommerce
quote-staging      1/1       Running   0          3m        application_type=api,dev-lead=amy,env=staging,release-version=2.0,team=ecommerce
social-dev         1/1       Running   0          3m        application_type=api,dev-lead=carisa,env=development,release-version=2.0,team=marketing
social-prod        1/1       Running   0          3m        application_type=api,dev-lead=marketing,env=production,release-version=1.0,team=marketing
social-staging     1/1       Running   0          3m        application_type=api,dev-lead=marketing,env=staging,release-version=1.0,team=marketing

You can search for labels with the flag --selector (or -l).

localhost:~ xunyang$ kubectl get pods --selector env=production
NAME            READY     STATUS    RESTARTS   AGE
cart-prod       1/1       Running   0          3m
catalog-prod    1/1       Running   0          3m
helloworld      1/1       Running   0          18m
homepage-prod   1/1       Running   0          3m
login-prod      1/1       Running   0          3m
ordering-prod   1/1       Running   0          3m
quote-prod      1/1       Running   0          3m
social-prod     1/1       Running   0          3m
localhost:~ xunyang$ kubectl get pods -l env=production
NAME            READY     STATUS    RESTARTS   AGE
cart-prod       1/1       Running   0          3m
catalog-prod    1/1       Running   0          3m
helloworld      1/1       Running   0          18m
homepage-prod   1/1       Running   0          3m
login-prod      1/1       Running   0          3m
ordering-prod   1/1       Running   0          3m
quote-prod      1/1       Running   0          3m
social-prod     1/1       Running   0          3m

condition search,
=
!=
in
notin

localhost:~ xunyang$ kubectl get pods -l dev-lead=karthik
NAME               READY     STATUS    RESTARTS   AGE
homepage-dev       1/1       Running   0          4m
homepage-prod      1/1       Running   0          4m
homepage-staging   1/1       Running   0          4m
localhost:~ xunyang$ kubectl get pods -l dev-lead=karthik,env=staging
NAME               READY     STATUS    RESTARTS   AGE
homepage-staging   1/1       Running   0          4m
localhost:~ xunyang$ kubectl get pods -l dev-lead!=karthik,env=staging
NAME               READY     STATUS    RESTARTS   AGE
cart-staging       1/1       Running   0          5m
catalog-staging    1/1       Running   0          5m
login-staging      1/1       Running   0          5m
ordering-staging   1/1       Running   0          5m
quote-staging      1/1       Running   0          5m
social-staging     1/1       Running   0          5m
localhost:~ xunyang$ kubectl get pods -l 'release-version in (1.0,2.0)'
NAME               READY     STATUS    RESTARTS   AGE
cart-dev           1/1       Running   0          5m
cart-prod          1/1       Running   0          5m
cart-staging       1/1       Running   0          5m
helloworld         1/1       Running   0          20m
login-dev          1/1       Running   0          5m
login-prod         1/1       Running   0          5m
login-staging      1/1       Running   0          5m
ordering-dev       1/1       Running   0          5m
ordering-prod      1/1       Running   0          5m
ordering-staging   1/1       Running   0          5m
quote-dev          1/1       Running   0          5m
quote-prod         1/1       Running   0          5m
quote-staging      1/1       Running   0          5m
social-dev         1/1       Running   0          5m
social-prod        1/1       Running   0          5m
social-staging     1/1       Running   0          5m
localhost:~ xunyang$ kubectl get pods -l 'release-version in (1.0,4.0)'
NAME              READY     STATUS    RESTARTS   AGE
cart-dev          1/1       Running   0          5m
cart-prod         1/1       Running   0          5m
cart-staging      1/1       Running   0          5m
catalog-dev       1/1       Running   0          5m
catalog-prod      1/1       Running   0          5m
catalog-staging   1/1       Running   0          5m
helloworld        1/1       Running   0          20m
login-dev         1/1       Running   0          5m
login-prod        1/1       Running   0          5m
login-staging     1/1       Running   0          5m
quote-prod        1/1       Running   0          5m
social-prod       1/1       Running   0          5m
social-staging    1/1       Running   0          5m
ocalhost:~ xunyang$ kubectl get pods -l "release-version in (1.0,2.0),team in (marketing,ecommerce)"
NAME             READY     STATUS    RESTARTS   AGE
cart-dev         1/1       Running   0          6m
cart-prod        1/1       Running   0          6m
cart-staging     1/1       Running   0          6m
quote-dev        1/1       Running   0          6m
quote-prod       1/1       Running   0          6m
quote-staging    1/1       Running   0          6m
social-dev       1/1       Running   0          6m
social-prod      1/1       Running   0          6m
social-staging   1/1       Running   0          6m
localhost:~ xunyang$ kubectl get pods -l 'release-version notin (1.0,2.0)'
NAME              READY     STATUS    RESTARTS   AGE
catalog-dev       1/1       Running   1          12m
catalog-prod      1/1       Running   1          12m
catalog-staging   1/1       Running   1          12m

labels will also work with kubectl get services/deployments/all --show-labels and will return labels for your services, deployments or all objects.

localhost:~ xunyang$ kubectl get all --show-labels
NAME               READY     STATUS    RESTARTS   AGE       LABELS
cart-dev           1/1       Running   0          8m        application_type=api,dev-lead=carisa,env=development,release-version=1.0,team=ecommerce
cart-prod          1/1       Running   0          8m        application_type=api,dev-lead=carisa,env=production,release-version=1.0,team=ecommerce
cart-staging       1/1       Running   0          8m        application_type=api,dev-lead=carisa,env=staging,release-version=1.0,team=ecommerce
catalog-dev        1/1       Running   0          8m        application_type=api,dev-lead=daniel,env=development,release-version=4.0,team=ecommerce
catalog-prod       1/1       Running   0          8m        application_type=api,dev-lead=daniel,env=production,release-version=4.0,team=ecommerce
catalog-staging    1/1       Running   0          8m        application_type=api,dev-lead=daniel,env=staging,release-version=4.0,team=ecommerce
helloworld         1/1       Running   0          23m       application_type=ui,author=karthequian,env=production,release-version=1.0
homepage-dev       1/1       Running   0          8m        application_type=ui,dev-lead=karthik,env=development,release-version=12.0,team=web
homepage-prod      1/1       Running   0          8m        application_type=ui,dev-lead=karthik,env=production,release-version=12.0,team=web
homepage-staging   1/1       Running   0          8m        application_type=ui,dev-lead=karthik,env=staging,release-version=12.0,team=web
login-dev          1/1       Running   0          8m        application_type=api,dev-lead=jim,env=development,release-version=1.0,team=auth
login-prod         1/1       Running   0          8m        application_type=api,dev-lead=jim,env=production,release-version=1.0,team=auth
login-staging      1/1       Running   0          8m        application_type=api,dev-lead=jim,env=staging,release-version=1.0,team=auth
ordering-dev       1/1       Running   0          8m        application_type=backend,dev-lead=chen,env=development,release-version=2.0,team=purchasing
ordering-prod      1/1       Running   0          8m        application_type=backend,dev-lead=chen,env=production,release-version=2.0,team=purchasing
ordering-staging   1/1       Running   0          8m        application_type=backend,dev-lead=chen,env=staging,release-version=2.0,team=purchasing
quote-dev          1/1       Running   0          8m        application_type=api,dev-lead=amy,env=development,release-version=2.0,team=ecommerce
quote-prod         1/1       Running   0          8m        application_type=api,dev-lead=amy,env=production,release-version=1.0,team=ecommerce
quote-staging      1/1       Running   0          8m        application_type=api,dev-lead=amy,env=staging,release-version=2.0,team=ecommerce
social-dev         1/1       Running   0          8m        application_type=api,dev-lead=carisa,env=development,release-version=2.0,team=marketing
social-prod        1/1       Running   0          8m        application_type=api,dev-lead=marketing,env=production,release-version=1.0,team=marketing
social-staging     1/1       Running   0          8m        application_type=api,dev-lead=marketing,env=staging,release-version=1.0,team=marketing

you can delete pods, services or deployments by label as well! For example kubectl delete pods -l dev-lead=karthik will delete all pods who's dev-lead was Karthik.

localhost:~ xunyang$ kubectl delete pods -l dev-lead=karthik
pod "homepage-dev" deleted
pod "homepage-prod" deleted
pod "homepage-staging" deleted

clear data

kubectl delete pod --all

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,314评论 19 139
  • Kubernetes部属说明 环境准备 资料准备 开始部属 编写yaml文件,用于部属Kubenetes基础容器e...
    俊逸之光阅读 7,528评论 2 0
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 12,136评论 0 10
  • 采铜的《精进》无疑在2016年很火的一本实用型学习工具书。每个人读采铜老师的书可能都有不一样的感觉吧,但到底是狗皮...
    禾十三阅读 3,199评论 0 3
  • 昨年, 相见欢。 我容颜, 只为君倾城。 今夜, 不经意入你怀。 一眼流连, 我逃不脱你柔情的注视, 情根深种。 ...
    素颜之爱情独角戏阅读 2,860评论 0 0