久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何解析k8s中pod控制器的Deployment、DaemonSet、StatefulSet

173次閱讀
沒有評論

共計 5331 個字符,預計需要花費 14 分鐘才能閱讀完成。

行業資訊    
服務器    
云計算    
如何解析 k8s 中 pod 控制器的 Deployment、DaemonSet、StatefulSet

本篇文章為大家展示了如何解析 k8s 中 pod 控制器的 Deployment、DaemonSet、StatefulSet,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

pod 控制器分類:
1、ReplicationController
2、ReplicaSet
3、Deployment
4、StatefulSet
5、DaemonSet
6、Job,Cronjob
7、HPA
pod 控制器:一般包括 3 部分
1、標簽選擇器
2、期望的副本數(DaemonSet 控制器不需要)
3、pod 模板
deploy 控制器構建于 rs 控制器之上,新特性包括:
1、事件和狀態查看
2、回滾
3、版本記錄
4、暫停和啟動
5、支持兩種自動更新方案
Recreate 刪除重建
RollingUpdate 回滾升級(默認方式)

創建 deploy
$ kubectl run –help
$ kubectl run nginx –image=nginx –port=80 –replicas=2        # 用命令直接創建
$ kubectl run nginx –image=nginx –port=80 –dry-run -o yaml

apiVersion: apps/v1
kind: Deployment
metadata:
 labels:
 run: nginx
 name: nginx
spec:
 replicas: 1
 selector:
 matchLabels:
 run: nginx
 template:
 metadata:
 labels:
 run: nginx
 spec:
 containers:
 - image: nginx
 name: nginx
 ports:
 - containerPort: 80

創建 deploy 控制器時會自動創建 rs 控制器,二者具有相同的標簽選擇器
$ kubectl get deploy
nginx                    1/1     1            1           7s
$ kubectl get rs

修改 pod 副本數的方式
1、kubectl edit deploy nginx
2、kubectl scale deploy nginx –replicas=5
3、修改 yaml 文件

升級 pod 鏡像的方法:
1、直接修改 yaml
2、kubectl edit deploy nginx
3、kubectl set image deploy/nginx nginx=nginx:1.9 –record        # 升級并記錄,可實現回滾,推薦使用該方法

滾動升級是 deployment pod 升級時的默認策略,也可以修改默認值
用命令 kubectl edit deploy nginx 可以查看默認值

 replicas: 3
 selector:
 matchLabels:
 run: nginx
 minReadySeconds: 5 # 默認看不到,需要手工添加
 strategy:
 rollingUpdate:
 maxSurge: 25%
 maxUnavailable: 25%
 type: RollingUpdate

默認情況下,當 6 個 pod 副本需要升級時:Kubernetes 將終止 1 個實例(625%=1.5 個實例,向下舍去 =1),創建 3 個新實例(625%=1.5 個實例,向上舍入 =2,加 1 個實例來彌補 1 個終止實例 = 3 個實例),此時總共運行 8 個副本。一旦新的 pod 就緒,它將從舊的副本集中終止另外 2 個實例,以便將部署恢復到所需的副本數,然后重復這個過程,直到部署完成為止。
minReadySeconds:Kubernetes 在等待設置的時間后才進行升級
maxSurge:升級過程中最多可以比原先設置多出的 POD 數量
maxUnavaible:升級過程中最多有多少個 POD 處于無法提供服務的狀態

滾動升級相關命令
$ kubectl set image deploy/nginx nginx=nginx:1.7.9 –record
$ kubectl set image deploy/nginx nginx=nginx –record
$ kubectl rollout status deploy nginx        # 查看升級狀態
$ kubectl rollout pause deployment nginx        # 升級暫停
$ kubectl rollout resume deployment nginx       #恢復升級
$ kubectl describe deploy nginx         #查看升級詳情
$ kubectl rollout history deploy/nginx        # 查看升級歷史
deployment.extensions/nginx
REVISION  CHANGE-CAUSE
4         kubectl set image deploy/nginx nginx=nginx:1.7.9 –record=true
5         kubectl set image deploy/nginx nginx=nginx –record=true
$ kubectl rollout history deployment nginx –revision=5
$ kubectl rollout undo deployment/nginx –to-revision=4          # 回滾到指定版本
$ kubectl rollout undo deployment nginx-deploy        # 回滾到前一個版本

顯式指定滾動升級參數

apiVersion: apps/v1
kind: Deployment
metadata:
 labels:
 run: nginx
 name: nginx
spec:
 replicas: 1
 selector:
 matchLabels:
 run: nginx
 minReadySeconds: 5 
 strategy:
 rollingUpdate:
 maxSurge: 1
 maxUnavailable: 1
 type: RollingUpdate
 template:
 metadata:
 labels:
 run: nginx
 spec:
 containers:
 - image: nginx
 name: nginx
 ports:
 - containerPort: 80

