溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

k8s 學習筆記 之 statefulset 應用 為何總是pending 狀態

發布時間:2020-07-21 21:09:30 來源:網絡 閱讀:3281 作者:水滴石川1 欄目:云計算


k8s pv 和 PVC 為何綁定不上


?使用statefuset 部署有狀態應用,應用總是處于pending 狀態,在開始之前先介紹什么是statefuset, 在 k8s 中一般用 deployment? 管理無狀態應用,statefuset 用來管理有狀態應用,如 redis 、mysql 、zookper 等分布式應用,這些應用的啟動停止都會有嚴格的順序?


一、statefulset??

  • headless (無頭服務),沒有cluserIP, 資源標識符,用于生成可解析的dns 記錄?

  • StatefulSet 用于pod 資源的管理

  • volumeClaimTemplates? 提供存儲


二、statefulset? 部署

  • 使用nfs 做網絡存儲

  • 搭建nfs

  • 配置共享存儲目錄

  • 創建pv

  • 編排 yaml?



? ? 搭建nfs?

? ? ?yum install nfs-utils -y?

? ? mkdir -p /usr/local/k8s/redis/pv{7..12} # 創建掛載目錄

?cat?/etc/exports
?
?/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/local/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?

? ?cat?nfs_pv2.yaml

apiVersion:?v1
kind:?PersistentVolume
metadata:
??name:?nfs-pv7
spec:
??capacity:
????storage:?500M
??accessModes:
????-?ReadWriteMany
??persistentVolumeReclaimPolicy:?Retain
??storageClassName:?slow
??nfs:
????server:?172.16.0.59
????path:?"/usr/local/k8s/redis/pv7"
---
apiVersion:?v1
kind:?PersistentVolume
metadata:
??name:?nfs-pv8

spec:
??capacity:
????storage:?500M
??accessModes:
????-?ReadWriteMany
??storageClassName:?slow
??persistentVolumeReclaimPolicy:?Retain
??nfs:
????server:?172.16.0.59
????path:?"/usr/local/k8s/redis/pv8"
---
apiVersion:?v1
kind:?PersistentVolume
metadata:
??name:?nfs-pv9

spec:
??capacity:
????storage:?500M
??accessModes:
????-?ReadWriteMany
??storageClassName:?slow
??persistentVolumeReclaimPolicy:?Retain
??nfs:
????server:?172.16.0.59
????path:?"/usr/local/k8s/redis/pv9"
---
apiVersion:?v1
kind:?PersistentVolume
metadata:
??name:?nfs-pv10

spec:
??capacity:
????storage:?500M
??accessModes:
????-?ReadWriteMany
??storageClassName:?slow
??persistentVolumeReclaimPolicy:?Retain
??nfs:
????server:?172.16.0.59
????path:?"/usr/local/k8s/redis/pv10"
---
apiVersion:?v1
kind:?PersistentVolume
metadata:
??name:?nfs-pv11

spec:
??capacity:
????storage:?500M
??accessModes:
????-?ReadWriteMany
??storageClassName:?slow
??persistentVolumeReclaimPolicy:?Retain
??nfs:
????server:?172.16.0.59
????path:?"/usr/local/k8s/redis/pv11"
---
apiVersion:?v1
kind:?PersistentVolume
metadata:
??name:?nfs-pv12

spec:
??capacity:
????storage:?500M
??accessModes:
????-?ReadWriteMany
??storageClassName:?slow
??persistentVolumeReclaimPolicy:?Retain
??nfs:
????server:?172.16.0.59
????path:?"/usr/local/k8s/redis/pv12"

? ?kubectl apply -f nfs_pv2.yaml

? ?

?查看 # 創建成功

k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態

?

? 編寫yaml 編排應用

