statefulsetアプリケーションK8Sの研究では、なぜそれが常に保留されている状態を指摘します


なぜK8S PVとPVCを拘束するものではありません


 などのRedisは、MySQL、zookper分布、などのステートフルなアプリケーションを管理するための展開ステートレスアプリケーションと一般的な管理で何statefuset、K8Sで、statefuset説明を開始する前に、ステートフルなアプリケーションを展開し、アプリケーションが常に状態を保留しているstatefusetを使用しますアプリケーションは、これらのアプリケーションは停止し始め、厳密な順序があるでしょう 


、statefulset  

  • 記録解決DNSを生成するためのヘッドレス(ヘッドレス・サービス)、無cluserIP、リソース識別子、 

  • ポッドのためのリソース管理StatefulSet

  • volumeClaimTemplatesは、ストレージを提供します


二、statefulset展開

  • NFSは、ネットワークストレージを利用します

  • NFSを構築

  • 共有ストレージのディレクトリを設定します

  • 作成PV

  • 振り付けのYAML 



    NFSを構築 

     yumをインストールNFS-utilsの-y 

    ます。mkdir -p /usr/local/k8s/redis/pv{7..12}#マウントディレクトリを作成します

 猫の/ etc /輸出
 
 は/ usr / local / K8S / Redisの/ PV7 172.16.0.0/16(rw,sync,no_root_squash)
 は/ usr / local / K8S / Redisの/ PV8 172.16.0.0/16(rw,sync,no_root_squash)
 / USR /ローカル/ K8S / Redisの/ pv9 172.16.0.0/16(rw,sync,no_root_squash)
 は/ usr / local / K8S / Redisの/ PV10の172.16.0.0/16(rw,sync,no_root_squash)
 は/ usr / local / K8S / Redisの/ pv11 172.16.0.0/16(rw,sync,no_root_squash 

  のexportfs -avr

    作成PV 

   猫nfs_pv2.yaml

apiVersion:v1の
種類:PersistentVolumeの
メタデータ:
  名前:NFS-PV7の
仕様:
  容量:
    ストレージ:500M 
  accessModes:
    - ReadWriteMany 
  persistentVolumeReclaimPolicy:保持
  storageClassName:遅い
  NFS:
    サーバー:172.16.0.59 
    パス:「は/ usr / local / K8S / Redisの/ PV7 「
--- 
apiVersion:v1の
種類:PersistentVolumeの
メタデータ:
  名前:NFS-PV8の

仕様:
  容量:
    ストレージ:500M 
  accessModes:
    - ReadWriteMany 
  storageClassName:遅い
  persistentVolumeReclaimPolicy:保持
  nfsの: 
    サーバーを:172.16.0.59 
    パス: "は/ usr / local / K8S / Redisの/ PV8" 
--- 
apiVersion:v1の
種類:PersistentVolumeの
メタデータ:
  名前:NFS-pv9の

仕様:
  容量:
    ストレージ:500M 
  accessModes:
    - ReadWriteMany 
  storageClassName:遅い
  persistentVolumeReclaimPolicy :保持
  :NFS 
    サーバー:172.16.0.59 
    パス: "は/ usr / local / K8S / Redisの/ pv9" 
--- 
apiVersion:v1の
種類:PersistentVolumeの
メタデータ:
  名前:NFS-PV10の

仕様:
  容量:
    ストレージ:500M 
  :accessModes 
    ReadWriteManyを- 
  storageClassName:遅い
  persistentVolumeReclaimPolicy:保持
  NFS:
    サーバー:172.16.0.59 
    パス: "は/ usr / local / K8S / Redisの/ PV10" 
--- 
apiVersion:v1の
種類:PersistentVolumeの
メタデータ:
  名前:NFS-pv11の

仕様:
  容量:
    ストレージ:500M 
  accessModes:
    - ReadWriteMany 
  storageClassName:遅い
  persistentVolumeReclaimPolicy:保持
  NFS:
    サーバー:172.16.0.59 
    パス: "は/ usr / local / K8S / Redisの/ pv11" 
--- 
apiVersion:v1の
種類:PersistentVolumeの
メタデータ:
  名前:NFS-PV12の

仕様:
  容量:
    ストレージ:500M 
  storageClassName:遅いです 
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy:保持
  :NFS 
    サーバーを:172.16.0.59 
    パス: "は/ usr / local / K8S / Redisの/ PV12を"

   kubectl nfs_pv2.yaml fを適用

   

 ビュー#が正常に作成します

image.png

 

  スケジューリングアプリケーション書かYAML

apiVersion:v1の
種類:サービス
メタデータ:
  名前:myappの
  ラベル:
    アプリ:myappという
スペック:
  ポート:
  -ポート:80 
    名:ウェブ
  CLUSTERIP:なし
  セレクター:
    アプリ:myappの-ポッド
--- 
apiVersion:アプリケーション/ V1の
種類:StatefulSetの
メタデータ:
  名前:のMyAppの
仕様:
  serviceNameを:のMyAppの
  複製:3 
  セレクタ:
    matchLabels:
      アプリ:myappのポッド
  テンプレート:
    メタデータ:
      ラベル:
        アプリ:myappのポッドの
    仕様:
      コンテナ: 
      -名前:myappに
        画像:ikubernetes / myappの:V1 
        資源:
          リクエスト:
            CPU: "500メートル" 
            メモリ: "500Mi" 
        ポート:
        - containerPort:80 
          名:ウェブ
        volumeMounts:
        -名前:myappdata 
          MOUNTPATH:を/ usr / share / nginxの/ htmlの
  volumeClaimTemplates:
  -メタデータ:
      名前:myappdata 
    スペック:
      accessModes:[ "ReadWriteOnce"] 
      storageClassName: "遅い" 
      リソース:
        リクエスト:
          ストレージ:400Mi

 

  -f新しい-stateful.yamlを作成kubectl 

  

  ビューヘッドレスは正常に作成します


image.png


 ビューポッドが正常に作成され

image.png


成功したPVCを作成するかどうかを確認してください

 image.png


成功なしポッドスタートは、PVC、PVCログビュー、PVCが見つからない場合、対応する、明確に書かれてああに依存します


image.png

関連情報を表示し、次の属性を持っています

storageClassName: "遅いです"




image.png 


三、statefulsetトラブルシューティング

  PVCを作成することができない、ポッドに結果が正常に起動しない、YAMLファイルの再検討に数回、

思想について:PVをバインドする方法PVC、関連storageClassName通過し、PVが成功し、そこに作成storageClassName:この属性を遅くし、その結果は見つかりません唖然

....

....

PVとPVCバックの許可がされているかどうかをチェックします

権限のPVセットが見つかりました。

image.png


能力のポリ塩化ビニールの宣言:volumeClaimTemplates

image.png


権限が両側に矛盾しています、

オペレーティング 

PVC myappdata-myappの-0 -nデーモンを削除kubectl PVCを削除します。

ファイルを削除YAML、新stateful.yaml -nデーモンを-f削除kubectl


accessModesを変更しよう:[ "ReadWriteMany"]


もう一度確認してください


image.png


ヒント:PVとPVCセットの権限注意


四、statefulsetテスト、DNS


kubectl幹部-it myappの-0 SH -nデーモン


nslookupをmyappの-0.myapp.daemon.svc.cluster.local


image.png


次のように解決ルール

          myappの-0 myappのデーモン  

FQDN:$(podname)(ヘッドレスサーバ名).namespace.svc.cluster.local。


いかなる容器nsllokupが存在しないように、対応するパケットをインストールするために、busyboxのは、同様の機能を提供することができます

 提供YAMLファイル

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: daemon
spec:
  containers:
  - name: busybox
    image: busybox:1.28.4
    command:
      - sleep
      - "7600"
    resources:
      requests:
        memory: "200Mi"
        cpu: "250m"
    imagePullPolicy: IfNotPresent
  restartPolicy: Never


image.png


五、statefulset  的扩缩容

 扩容:

Statefulset 资源的扩缩容与Deployment 资源相似,即通过修改副本数,Statefulset 资源的拓展过程,与创建过程类似,应用名称的索引号,依次增加

可使用 kubectl scale 

          kubectl patch 

 实践:kubectl scale statefulset myapp --replicas=4

image.png


 缩容:

  缩容只需要将pod 副本数调小

kubectlパッチstatefulset myappの-p '{ "スペック":{ "複製":3}} -N' デーモン


   image.png

ヒント:リソースのスケーリング能力、我々は動的にPVがどれだけ事前に作成されている使用は、NFS永続ストレージを、作っているPVのPVCとの結合関係を作成する必要があります


第六に、ローリングstatefulset更新 

  • ローリングアップデート

  • カナリアリリース


  ローリングアップデート

  ロールオーバーは、最大ポッド番号からのインデックスの始まりである、リソースの完全な停止は、次のポッドを作り始める、ロールオーバーがstatefulsetデフォルトのアップデートポリシーです

 kubectlセット画像statefulset / myappのmyappに= ikubernetes / myappに:v2の-nデーモン


アップグレードプロセス 


image.png


ビューポッドのステータス

ポッド-nデーモンを得るkubectl


image.png

アップグレードイメージを更新するかどうかの審査の後

ポッドmyappの-0 -nデーモンを記述kubectl


image.png




おすすめ

転載: blog.51cto.com/sdsca/2437821