kubernetsのstatefulset


StatefulSetはコントローラの一種で、独自のアイデンティティのPODを作成することができます.秩序ある導入と伸縮を提供します.
  • statefulset
  • を使用
  • 使用制限
  • 構成部
  • pod識別
  • 導入と伸縮を保証
  • statefulsetの使用
    statefulsetは以下のアプリケーションに価値があります.
  • 安定で一意のネットワークアクセスアドレス
  • 安定で永続的なストレージ
  • 秩序、エレガントな導入と伸縮
  • 秩序.優雅な削除と終了
  • 上記の説明において、安定性は、POD再スケジューリング後に持続可能であることと同等である.アプリケーションが安定した認証や秩序ある導入、削除、伸縮を必要としない場合は、DeloymentやReplicaSetなどのステータスレスコピーを使用してアプリケーションを導入することができ、ステータスレスアプリケーションに適しています.
    使用制限
  • Statefulsetは現在bateバージョンであり、1.5まではどのリリースでも
  • は使用できません.
  • すべてのalpha/betaリソースに類似しています.apiserverパラメータ--runtime-configでStatefulset
  • を無効にできます.
  • PODで使用する永続化ストレージは、storage classベースの動的ボリュームであってもよいし、予め管理者が割り当てる
  • であってもよい.
  • Statefulsetを削除または縮小しても、割り当てられたvolumesは削除されません.これは、statefulsetに関連付けられたリソースを自動的に消去するよりも、データのセキュリティを確保するために重要である
  • .
  • Statefulsetは現在、ネットワークアクセスアドレス
  • を提供するHeadless Serviceが必要です.
  • 現在手動で更新を完了する必要があるStatefulset
  • コンポーネント
  • の次の例では、Statefulsetのコンポーネントについて説明する.
  • ネットワークアクセスを制御するためのnginxというHeadless Service
  • Webという名前のStatefulsetは、3つのコピーPOD
  • を起動します.
  • volumeClaimTemplatesは、永続化ストレージ
  • を提供します.
    ---
    apiVersion: v1
    kind: Service
    metadata:
        name: nginx
        labels:
           app: nginx
    spec:
       ports:
       - port: 80
         name: web
       clusterIP: None
       selector:
         app: nginx
    ---
    apiVersion: apps/v1beta1
    kind: StatefulSet
    metadata:
        name: webspec:
        serviceName: "nginx"
        replicas: 3
        template:
            metadata:
                  labels:
                     app: nginx
            spec:
                terminationGracePeriodSeconds: 10
                containers:
                - name: nginx
                   p_w_picpath: gcr.io/google_containers/nginx-slim:0.8
                   ports:
                   - containerPort: 80
                     name: web
                   volumeMounts:
                   - name: www
                     mountPath: /usr/share/nginx/html
        volumeClaimTemplates:
        - metadata:
                name: www
                annotations:
                    volume.beta.kubernetes.io/storage-class: anything
           spec:
               accessModes: [ "ReadWriteOnce" ]
               resources:
                   requests:
                       storage: 1Gi

    POD識別
    StatefulSet PODには、シーケンス番号、安定したネットワークアイデンティティ、および安定したストレージによってユニークなアイデンティティ識別があります.アイデンティティバインドPODは、PODがどのノードにスケジューリングされているかにかかわらず.
    1)シーケンス番号インデックス
    StatefulsetにはN個のインスタンスがあり、各PODには[1,N]の範囲の一意の整数シーケンス番号が割り当てられる.
    2)安定したネットワークID
    StatefulSetの各PODの名前はStatefulSetの名前とPodシーケンス番号からなる.POD名の形式は$(statefulset name)-$(ordinal)です.上記の例で作成したPOD名は、web-0、web-1、web-2です.statefulsetはHeadless Serviceを使用してPODのドメイン名を制御します.サービスドメイン名のフォーマットは$(サービス名).$(namespace).svc.cluster.local,cluster.localはcluster domainです.各PODには、$(podname).$(service_domain)という形式の一致するドメイン名が作成されます.次の表は、cluster domain、service name、statefulset nameがどのように相互作用するかを示す例です.
    Cluster Domain        Service (ns/name)            StatefulSet (ns/name)        StatefulSet Domain     Pod DNS     Pod Hostname
    cluster.local    default/nginx    default/web    nginx.default.svc.cluster.local    web-{0..N-1}.nginx.default.svc.cluster.local    web-{0..N-1}    
    cluster.local    foo/nginx    foo/web    nginx.foo.svc.cluster.local    web-{0..N-1}.nginx.foo.svc.cluster.local    web-{0..N-1}    
    kube.local    foo/nginx    foo/web    nginx.foo.svc.kube.local    web-{0..N-1}.nginx.foo.svc.kube.local    web-{0..N-1}    
    3)安定したストレージ
     kubernetesは、VolumeClaimTemplateごとにPVを作成します.上記のnginxの例では、PODごとに1 GサイズのPVが得られる.PODがノードにスケジューリングされると、volumeMountsは、それにバインドされたPVCを介してPVをマウントする.
    説明:PVCにバインドされたPVはPODまたはstatefulset削除により削除されず、手動で削除する必要があります.
    導入と拡張性の確保
  • statefulsetのN個のコピーについて、PODが配備されると、それらは秩序化され、[0..N-1]
  • .
  • PODが削除すると、N-1のPOD
  • が先に終了する逆の順序で終了する.
  • は、伸縮動作をPODに適用する前に、以前のすべてのPODの状態がrunningであり、readyであることを保証しなければならない.
  • PODが終了する前に、現在のシーケンス番号以降のすべてのPODは、
  • を完全に閉じる必要がある.
    StatefulSetはpod.Spec.TerminationGracePeriodSecondsを0と指定するべきではありません.このやり方は安全ではないので,強く止めた.さらに説明するには、StatefulSet PODの強制削除を参照してください.
    上記のnginx例を作成すると、3つのPODがweb-0 web-1 web-2の順序で配置されます.web-1は、web-0 runningおよびreadyの前に配備されず、web-2は、web-1がrunningおよびready状態になるまで配備されません.web-1 runningおよびready以降ですが、web-2はまだ起動していません.この場合、web-0が正常に再起動され、runningおよびreadyの状態に達するまで、web-2は起動されません.
    replicas=1などのデプロイされたstatefulsetをユーザーが変更した場合、web-2は先に終了します.Web-1は、Web-2が完全に閉じて削除されるまで終了しません.Web-2は終了し、完全に閉じられていますが、Web-1が終了する前に、Web-0が故障した場合、Web-0がrunningおよびreadyの状態になるまで、Web-1は終了しません.