k8s 有無狀態部署應用概述(deployment,sts,ds)


Deployment

概念概述

用於部署無狀態的服務,這個最常用的控制器。一般用於管理維護企業內部無狀態的微服務,比如configserver、zuul、springboot。他可以管理多個副本的Pod實現無縫遷移、自動擴容縮容、自動災難恢復、一鍵回滾等功能。

Deployment創建

手動創建:kubectl create deployment nginx --image=nginx:1.15.2

導出yaml 文件

kubectl get deployment nginx -oyaml > nginx-deploy.yaml

文件內容改動后可以replace 操作相當於重啟

kubectl replace -f nginx-deploy.yaml

也可以直接在線編輯改動,用edit

kubectl edit deployment nginx
deployment 的更新

更改deployment 的鏡像並記錄:

kubectl set image deployment nginx nginx=nginx:1.15.3 --record
deployment 擴容與伸縮
#擴容
kubectl scale --replicas=3 deploy nginx
#縮容
kubectl scale --replicas=2 deploy nginx

StatefulSet有狀態應該用管理
StatefulSet(有狀態集,縮寫為sts)常用於部署有狀態的且需要有序啟動的應用程序,比如在進行SpringCloud項目容器化時,Eureka的部署是比較適合用StatefulSet部署方式的,可以給每個Eureka實例創建一個唯一且固定的標識符,並且每個Eureka實例無需配置多余的Service,其余Spring Boot應用可以直接通過Eureka的Headless Service即可進行注冊。

Eureka的statefulset的資源名稱是eureka,eureka-0 eureka-1 eureka-2

Service:headless service,沒有ClusterIP eureka-svc

Eureka-0.eureka-svc.NAMESPACE_NAME eureka-1.eureka-svc …

statefulset

基本概念

StatefulSet主要用於管理有狀態應用程序的工作負載API對象。比如在生產環境中,可以部署ElasticSearch集群、MongoDB集群或者需要持久化的RabbitMQ集群、Redis集群、Kafka集群和ZooKeeper集群等。

和Deployment類似,一個StatefulSet也同樣管理着基於相同容器規范的Pod。不同的是,StatefulSet為每個Pod維護了一個粘性標識。這些Pod是根據相同的規范創建的,但是不可互換,每個Pod都有一個持久的標識符,在重新調度時也會保留,一般格式為StatefulSetName-Number。比如定義一個名字是Redis-Sentinel的StatefulSet,指定創建三個Pod,那么創建出來的Pod名字就為Redis-Sentinel-0、Redis-Sentinel-1、Redis-Sentinel-2。而StatefulSet創建的Pod一般使用Headless Service(無頭服務)進行通信,和普通的Service的區別在於Headless Service沒有ClusterIP,它使用的是Endpoint進行互相通信,

Headless一般的格式為:

statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local

statefulset 注意事項
一般StatefulSet用於有以下一個或者多個需求的應用程序:
需要穩定的獨一無二的網絡標識符。
需要持久化數據。
需要有序的、優雅的部署和擴展。
需要有序的自動滾動更新。
如果應用程序不需要任何穩定的標識符或者有序的部署、刪除或者擴展,應該使用無狀態的控制器部署應用程序,比如Deployment或者ReplicaSet。

StatefulSet是Kubernetes 1.9版本之前的beta資源,在1.5版本之前的任何Kubernetes版本都沒有。
Pod所用的存儲必須由PersistentVolume Provisioner(持久化卷配置器)根據請求配置StorageClass,或者由管理員預先配置,當然也可以不配置存儲。
為了確保數據安全,刪除和縮放StatefulSet不會刪除與StatefulSet關聯的卷,可以手動選擇性地刪除PVC和PV(關於PV和PVC請參考2.2.12節)。
StatefulSet目前使用Headless Service(無頭服務)負責Pod的網絡身份和通信,需要提前創建此服務。
刪除一個StatefulSet時,不保證對Pod的終止,要在StatefulSet中實現Pod的有序和正常終止,可以在刪除之前將StatefulSet的副本縮減為0。

DaemonSet

daemonset 是什么?

DaemonSet:守護進程集,縮寫為ds,在所有節點或者是匹配的節點上都部署一個Pod。

使用DaemonSet的場景

Ø 運行集群存儲的daemon,比如ceph或者glusterd

Ø 節點的CNI網絡插件,calico

Ø 節點日志的收集:fluentd或者是filebeat

Ø 節點的監控:node exporter

Ø 服務暴露:部署一個ingress nginx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM