manifestを使ってpodを作成してみる

minikubeを利用してmanifestからpodを作成してみたメモです

前回kubernetesクラスタとしてminikubeをインストールしたので、
manifestを使ってpodを作成してみようと思います。

下記バージョンで試してみます。

manifest

下記のmanifestを作成します。
前回使ったechoserverのイメージを使ってみます。

❯ vi my_echoserver.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-echoserver
spec:
  containers:
    - name: my-echoserver-container
      image: k8s.gcr.io/echoserver:1.10

minikubeを起動

❯ minikube start
😄  Darwin 10.14.6 上の minikube v1.25.2
✨  docker ドライバーが自動的に選択されました。他の選択肢: hyperkit, virtualbox, ssh
👍  minikube クラスター中のコントロールプレーンの minikube ノードを起動しています
🚜  ベースイメージを取得しています...
🔥  docker container (CPUs=2, Memory=1985MB) を作成しています...
🐳  Docker 20.10.12 で Kubernetes v1.23.3 を準備しています...
    ▪ kubelet.housekeeping-interval=5m
    ▪ 証明書と鍵を作成しています...
    ▪ コントロールプレーンを起動しています...
    ▪ RBAC のルールを設定中です...
🔎  Kubernetes コンポーネントを検証しています...
    ▪ gcr.io/k8s-minikube/storage-provisioner:v5 イメージを使用しています
🌟  有効なアドオン: storage-provisioner, default-storageclass
🏄  完了しました! kubectl が「"minikube"」クラスタと「"default"」ネームスペースを使用するよう構成されました

-fでmanifestを指定してcreateします。

❯ kubectl create -f my_echoserver.yaml
pod/my-echoserver created

podが作成されていることを確認。

❯ kubectl get pods
NAME            READY   STATUS    RESTARTS   AGE
my-echoserver   1/1     Running   0          8s

同様にmanifestを指定して削除します。

❯ kubectl delete -f my_echoserver.yaml
pod "my-echoserver" deleted

podが削除されていることを確認。

❯ kubectl get pods
No resources found in default namespace.

label

manifestでkey-value形式のlabelを付けることができ、labelを指定して操作することができます。
envtypeというlabelを指定してみます。

❯ cat my_echoserver_label.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-echoserver
  labels:
    env: beta
    type: web
spec:
  containers:
    - name: my-echoserver-container
      image: k8s.gcr.io/echoserver:1.10

podを作成。

❯ kubectl create -f my_echoserver_label.yaml
pod/my-echoserver created

-lでlabelを指定してenvlabelがあるpodのみを表示してみます。

❯ kubectl get pods -l env
NAME            READY   STATUS    RESTARTS   AGE
my-echoserver   1/1     Running   0          73s

labelのvalueも指定してpodを表示することもできます。

❯ kubectl get pods -l env=beta
NAME            READY   STATUS    RESTARTS   AGE
my-echoserver   1/1     Running   0          81s

存在しないvalueを指定してみると何も表示されません。

❯ kubectl get pods -l env=release
No resources found in default namespace.

-Lを指定すると実際の値も表示されます。

❯ kubectl get pods -L env
NAME            READY   STATUS    RESTARTS   AGE    ENV
my-echoserver   1/1     Running   0          118s   beta

sh

exec -itでterminalを開き、-- /bin/shを指定することでシェルを操作することができます。

❯ kubectl exec -it my-echoserver -- /bin/sh
# ls
README.md  bin  boot  certs  core  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

今は--なしだと警告が出るようになってます。

❯ kubectl exec -it my-echoserver /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
# ls
README.md  bin  boot  certs  core  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

おわり。