3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AKS で Label / Namespace を定義する

Posted at

今回は YAML 定義ファイルを色々いじってみて、以下2点を実施してみようと思います。
①Labels の定義、編集
②Namespace の定義によるリソースの分離
※前回の記事までの環境が構築されていることが前提としています。

#マニュフェストファイルの操作(前回復習)
前回の記事までには、マニュフェストファイルの適用を kubectl apply -f XXXXXXX.yaml で実施し、Web Server にアクセスすることができました。前回のものがそのままかどうかは、kubectl get pod で確認することが出来ます。

miyasaka@Azure:~/Understanding-K8s/chap04$ kubectl get pod
NAME                                   READY   STATUS    RESTARTS   AGE
photoview-deployment-XXXXXXXXX-2b6h4   1/1     Running   0          10m
photoview-deployment-XXXXXXXXX-6xp4t   1/1     Running   0          10m
photoview-deployment-XXXXXXXXX-b94dh   1/1     Running   0          10m
photoview-deployment-XXXXXXXXX-fc4pv   1/1     Running   0          10m
photoview-deployment-XXXXXXXXX-lwsbj   1/1     Running   0          10m

今回はこの マニュフェストファイルで作成した Pod を使用しないので、以下コマンドを実施し、割り振られたリソースを削除しておきます。

kubectl delete -f tutorial-development.yaml
kubectl delete -f tutorial-service.yaml

正しくリソースの削除ができると、デフォルトで設定されている Namespace 内のリソースがなくなります。

miyasaka@Azure:~/Understanding-K8s/chap03$ kubectl get pod
No resources found in default namespace.

ここまでで下準備は完了です。

#Label 定義、編集
次の動作では、ラベルを定義したリソースをマニュフェストファイルから作成します。
以下 YAML ファイルを任意のディレクトリに作成しましょう。

labelsample.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-1
  labels:
    env: test
    app: photo-view
spec:
  containers:
  - image: nginx
    name: photoview-container
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-2
  labels:
    env: test
    app: imagetrain
spec:
  containers:
  - image: nginx
    name: photoview-container
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-3
  labels:
    env: test
    app: prediction
spec:
  containers:
  - image: nginx
    name: photoview-container
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-4
  labels:
    env: stage
    app: photo-view
spec:
  containers:
  - image: nginx
    name: photoview-container
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-5
  labels:
    env: stage
    app: imagetrain
spec:
  containers:
  - image: nginx
    name: photoview-container
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-6
  labels:
    env: prod
    app: photo-view
spec:
  containers:
  - image: nginx
    name: photoview-container

このマニュフェストファイルでは、nginx-pod-1 ~ nginx-pod-6 というリソースを作成しています。その中で、以下の部分でリソースごとにラベルを定義しています。

  labels:
    env: test
    app: photo-view

実際にこのマニュフェストファイルを適用してみます。適用するには、kubectl apply -f labelsample.yaml を実行します。適用できたら、kubectl get pod で状況を確認します。

NAME          READY   STATUS    RESTARTS   AGE
nginx-pod-1   1/1     Running   0          12s
nginx-pod-2   1/1     Running   0          12s
nginx-pod-3   1/1     Running   0          12s
nginx-pod-4   1/1     Running   0          12s
nginx-pod-5   1/1     Running   0          12s
nginx-pod-6   1/1     Running   0          11s

これだけでは Labels が見れないので、kubectl get pod --show-labels というようにオプションを設定して表示させます。

NAME          READY   STATUS    RESTARTS   AGE     LABELS
nginx-pod-1   1/1     Running   0          2m58s   app=photo-view,env=test
nginx-pod-2   1/1     Running   0          2m58s   app=imagetrain,env=test
nginx-pod-3   1/1     Running   0          2m58s   app=prediction,env=test
nginx-pod-4   1/1     Running   0          2m58s   app=photo-view,env=stage
nginx-pod-5   1/1     Running   0          2m58s   app=imagetrain,env=stage
nginx-pod-6   1/1     Running   0          2m57s   app=photo-view,env=prod

これで Label が定義されたリソースがデプロイされていることが分かります。Labels はあとからリソースを検索したり指定したりする際に便利です。例えば app=photo-view と定義されているもののみを検索して表示する際には、-l オプションを使います。

$ kubectl get pod -l app=photo-view
NAME          READY   STATUS    RESTARTS   AGE
nginx-pod-1   1/1     Running   0          5m29s
nginx-pod-4   1/1     Running   0          5m29s
nginx-pod-6   1/1     Running   0          5m28s

このように Label は使用していきます。実用的にどのように使うかは今後の記事で見ていきましょう。

#Namespace の操作
Kubernetes にはリソースを纏めて仮想的に分離する「Namespace」という機能があります。これを使用すると、ひとつの Kubetnetes クラスターを複数のプロジェクトで利用することができます。現在設定されている Namespace は kubectl get namespace で情報を取得できます。

$ kubectl get namespace
NAME          STATUS   AGE
default       Active   37h
kube-public   Active   37h
kube-system   Active   37h

Pod の情報を取得する際、--namespace オプションを用いると、どの Namespace に含まれているかが確認することが出来ます。下記の例では、kube-system という Namespace 含まれている Pod を確認しています。

$ kubectl get pod -n kube-system
NAME                                    READY   STATUS    RESTARTS   AGE
coredns-XXXXXXXXXX-54np6                1/1     Running   0          37h
coredns-XXXXXXXXXX-qphkn                1/1     Running   0          36h
coredns-autoscaler-XXXXXXXXXX-h2lgp     1/1     Running   0          37h
~ 省略 ~

次に実際に Namespace を定義します。Namespace は Pod のリソースと同様に、マニュフェストファイルで指定します。例えば namespacesample.yaml というマニュフェストファイルを作成します。

namespacesample.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: trade-system

作成したら、kubectl apply -f namespace.yaml を実行して、Namespace を作成します。作成できたら、kubectl get namespace を実行してみます。

$ kubectl get namespace
NAME           STATUS   AGE
default        Active   37h
kube-public    Active   37h
kube-system    Active   37h
trade-system   Active   39s

これで新しい Namespace を作成することが出来ました。Pod を作成する際には、どの Namespace に含まれるかを意識しながら作成する必要があります。
次回の記事では、実際にコンテナーアプリケーションの実行と管理を実行していきたいと思います。

#参考URL
Labels and Selectors
https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/

Namespaces
https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?