GNU/Linux >> Linux の 問題 >  >> Linux

KubernetesでStatefulSetを作成する方法

StatefulSetsには、一意の永続的なIDと安定したホスト名を持つポッドのセットが含まれています。ポッドテンプレートは、ポッドの仕様を含むStatefulsetで使用され、ポッドはこの仕様を使用して作成されます。 Kubernetesのステートフルセットを使用して、ステートフルアプリケーションとクラスター化アプリケーションをデプロイできます。 StatefulSetは、コンテナイメージとボリュームを含むポッド仕様を変更することで更新できます。

StatefulSetsは、アプリケーションが次のプロパティのいずれかを必要とする場合に使用できます。

  • 安定した一意のネットワーク識別子。
  • 安定した永続的なストレージ。
  • 順序付けられた適切な展開とスケーリング。
  • 注文された自動ローリングアップデート。

N個のレプリカを持つStatefulSetの場合、ポッドがデプロイされると、それらは{0..N-1}の順に順番に作成されます。ポッドが削除されると、{N-1..0}から逆の順序で終了します。

Statefulsetの詳細については、ここをクリックしてください。

この記事では、Nginxポッドのレプリカを使用してStatefulsetを作成します。ポッドに対して操作を実行して、ポッドがどのように削除および作成されるかを確認します。

前提条件

  1. 少なくとも1つのワーカーノードを持つKubernetesクラスタ。
    Kubernetesクラスタの作成方法を学びたい場合は、ここをクリックしてください。このガイドは、AWS Ubuntu18l04EC2インスタンスで1つのマスターと2つのノードを持つKubernetesクラスターを作成するのに役立ちます。

何をするか

  1. ステートフルセットを作成する

ステートフルセットを作成

ファイルを作成し、その中に次のStatefulset定義を追加します。

vim statefulset.yml

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web

この例では、

  • nginxという名前のヘッドレスサービス 、ネットワークを制御するために使用されます。
  • webという名前のStatefulSetには、一意のポッドで起動されるnginxコンテナのレプリカが3つあります。
  • バージョンslim:0.8のnginxイメージは、Nginxのデプロイに使用されます。

ステートフルセットを作成するには、次のコマンドを実行します。

kubectl get statefulset

kubectl create -f statefulset.yml

次の2つのコマンドを実行して、上記の手順で作成したステートフルセットとサービスを一覧表示します。

kubectl get statefulset

kubectl get service

次のコマンドを使用してポッドを取得し、ポッド名にサフィックスとして番号が付いていることを確認します。

kubectl get pods

ステートフルセットの完全な詳細を取得するには、次のコマンドを実行します。

kubectl get statefulset

kubectl describe statefulset web

では、ポッドを削除して、新しいポッドが作成された後も名前がどのように保持されるかを見てみましょう。

2つのポッドを削除して、作成時に新しいポッドに割り当てられる名前を確認します。

kubectl get pods

kubectl delete pods web-0 web-2

kubectl get pods

上のスクリーンショットでは、ポッドを削除した後でも、新しく作成されたポッドに同じ名前が付けられていることがわかります。

結論

この記事では、Statefulsetを作成し、その詳細を確認するための操作を実行しました。また、ポッドを削除して、ポッドの名前がどのように保持されるかを確認し、削除後に新しく作成されたポッドに同じ名前が割り当てられるようにしました。


Linux
  1. 最初のポッドをKubernetesクラスターにデプロイする方法

  2. サブドメインを作成する方法

  3. サブドメインを作成する方法

  1. Kubernetesでポッドを削除する方法[K8sのクイックヒント]

  2. Kubernetesでポッドを再起動する方法[K8sのクイックヒント]

  3. Kubernetesでサービスを削除する方法

  1. Gitタグを作成する方法

  2. ディレクトリへのリンクを作成する方法

  3. Kubernetes ノードで実行された Pod の履歴を取得するには?