Kubernetes入門:たった5分の試行錯誤で最初のアプリケーションをデプロイする

Development tutorial - IT technology blog
Development tutorial - IT technology blog

2018年、私は20台以上のサーバーにSSHで入り、手動でコードをプルしてサービスを再起動するために、朝の4時まで徹夜したことがあります。当時は自分が運用の「スーパーマン」だと思っていましたが、1つのノードの故障がシステム全体の連鎖的なダウンを引き起こしました。その瞬間、すぐに自動化が必要だと気づいたのです。そして、Kubernetes (K8s) がその答えでした。

K8sは難しそうに聞こえるかもしれませんが、インフラのための超有能な「総支配人」のようなものだと想像してみてください。「このウェブサイトを正確に5つのレプリカで動かしたい」と命令するだけです。空いているサーバーの選定から、エラー発生時の自己修復まで、残りの作業はこの総支配人がすべて面倒を見てくれます。

今すぐ実践:5分で最初のアプリを動かす

理論を詰め込む代わりに、まずは手を動かしてみましょう。**Minikube**(ラップトップ用の小型K8s)をインストールするか、無料のオンライン実習ツール **Play with Kubernetes** を使用してください。

コマンドラインツール kubectl が手元に用意できたら、次の「魔法の」コマンド集を試してみてください。

# 1. Nginxイメージを実行するDeploymentを作成
kubectl create deployment hello-k8s --image=nginx

# 2. Podが起動したか(「明かりが灯った」か)確認
kubectl get pods

# 3. ブラウザからアクセスするためのポートを公開
kubectl expose deployment hello-k8s --type=NodePort --port=80

# 4. 実行結果を確認するためのURLを取得 (Minikube専用)
minikube service hello-k8s --url

120秒もかからずに、クラスターへのコンテナのデプロイが完了しました。K8sはインフラ上の最適な場所を自動的に見つけてNginxを配置し、常にサービス可能な状態であることを保証します。

概念の分解:Pod、Deployment、Service

上記の用語が少し難しく感じるなら、最も「庶民的」な方法で説明させてください。

Pod – 最小単位

Dockerの世界ではコンテナについて話しますが、K8sでは最小単位は「Pod」です。Podはマンションの1室のようなもので、コンテナは電気や水(リソース)を共有するルームメイトです。黄金律:最も効率的に管理するために、通常1つのPodには1つのメインコンテナだけを含めるべきです。

Deployment – 献身的なマネージャー

Podを手動で作ってはいけません。Deploymentを使いましょう。これは「理想の状態 (Desired State)」を宣言する場所です。例えば、「常に3つのPodが安定して動いていること」といった具合です。もしPodが突然「急死」しても、Deploymentはすぐに別のサーバーで新しいPodを起動して補充します。夜中に起きてボタンを押す必要なく、システムが自動的に修復されます。

Service – 固定のホットライン番号

K8sのPodは非常に「脆弱」です。削除されたり、IPアドレスが刻々と変わる新しいPodが作成されたりします。では、ユーザーはどうやってアプリを見つけるのでしょうか?その答えがServiceです。Serviceは固定のIPアドレスとドメイン名を提供し、生存しているPodにトラフィックを正確に誘導するための盾の役割を果たします。

レベルアップ:YAMLファイルによるアプリのスケーリング

K8sの真の力は「宣言的 (Declarative)」であることにあります。コマンドを打つ代わりに、すべてをYAMLファイルに記述します。システムを3つのレプリカにアップグレードする方法がいかに簡単か見てみましょう。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3 # ここで即座に負荷分散(スケールアップ)
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        resources:
          limits:
            memory: "256Mi"
            cpu: "500m"

kubectl apply -f deployment.yaml コマンドを実行するだけで、K8sはこのファイルと現実の現状を自動的に「照合」します。その後、システムを要求した構成どおりにするために必要な変更を実行します。

「痛い目」に遭わないためのヒント

大小さまざまなクラスターに長年携わってきた経験から、皆さんに4つの教訓をお伝えします。

  • リソースを放置しない: limits セクションを絶対に忘れないでください。私は以前、メモリリークを起こしたバグのあるスクリプトのせいで、RAMを256MBに制限し忘れたばかりに、他の15個のサービスが動いているノード全体をダウンさせてしまったことがあります。
  • :latestタグを使わない: nginx:1.21 のように具体的なバージョンを指定してください。latest を使うと、どのバージョンが動いているか確信が持てず、トラブルシューティングの際に非常に頭が痛くなります。
  • ログと仲良くなる: kubectl logs -f [pod名] コマンドは最大の救世主です。アプリが動かないときは、そこに入ってログの「不満」を聞き、修正の手がかりを見つけましょう。
  • YAMLを細かくチェックする: YAMLファイルは空白に対して非常に敏感です。スペース1つのせいで1時間を無駄にしないよう、VS CodeのYAML拡張機能をすぐにインストールしましょう。

K8sにはIngress、ConfigMap、Secretなど、探索すべき素晴らしい機能がまだたくさんあります。失敗を恐れずに削除してやり直してみてください。それがこの技術をマスターする最短ルートです。もし行き詰まったら、下のコメント欄に残してください。全力でサポートします!

Share: