Kubernetes 作成コマンド

KubernetesBeginner
オンラインで実践に進む

はじめに

kubectl create コマンドは、Kubernetes リソースを作成するための必須ツールです。このコマンドは、YAML または JSON ファイルを使用して、名前空間、デプロイメント、サービス、シークレット、および ConfigMap などのリソースを定義します。この実験では、これらのリソースを手順通りに作成し、Kubernetes におけるそれらの役割を理解します。

この実験が終了すると、以下のことができるようになります。

  1. Minikube クラスタを起動して検証する。
  2. kubectl create を使用して、さまざまな Kubernetes リソースを作成して検証する。

Minikube を起動してクラスタを検証する

Kubernetes を使用する前に、稼働しているクラスタが必要です。Minikube は、軽量のローカル Kubernetes クラスタを提供します。

  1. プロジェクトディレクトリに移動する:

    ターミナルを開き、デフォルトの作業ディレクトリに移動します。

    cd /home/labex/project
    
  2. Minikube を起動する:

    クラスタを初期化するために Minikube を起動します。

    minikube start
    
    • Minikube は単一ノードの Kubernetes クラスタを作成します。この手順には数分かかる場合があります。
  3. Minikube の状態を検証する:

    Minikube が正常に起動したかどうかを確認します。

    minikube status
    

    apiserverkubelet などのコンポーネントが Running と表示されていることを確認します。

  4. Kubernetes の設定を確認する:

    kubectl が Minikube クラスタに接続されていることを確認します。

    kubectl cluster-info
    

    これにより、API サーバーやその他のコンポーネントに関する詳細が表示されます。

Minikube が起動に失敗した場合は、minikube delete を使用してリセットして再度試してください。

kubectl create コマンドを調べる

kubectl create コマンドは、Kubernetes リソースを作成するための複数のサブコマンドを提供します。これは、名前空間、デプロイメント、サービス、シークレット、および ConfigMap などのリソースの作成を管理するのに役立ちます。

利用可能な kubectl create サブコマンドを表示するには、次のコマンドを実行します。

kubectl create -h

次の出力が表示されます。

ファイルまたは標準入力からリソースを作成します。

JSON と YAML 形式が受け付けられます。

例:
  ## pod.json のデータを使用してポッドを作成する
  kubectl create -f./pod.json

  ## 標準入力に渡された JSON を元にポッドを作成する
  cat pod.json | kubectl create -f -

  ## registry.yaml のデータを JSON 形式で編集し、編集後のデータを使用してリソースを作成する
  kubectl create -f registry.yaml --edit -o json

利用可能なコマンド:
  clusterrole           クラスタロールを作成する
  clusterrolebinding    特定のクラスタロールに対するクラスタロールバインディングを作成する
  configmap             ローカルファイル、ディレクトリまたはリテラル値からコンフィグマップを作成する
  cronjob               指定された名前のクロンジョブを作成する
  deployment            指定された名前のデプロイメントを作成する
  ingress               指定された名前のイングレスを作成する
  job                   指定された名前のジョブを作成する
  namespace             指定された名前の名前空間を作成する
  poddisruptionbudget   指定された名前のポッド中断予算を作成する
  priorityclass         指定された名前の優先度クラスを作成する
  quota                 指定された名前のクォータを作成する
  role                  単一のルールを持つロールを作成する
  rolebinding           特定のロールまたはクラスタロールに対するロールバインディングを作成する
  secret                指定されたサブコマンドを使用してシークレットを作成する
  service               指定されたサブコマンドを使用してサービスを作成する
  serviceaccount        指定された名前のサービスアカウントを作成する
  token                 サービスアカウントトークンを要求する

利用可能なサブコマンドとその説明を確認して、kubectl create をどのように使用できるかを理解しましょう。

名前空間を作成する

名前空間を使用すると、Kubernetes 内のリソースを整理して分離できます。

  1. 名前空間定義ファイルを作成する:

    新しいファイル namespace.yaml を開きます。

    nano namespace.yaml
    
  2. 名前空間を定義する:

    次の内容を追加します。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: mynamespace
    

    Ctrl+X を押してから Y を押し、その後 Enter を押してファイルを保存します。

  3. 名前空間を適用する:

    名前空間を作成します。

    kubectl create -f namespace.yaml
    
  4. 名前空間を検証する:

    名前空間の一覧を確認します。

    kubectl get namespaces
    

    出力に mynamespace が表示されていることを確認します。

デプロイメントを作成する

デプロイメントは、ポッドの期待される状態を管理および維持します。

  1. デプロイメント定義ファイルを作成する:

    deployment.yaml という名前のファイルを開きます。

    nano deployment.yaml
    
  2. デプロイメントを定義する:

    Nginx コンテナのレプリカを 3 つ展開するために、次の内容を追加します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mydeployment
      namespace: mynamespace
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
            - name: nginx-container
              image: nginx
    

    ファイルを保存します。

  3. デプロイメントを適用する:

    デプロイメントを作成します。

    kubectl create -f deployment.yaml
    
  4. デプロイメントを検証する:

    デプロイメントとそのポッドを確認します。

    kubectl get deployments -n mynamespace
    kubectl get pods -n mynamespace
    

    3 つのポッドが稼働していることを確認します。

サービスを作成する

サービスは、一連のポッドに対して安定したネットワーク アクセスを提供します。

  1. サービス定義ファイルを作成する:

    service.yaml という名前のファイルを開きます。

    nano service.yaml
    
  2. サービスを定義する:

    次の内容を追加します。

    apiVersion: v1
    kind: Service
    metadata:
      name: myservice
      namespace: mynamespace
    spec:
      selector:
        app: myapp
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
    

    ファイルを保存します。

  3. サービスを適用する:

    サービスを作成します。

    kubectl create -f service.yaml
    
  4. サービスを検証する:

    サービスの一覧を確認します。

    kubectl get services -n mynamespace
    

    myservice が一覧に表示されていることを確認します。

シークレットを作成する

シークレットは、パスワードや API キーなどの機密情報を安全に保管します。

  1. シークレット定義ファイルを作成する:

    secret.yaml という名前のファイルを開きます。

    nano secret.yaml
    
  2. シークレットを定義する:

    Base64 でエンコードされた値を持つ次の内容を追加します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
      namespace: mynamespace
    type: Opaque
    data:
      username: dXNlcm5hbWU= ## "username" の Base64
      password: cGFzc3dvcmQ= ## "password" の Base64
    

    ファイルを保存します。

  3. シークレットを適用する:

    シークレットを作成します。

    kubectl create -f secret.yaml
    
  4. シークレットを検証する:

    シークレットの一覧を確認します。

    kubectl get secrets -n mynamespace
    

    出力に mysecret が表示されていることを確認します。

コンフィグマップを作成する

コンフィグマップは、キーと値のペアで構成される構成データを保存します。

  1. コンフィグマップ定義ファイルを作成する:

    configmap.yaml という名前のファイルを開きます。

    nano configmap.yaml
    
  2. コンフィグマップを定義する:

    次の内容を追加します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: myconfigmap
      namespace: mynamespace
    data:
      database.host: "example.com"
      database.port: "5432"
    

    ファイルを保存します。

  3. コンフィグマップを適用する:

    コンフィグマップを作成します。

    kubectl create -f configmap.yaml
    
  4. コンフィグマップを検証する:

    コンフィグマップの一覧を確認します。

    kubectl get configmaps -n mynamespace
    

    出力に myconfigmap が表示されていることを確認します。

まとめ

この実験では、以下のことを学びました。

  1. Minikube クラスタを起動して検証する方法。
  2. 名前空間、デプロイメント、サービス、シークレット、コンフィグマップなどの Kubernetes リソースを作成する方法。
  3. これらのリソースの状態を検証する方法。

これらの手順をマスターすることで、Kubernetes で効果的にアプリケーションを管理および展開できるようになります。これらの手順を練習して理解を深めましょう!