DEV Community

kaede
kaede

Posted on • Edited on

kubernetes 基礎 -- Part 01 kubectl で context と namespace で絞って pod を全表示、詳細表示、ログ表示する

概要

今回扱う表示や操作できるのもの大きさを比べると、こうなっていると解釈している。

pod < svc < namespace < context < cluster < server(k8sではない)

だと解釈した。

サーバーが k8s リソースを置くところ。
クラスタが一番大きい概念。
コンテキストがクラスタ内部の一番大きな区切り。
名前空間がその次に大きな区切り。
サービスはポッドのまとまり。
ポッドは最初単位。

という解釈をした。

secret や vs はどの位置なのか不明。

node, depolyments も不明。

https://www.researchgate.net/figure/Sample-diagram-of-usage-of-K8s-resources-node-deployment-pod-PVC-and-service-in_fig4_357212022

この図によると、pod たちのまとまりが Node で
複数 Node に跨る pod たちを deployments としてまとめられるようだ。
そして各 Pod を直接 service が扱えるようだ。


参考

https://komodor.com/learn/the-ultimate-kubectl-cheat-sheet/

どうやって各リソースを操作するか詳しく書いてある。

https://www.tohoho-web.com/ex/kubernetes.html

とほほさんの k8s 入門 2023-01-24 追記



context

操作できる中では一番大きい単位。だいたい 1 つしか使わない?

config get-contexts -- context を一覧表示する

そのサーバー内部にあるコンテキスト一覧

kubectl config get-contexts
CURRENT   NAME        CLUSTER     AUTHINFO          NAMESPACE
*         k3d-1234   k3d-1234   admin@k3d-1234   
Enter fullscreen mode Exit fullscreen mode

use-contexts -- 現在いる context を切り替える

use-contexts

おおきいサーバーだと複数コンテキストでわけて pod たちを管理するらしい。推測。


--context=hoge get po

コンテキストの絞り込み。

hoge というコンテキストにあり、default の NameSpace にあるポッドを表示できる。

k --context=hoge get po
No resources found in default namespace.
Enter fullscreen mode Exit fullscreen mode

デフォルト NameSpace になにもないとでない。

kubectl --context=hoge get po -n foo
NAME                                READY   STATUS    RESTARTS        AGE
hoge-api-abc123     2/2     Running   0               1d1h
Enter fullscreen mode Exit fullscreen mode

中身が入っている NS だとうこうやって情報がでる。



secret

用途がわりとわからん。DB のパスとか置く専用の pod につけるラベルなのだろうか?

-n nameSpaceName get secret -- secret 一覧の表示

kubectl -n some get secret
NAME TYPE DATA AGE
kubernetes.io/service-account-token   3      12d
hoge helm 1 12d
Enter fullscreen mode Exit fullscreen mode

... secretName -0 yaml -- ある secret を yaml で表示する

kubectl -n some get secret hoge -o yaml

123edf...
kind: Secret 
  name: helm
Enter fullscreen mode Exit fullscreen mode


namespace

pod の分類。一番使う。プロジェクトごとに分類する。
これを指定せずに pod を作った場合は default という ns に紐づけられる。

get ns --- namespace 一覧を表示する

 kubectl get ns                                 
NAME              STATUS   AGE
default           Active   12d
kube-system       Active   12d
some              Active   12d
Enter fullscreen mode Exit fullscreen mode

{create,delete} ns -- namespace を作成、削除する

kubectl create ns foo
kubectl delete ns foo
Enter fullscreen mode Exit fullscreen mode

調子が悪い時は作り直す


-n NameSpaceName get po

kubectl get po -n foo
No resources found in foo namespace.
Enter fullscreen mode Exit fullscreen mode

名前空間で絞り込む。
大抵前段で コンテキストの絞り込みも必須。



svc

ns よりも大きい概念。あまりわかってない。

get svc -- svc 一覧

kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
Enter fullscreen mode Exit fullscreen mode

サービスが出せる
有るかわかる
外部から叩ける IP がわかる



vs

get vs

k --context=hoge -n foo get vs
NAME GATEWAYS HOSTS AGE
Enter fullscreen mode Exit fullscreen mode

ゲートウェイは不明。
ホストとしてクラスタ内部で叩けるアドレスと、サーバー内部で叩けるアドレスが出せる。



pod

k8s リソースの最小単位。アプリケーションが動いているか、おちたログはどうなっているか、などはここにアクセスする。

get po -A -- 全ての pod を表示する

kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system hoge-123af 1/1 Running 0 100d
something some-246bd 1/1 Running 0 10d
Enter fullscreen mode Exit fullscreen mode

全ての namespace の pod が出せる。
何もしていしなければ context と ns は デフォルトのもので絞られている。
context と ns を横断して pod を全て出す方法はわかっていない


get po -n -- ある namespace の pod のみの簡易情報をみる

kubectl get po -n something
NAMESPACE NAME READY STATUS RESTARTS AGE
something some-246bd 1/1 Running 0 10d
Enter fullscreen mode Exit fullscreen mode

-n {namespace} で namespace で絞り込める

get pod とも書ける。


... -n nameSpaceName -o yamlある namespace の pod のみの詳細情報を yaml でみる

yaml 形式で詳細情報がみれる

kubectl get po -n some -o yaml
apiVersion: v1                                                                                                            
kind: Pod
namespace: some 
spec: 
  containers:
  - env: 
    - name: PASS
      value: hoge
    image: hoge-hoge.com/hoge/app-name:{gitHashTag}
Enter fullscreen mode Exit fullscreen mode

どのコンテナから作成されて
どのコミットから作成されたイメージから作成されているかまでわかる。


-n nameSpaceName describe pod podName -- ある namespace の pod のみの詳細情報を軽くみる

describe でも詳細情報がみれる。

kubectl -n some describe pod podName
Name:             some-db-123-eef                                                                       
Namespace:        some      
Priority:         0  
Containers:
  some-db:
    image: hoge-hoge.com/hoge/app-name:{gitHashTag}                                                                                                     
Enter fullscreen mode Exit fullscreen mode

このように MySQL の show コマンドっぽくも出せる。


logs -n nameSpaceName podName -- podName のログをみる

ns は必須。ないと default になっちゃうからね。
pod が何を吐いているかのログをみれる。

kotlin で作った API なら、logger に出している情報を見れる。

kubectl logs -n some some-db-123edf
Enter fullscreen mode Exit fullscreen mode

exec -it podName --bash -- pod を動かしているコンテナに bash で入る

実際にそのポッドに bash で入って操作ができる。

kubectl -n some exec -it some-db-12af -- bash
Enter fullscreen mode Exit fullscreen mode

まとめ

config get-contexts でコンテキスト一覧を出せる。

--context=contextName でコンテキストで絞れる。
-n nameSpaceName で名前空間で絞れる。

get po -A で デフォルトコンテキストでデフォルト名前空間のポッドを全て表示できる。

describe podName でポッドの詳細情報を表示できる。

logs podName でポッドのログを表示できる。

exec --it podName -- bash でポッドに bash でアクセスできる。


伸びしろ

pod の作成、manifest の出力、manifest の適用?をやりたい

https://qiita.com/suzukihi724/items/241f7241d297a2d4a55c#1-pod%E3%82%92%E4%BD%9C%E6%88%90

k apply -f {定義のyaml?} で pod を作成するらしい

https://prefetch.net/blog/2019/10/16/the-beginners-guide-to-creating-kubernetes-manifests/

kubectl explain で manifest を作れるらしい

create deployment appName でも作れるらしい

Top comments (0)