K8sに入門してみた
こんにちは!Kirigayaです
K8s入門したので、その時のメモになります
さっそく
kubectl:クラスタを操作、リソース管理するための公式CLIツール
brew install kubectl
kind:Docker上にクラスタをローカル構築するツール。学習、検証用
brew install kind
helm:アプリをパッケージとしてデプロイ、管理するツール
brew install helm
そのほかのツール
クラスタ構築系
- minikube
- VM上にローカルK8s構築するツール(Dockerに依存しない)
- k3s
- IoT/エッジデバイス向けに軽量化されたK8s
- k3d
- k3sをDocker上で動かすツール
クラスタ操作系
- k3sをDocker上で動かすツール
- k9s
- TUIでクラスタを操作できるツール
- Lens
- GUIでk8sを管理できるデスクトップアプリ
デプロイ、構成管理系
- GUIでk8sを管理できるデスクトップアプリ
- Kustomize
- yamlファイルをオーバーレイでカスタマイズするツール
- ArgoCD
- Gitリポジトリのソースに自動デプロイを行うGitOpsツール
- Flux
- ArgoCDと同じくGitOpsを実現するCNCFプロジェクト
クラスタを作る
kind create cluster --image=kindest/node:v1.29.0
- create clusterで新しいクラスタを作成
- --image=kindest/nodeでK8sノードのDockerイメージを取得
処理の流れ- v1.29.0のイメージをpull
- イメージをもとにコントロールプレーンノードコンテナを起動
- APIサーバーやetcdなどのコンポーネントをその中にセットアップ
- ~/.kind/configに接続設定を追加
起動確認
kubectl get nodes
kind get clusters
クラスタがない場合...
The connection to the server localhost:8080 was refused
クラスタの API サーバーは localhost:8080 にあるはず
と勘違いしてアクセスしているが、
実際には その場所に Kubernetes が起動していない(=接続拒否)という状況
主な原因
| 原因 | 状況の説明 | 対処法 |
|---|---|---|
| クラスタが起動していない | kind や minikube のクラスタをまだ起動していない。 | kindなら kind create cluster、minikubeなら minikube start を実行。 |
| kubeconfig が未設定 | kubectl がどのクラスタに接続すればいいか分からない状態。 |
kubectl config get-contexts で確認し、kubectl config use-context <名前> で切り替え。 |
| 設定ファイルが削除/破損 |
~/.kube/config が壊れている、または存在しない。 |
kind や minikubeを再作成すれば自動で再生成される。 |
| 別のツール(Docker Desktopなど)のK8sが停止中 | Docker Desktop の Kubernetes が停止している。 | Docker Desktop の設定画面 → Kubernetes → 「Enable Kubernetes」をONにして再起動。 |
調査方法
- 現在のコンテキストを確認
kubectl config current-contextkubectl config get-contexts
- クラスタ起動
kind create cluster
マニフェストを利用してPodを作る
nginx.yml
kubectl apply nginx.yaml
apiVersion: v1
kind: Pod
meetadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx: 1.25.3
ports:
- containerPort: 80
Podが作成されたか確認する
kubectl get pod
詳細に確認する
kubectl get pod --output yaml
podの情報を取得する
K8sが認識しているyamlと差分がないか確認
kubectl get pod nginx --output yaml > pod.yaml
diff pod.yaml nginx.yaml
ログレベルを変更することもできる
kubectl get pod nginx --v=7
リソースの詳細を取得
kubectl describe pod nginx
コンテナのログを取得する
kubectl logs nginx
デバッグ用コンテナを作成する
kubectl debug --stdin --tty nginx --image=curlimages/curl:8.4.0 --target=nginx --namespace default -- sh
サーバーが立ち上がったら
curl localhost:80
htmlが返ってこれば成功です
デバッグコンテナから抜ける
exit
お掃除
kubectl delete pod nginx
今回はここまで
お疲れ様でした
Discussion