概要
今回扱う表示や操作できるのもの大きさを比べると、こうなっていると解釈している。
pod < svc < namespace < context < cluster < server(k8sではない)
だと解釈した。
サーバーが k8s リソースを置くところ。
クラスタが一番大きい概念。
コンテキストがクラスタ内部の一番大きな区切り。
名前空間がその次に大きな区切り。
サービスはポッドのまとまり。
ポッドは最初単位。
という解釈をした。
secret や vs はどの位置なのか不明。
node, depolyments も不明。
この図によると、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
use-contexts -- 現在いる context を切り替える
use-contexts
おおきいサーバーだと複数コンテキストでわけて pod たちを管理するらしい。推測。
--context=hoge get po
コンテキストの絞り込み。
hoge というコンテキストにあり、default の NameSpace にあるポッドを表示できる。
k --context=hoge get po
No resources found in default namespace.
デフォルト NameSpace になにもないとでない。
kubectl --context=hoge get po -n foo
NAME READY STATUS RESTARTS AGE
hoge-api-abc123 2/2 Running 0 1d1h
中身が入っている 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
... secretName -0 yaml -- ある secret を yaml で表示する
kubectl -n some get secret hoge -o yaml
123edf...
kind: Secret
name: helm
namespace
pod の分類。一番使う。プロジェクトごとに分類する。
これを指定せずに pod を作った場合は default という ns に紐づけられる。
get ns --- namespace 一覧を表示する
❯ kubectl get ns
NAME STATUS AGE
default Active 12d
kube-system Active 12d
some Active 12d
{create,delete} ns -- namespace を作成、削除する
kubectl create ns foo
kubectl delete ns foo
調子が悪い時は作り直す
-n NameSpaceName get po
kubectl get po -n foo
No resources found in foo namespace.
名前空間で絞り込む。
大抵前段で コンテキストの絞り込みも必須。
svc
ns よりも大きい概念。あまりわかってない。
get svc -- svc 一覧
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
サービスが出せる
有るかわかる
外部から叩ける IP がわかる
vs
get vs
k --context=hoge -n foo get vs
NAME GATEWAYS HOSTS AGE
ゲートウェイは不明。
ホストとしてクラスタ内部で叩けるアドレスと、サーバー内部で叩けるアドレスが出せる。
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
全ての 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
-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}
どのコンテナから作成されて
どのコミットから作成されたイメージから作成されているかまでわかる。
-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}
このように MySQL の show コマンドっぽくも出せる。
logs -n nameSpaceName podName -- podName のログをみる
ns は必須。ないと default になっちゃうからね。
pod が何を吐いているかのログをみれる。
kotlin で作った API なら、logger に出している情報を見れる。
kubectl logs -n some some-db-123edf
exec -it podName --bash -- pod を動かしているコンテナに bash で入る
実際にそのポッドに bash で入って操作ができる。
kubectl -n some exec -it some-db-12af -- bash
まとめ
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)