apiVersion:?v1
kind:?Service
metadata:
??name:?myapp
??labels:
????app:?myapp
spec:
??ports:
??-?port:?80
????name:?web
??clusterIP:?None
??selector:
????app:?myapp-pod
---
apiVersion:?apps/v1
kind:?StatefulSet
metadata:
??name:?myapp
spec:
??serviceName:?myapp
??replicas:?3
??selector:
????matchLabels:
??????app:?myapp-pod
??template:
????metadata:
??????labels:
????????app:?myapp-pod
????spec:
??????containers:
??????-?name:?myapp
????????image:?ikubernetes/myapp:v1
????????resources:
??????????requests:
????????????cpu:?"500m"
????????????memory:?"500Mi"
????????ports:
????????-?containerPort:?80
??????????name:?web
????????volumeMounts:
????????-?name:?myappdata
??????????mountPath:?/usr/share/nginx/html
??volumeClaimTemplates:
??-?metadata:
??????name:?myappdata
????spec:
??????accessModes:?["ReadWriteOnce"]
??????storageClassName:?"slow"
??????resources:
????????requests:
??????????storage:?400Mi

?

??kubectl create -f new-stateful.yaml?

??

? 查看headless 創建成功


k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態


?查看pod 是否創建成功

k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態


查看pvc 是否創建成功

?k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態


pod 啟動沒有成功,依賴于pvc ,查看pvc 的日志,沒有找到對應的pvc,明明寫了啊


k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態

查看 關聯信息,有下面這個屬性

storageClassName:?"slow"




k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態?


三、statefulset? 排障

? pvc 無法創建,導致pod 無法正常啟動,yaml 文件重新檢查了幾遍,

思考的方向:pvc 如何綁定pv ,通過storageClassName 去關聯,pv 也創建成功了,也存在storageClassName: slow 這個屬性,結果愣是找不到

。。。。

。。。。

后面檢查pv 和pvc 的權限是否一直

發現pv 設置的權限

k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態


volumeClaimTemplates: 聲明的pvc 權限

k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態


兩邊的權限不一致,

操作?

刪除 pvc??kubectl delete pvc myappdata-myapp-0 -n daemon

刪除 yaml 文件, kubectl delete -f new-stateful.yaml -n daemon


嘗試修改??accessModes: ["ReadWriteMany"]


再次查看


k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態


提示:pv 和PVC 設定權限注


四、statefulset 測試,域名解析


kubectl exec -it myapp-0 sh -n daemon


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


k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態


解析的規則 如下

? ? ? ? ??myapp-0? ? ? ?myapp? ? ? ? ? ? ? ? ? ? ? ? ?daemon??

FQDN: $(podname).(headless server name).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


k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態


五、statefulset? 的擴縮容

?擴容:

Statefulset 資源的擴縮容與Deployment 資源相似,即通過修改副本數,Statefulset 資源的拓展過程,與創建過程類似,應用名稱的索引號,依次增加

可使用 kubectl scale?

? ? ? ? ? kubectl patch?

?實踐:kubectl scale statefulset myapp --replicas=4

k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態


?縮容:

? 縮容只需要將pod 副本數調小

kubectl patch statefulset myapp? -p '{"spec":{"replicas":3}}' -n daemon


? ?k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態

提示:資源擴縮容,需要動態創建pv 與pvc 的綁定關系,這里使用的是nfs 做持久化存儲,pv 的多少是預先創建的


六、statefulset 的滾動更新?

  • 滾動更新

  • 金絲雀發布


? 滾動更新

? 滾動更新 是從索引pod 號最大的開始的,終止完一個資源,在進行開始下一個pod ,滾動更新是 statefulset 默認的更新策略

?kubectl set image statefulset/myapp myapp=ikubernetes/myapp:v2 -n daemon


升級過程?


k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態


查看pod 狀態

kubectl get pods -n daemon


k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態

查看升級后鏡像是否更新

kubectl describe pod myapp-0 -n daemon


k8s  學習筆記 之  statefulset 應用 為何總是pending 狀態




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女