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上で動かすツール
      クラスタ操作系
  • k9s
    • TUIでクラスタを操作できるツール
  • Lens
    • 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-context
    • kubectl 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