なぜ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を適用
ビュー#が正常に作成します
スケジューリングアプリケーション書か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
ビューヘッドレスは正常に作成します
ビューポッドが正常に作成され
成功したPVCを作成するかどうかを確認してください
成功なしポッドスタートは、PVC、PVCログビュー、PVCが見つからない場合、対応する、明確に書かれてああに依存します
関連情報を表示し、次の属性を持っています
storageClassName: "遅いです"
三、statefulsetトラブルシューティング
PVCを作成することができない、ポッドに結果が正常に起動しない、YAMLファイルの再検討に数回、
思想について:PVをバインドする方法PVC、関連storageClassName通過し、PVが成功し、そこに作成storageClassName:この属性を遅くし、その結果は見つかりません唖然
....
....
PVとPVCバックの許可がされているかどうかをチェックします
権限のPVセットが見つかりました。
能力のポリ塩化ビニールの宣言:volumeClaimTemplates
権限が両側に矛盾しています、
オペレーティング
PVC myappdata-myappの-0 -nデーモンを削除kubectl PVCを削除します。
ファイルを削除YAML、新stateful.yaml -nデーモンを-f削除kubectl
accessModesを変更しよう:[ "ReadWriteMany"]
もう一度確認してください
ヒント:PVとPVCセットの権限注意
四、statefulsetテスト、DNS
kubectl幹部-it myappの-0 SH -nデーモン
nslookupをmyappの-0.myapp.daemon.svc.cluster.local
次のように解決ルール
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
五、statefulset 的扩缩容
扩容:
Statefulset 资源的扩缩容与Deployment 资源相似,即通过修改副本数,Statefulset 资源的拓展过程,与创建过程类似,应用名称的索引号,依次增加
可使用 kubectl scale
kubectl patch
实践:kubectl scale statefulset myapp --replicas=4
缩容:
缩容只需要将pod 副本数调小
kubectlパッチstatefulset myappの-p '{ "スペック":{ "複製":3}} -N' デーモン
ヒント:リソースのスケーリング能力、我々は動的にPVがどれだけ事前に作成されている使用は、NFS永続ストレージを、作っているPVのPVCとの結合関係を作成する必要があります
第六に、ローリングstatefulset更新
ローリングアップデート
カナリアリリース
ローリングアップデート
ロールオーバーは、最大ポッド番号からのインデックスの始まりである、リソースの完全な停止は、次のポッドを作り始める、ロールオーバーがstatefulsetデフォルトのアップデートポリシーです
kubectlセット画像statefulset / myappのmyappに= ikubernetes / myappに:v2の-nデーモン
アップグレードプロセス
ビューポッドのステータス
ポッド-nデーモンを得るkubectl
アップグレードイメージを更新するかどうかの審査の後
ポッドmyappの-0 -nデーモンを記述kubectl