最初の(ステートレス)アプリをデプロイする

Kubernetes入門

Frank Heilmann

Platform Architect and Freelance Instructor

kubectl の基礎

  • kubectl: Kubernetes オブジェクト操作の主要コマンド
  • オブジェクト例: podservice など

$$

  • 代表的な使い方:

    • kubectl create -f <Manifest.yml>: 新規作成(-f はファイル指定)
    • kubectl apply -f <Manifest.yml>: 新規作成+状態の更新
    • kubectl get <object>: デプロイ済みオブジェクトの一覧
    • kubectl describe <object>: 個別オブジェクトの詳細

    $$

  • 詳細ヘルプ: --help

Kubernetes入門

マニフェストの基礎

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.4
        ports:
        - containerPort: 80
  • 注意: マニフェストは宣言的
  • 形式は主に YAML(JSON も可)
  • 重要なセクション:
    • metadata: オブジェクト/リソースの基本情報
    • spec: 仕様=望ましい状態の定義
  • リソースにより階層が深くなる場合がある
Kubernetes入門

ステートレスアプリケーション

  • ステートレスアプリ:

    • 一般概念
    • Kubernetes 固有ではない
    • 内部状態や処理文脈を保存しない
  • 中断時は新しいレプリカが再作成され、処理を再開

  • 例:
    • DB バックエンドを照会する DB フロントエンド
    • 全文索引を照会する検索アプリ
    • IoT センサーの温度(°F→°C)を変換するストリーム処理
Kubernetes入門

Kubernetes の Deployment

  • 「ステートレスアプリ」は「Kubernetes Deployment」に対応
  • サンプルマニフェストの構成:
    • apiVersionkind
    • metadataspec
  • specreplicasselectortemplate を定義
  • selector は後述
  • template は Deployment が作る Pod の詳細を記述
apiVersion: apps/v1
kind: Deployment
metadata:
  name: <deployment name>
  labels:
    app: <a label for the application>
spec:
  replicas: <number of initial replicas>
  selector:
    matchLabels:
      app: <matches the label above>
  template:
    metadata:
      labels:
        app: <label to be given to each pod>
    spec:
      containers:
      - name: <container name>
        image: <the image to be used>
        ports:
        - containerPort: <ports for networking>
Kubernetes入門

Kubernetes クラスターへのデプロイ

  • kubectl apply -f <manifest.yml> で Pod を作成し、変更を反映
  • Kubernetes コントロールプレーンが Deployment をノードにスケジューリング
    • その後、Pod がノードで起動
  • Pod は一意だがランダム(予測不可)な識別子を持つ。各 Pod は「どれでも同等」
Kubernetes入門

演習に進みましょう!

Kubernetes入門

Preparing Video For Download...