今回は 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 ファイルを任意のディレクトリに作成しましょう。
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
というマニュフェストファイルを作成します。
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/