DaemonSet 用于在每個 Kubernetes 節點中將守護進程的副本作為后臺進程運行,說白了就是在每個節點部署一個 Pod 副本,當節點加入到 Kubernetes 集群中,Pod 會被自動調度到該節點上運行。
每個節點有一個 ds pod,新加入的節點也會自動生成一個 ds pod
ds pod 不受調度策略控制
使用 DaemonSe 場景:
1、集群存儲守護程序,如 glusterd、ceph 要部署在每個節點上以提供持久性存儲;
2、節點監視守護進程,如 Prometheus 監控集群,可以在每個節點上運行一個 node-exporter 進程來收集監控節點的信息;
3、日志收集守護程序,如 fluentd 或 logstash,在每個節點上運行以收集容器的日志
示例:

kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
 name: nginx-ds
 labels:
 k8s-app: nginx
spec:
 template:
 metadata:
 labels:
 k8s-app: nginx
 spec:
 containers:
 - image: nginx:1.7.9
 name: nginx
 ports:
 - name: http
 containerPort: 80

無狀態服務(Stateless Service):所有 pod 只需要共享一個持久存儲,并不需要每個 pod 一個持久存儲,并且多個實例對于同一個請求響應的結果是完全一致的
有狀態服務(Stateful Service):每個 pod 都需要一個獨立的持久存儲,對于這種類型的資源,我們一般是通過創建一個 Headless Service 類型的服務來暴露服務,將 clusterIP 設置為 None 就是一個無頭的服務。
1、有狀態服務一般使用 pvc 模板和存儲類為每個 pod 自動生成一對 pv 和 pvc 來實現持久化存儲。
2、也可以手動創建 pv,然后和利用 StatefulSet 中的 volumeClaimTemplates 自動生成的 pvc 進行配對。

手動創建 pv 用于 StatefulSet
1、創建兩個 pv

apiVersion: v1
kind: PersistentVolume
metadata:
 name: pv001 # 第二個是 pv002
 labels:
 release: stable
spec:
 capacity:
 storage: 1Gi
 accessModes:
 - ReadWriteOnce
 persistentVolumeReclaimPolicy: Recycle
 hostPath:
 path: /tmp/data

2、先創建無頭服務

apiVersion: v1
kind: Service
metadata:
 name: nginx
spec:
 ports:
 - port: 80
 name: web
 clusterIP: None
 selector:
 app: nginx
 role: stateful

3、創建 StatefulSet pod 使用 pv

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
 name: web
spec:
 serviceName:  nginx  # 使用上面創建的無頭服務
 replicas: 2
 template:
 metadata:
 labels:
 app: nginx
 role: stateful
 spec:
 containers:
 - name: nginx
 image: cnych/nginx-slim:0.8
 ports:
 - containerPort: 80
 name: web
 volumeMounts:
 - name: www
 mountPath: /usr/share/nginx/html
 volumeClaimTemplates:
 - metadata:
 name: www
 spec:
 accessModes: [  ReadWriteOnce  ]
 resources:
 requests:
 storage: 1Gi

volumeClaimTemplates 會根據其對應的 pv 自動生成 pvc 并自動配對,數量由 replicas: 2 決定。

使用 pvc 模板和存儲類自動生成 pv 和 pvc
1、創建存儲類

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
 name: course-nfs-storage
provisioner: fuseim.pri/ifs

2、先創建無頭服務

apiVersion: v1
kind: Service
metadata:
 name: nfs-web
spec:
 ports:
 - port: 80
 name: web
 clusterIP: None
 selector:
 app: nginx
 role: stateful

3、使用存儲類創建 StatefulSet pod

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
 name: nfs-web
spec:
 serviceName:  nfs-web  # 使用上面創建的無頭服務
 replicas: 2
 template:
 metadata:
 labels:
 app: nfs-web
 spec:
 terminationGracePeriodSeconds: 10
 containers:
 - name: nginx
 image: nginx
 ports:
 - containerPort: 80
 name: web
 volumeMounts:
 - name: www
 mountPath: /usr/share/nginx/html
 volumeClaimTemplates:
 - metadata:
 name: www
 annotations:
 volume.beta.kubernetes.io/storage-class: course-nfs-storage
 spec:
 accessModes: [  ReadWriteOnce  ]
 #storageClassName: course-nfs-storage  使用存儲類
 resources:
 requests:
 storage: 1Gi

會自動生成兩對 pv 和 pvc

上述內容就是如何解析 k8s 中 pod 控制器的 Deployment、DaemonSet、StatefulSet,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計5331字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 青神县| 乌拉特后旗| 武鸣县| 武穴市| 冕宁县| 大洼县| 云霄县| 甘德县| 迭部县| 千阳县| 勐海县| 九龙坡区| 罗平县| 洛扎县| 南宫市| 岳阳县| 孟津县| SHOW| 盈江县| 富阳市| 微山县| 惠东县| 田阳县| 永济市| 涿州市| 尖扎县| 稻城县| 临汾市| 牡丹江市| 绥化市| 曲麻莱县| 宁明县| 嘉黎县| 东海县| 嘉义市| 阿拉善右旗| 安阳市| 元谋县| 遂川县| 德保县| 平果县|