kubernetes資源物件kind
PetSet首次在K8S1.4版本中,在1.5更名為StatefulSet。除了改了名字之外,這一API物件並沒有太大變化。
注意:以下內容的驗證環境為CentOS7、K8S版本1.5.2,並部署SkyDNS。
http://blog.csdn.net/liyingke112/article/details/76685794
https://blog.csdn.net/liyingke112/article/details/76914754
https://kubernetes.io/docs/concepts/storage/volumes/
概念
在雲原生應用的體系裡,有下面兩組近義詞;
第一組是無狀態(stateless)、牲畜(cattle)、無名(nameless)、可丟棄(disposable);
第二組是有狀態(stateful)、寵物(pet)、有名(having name)、不可丟棄(non-disposable)。
無狀態:ReplicationController (最初的),ReplicaSet(下一代ReplicationController),Deployment(最新的,更好的管理ReplicaSet和pod) ,具體看(https://blog.csdn.net/Michaelwubo/article/details/80759388)主要是控制無狀態服務,Pod的名字是隨機設定的,重建後新的Pod名字變了,名字和部署在哪兒都不重要,重要的只是Pod總數。
有狀態:PetSet/StatefulSet
應用場景
有狀態服務:資料庫服務MySQL和PostgreSQL
叢集化管理服務Zookeeper、etcd等有狀態服務。
作為一種比普通容器更穩定可靠的模擬虛擬機器的機制。傳統的虛擬機器正是一種有狀態的寵物,運維人員需要不斷地維護它,容器剛開始流行時,用容器來模擬虛擬機器使用,所有狀態都儲存在容器裡,而這已被證明是非常不安全、不可靠的。使用PetSet/StatefulSet,Pod仍然可以通過漂移到不同節點提供高可用,而儲存也可以通過外掛的儲存來提供高可靠性,PetSet/StatefulSet做的只是將確定的Pod與確定的儲存關聯起來保證狀態的連續性。
特性
pod穩定的唯一網路標識
擁有固定的:pod名稱、主機名、DNS域名等。注意pod的IP地址會變化的。
如果PetSet/StatefulSet名是web,replicas為2,則pod命名:web-0,web-1。並擁有固定的主機名和域名,完整域名格式為pod名.service名.namespace名.svc.域名。
當pod被遷移重新啟動後,將保持原有的pod名稱重新啟動。例如web-0的Pod失敗後,K8s將在叢集中重啟一個同名為web-0的pod。
該域名在叢集內可用。這與k8s service的域名有所區別,帶主機名的域名能定位到某一個pod主機,而service級別的域名只能定位到某一個服務。
通過一種叫HeadlessService的特殊Service來實現的。和普通Service相比,Headless Service沒有Cluster IP,用於為一個叢集內部的每個成員提供一個唯一的DNS名字,用於叢集內部成員之間通訊。
不部署HeadlessService的話,不是使用訪問,但可以使用IP地址訪問。
pod擁有穩定的持久儲存
PetSet/StatefulSet內每一個pod都擁有各自的pvc持久化儲存。具體詳情https://blog.csdn.net/Michaelwubo/article/details/80759605
該特效能更好的支援分散式叢集應用的資料同步,如類似etcd叢集這樣的有狀態應用,節點間是需要進行資料同步的,當etcd叢集的某個pod節點重啟後,依然能夠重新掛載原有的節點資料,重新保持資料複製、同步。
有序啟動pod
PetSet/StatefulSet啟動pod時,按固定的順序去啟動的,其總是優先啟動數字編號更小的Pod。例如:web-0優先於web-1啟動,web-1優先於web-2啟動。
對於啟動順序有要求的有狀態服務來說,該特性是非常重要的。
使用限制
必須部署PV和PVC
為了讓pod擁有穩定的持久儲存,必須使用持久化儲存PV和PVC,增加了複雜性。詳情請見:https://blog.csdn.net/Michaelwubo/article/details/80759605
若PV使用nfs等無法通過呼叫API來建立儲存的網路儲存,PVC要在建立PetSet/StatefulSet1前靜態建立,如果先建立PetSet/StatefulSet1,而沒有建立PVC的話,將會自動建立PVC,但相關引數無法修改;
若為aws-ebs、vSphere、openstack Cinder等可以通過API呼叫來動態建立儲存的虛擬儲存,PVC除了可以通過靜態的方式建立外,還可以通過StorageClass進行動態建立。
需要注意的是,動態創建出來的PV,預設的回收策略是delete,及在刪除資料的同時,還會把虛擬儲存卷刪除。
刪除或縮容PetSet/StatefulSet不會刪除對應的儲存卷容量。這是為了保證資料的安全,因為對待PetSet/StatefulSet的資料普通的做法比自動回收資源更實用。
必須部署Headless Service
和普通Service相比,Headless Service沒有Cluster IP,在PetSet/StatefulSet中起到pod域名解析功能。
如果沒有部署HeadlessService的話,PetSet/StatefulSet下的pod,無法通過域名進行訪問。
必須手動更新pod
只能通過手動的方式升級PetSet/StatefulSet。
無法使用kubectl edit方式、類似與deployment(kubectl set image)和RC方式升級。能正常使用kubectledit編輯線上yaml檔案,即使重啟pod所在的node節點,也無法生效。
建立時命名規則有要求
如下面的例子:
StatefulSet:StatefulSet名稱為lykops-sfs,卷名為pvc
PV:pv-lykops-sfs-{0,1}
PVC:pvc-lykops-sfs-{0,1}
規則如下:
PVC和PV的命名規則為:資源型別-StatefulSet名稱-副本數序號(從0開始)
建立時PV和PVC的yaml規則有要求
除了命名規則外,還需要保證訪問accessModes、resources這兩個一樣
按照以上規則建立後,可以看到PV和PVC能關聯起來
擴容難
在擴容前,需要先部署好對應的PV和PVC
節點宕機,pod無法切換
當pod所在節點出現宕機,無法切換到其他node上執行。解決辦法是恢復該節點工作。
建立範例
https://blog.csdn.net/Michaelwubo/article/details/80763586
PV
- cat << EOF > pv-lykops-sfs-0.yaml
- apiVersion: v1
- kind: PersistentVolume
- metadata:
- name: pv-lykops-sfs-0
- labels:
- type: nfs
- app: pv
- version: v1
- spec:
- capacity:
- storage: 1Gi
- accessModes:
- - ReadWriteMany
- persistentVolumeReclaimPolicy: Recycle
- nfs:
- path: /mysql/data
- server: 10.30.30.128
- readOnly: false
- EOF
- kubectl create -f pv-lykops-sfs-0.yaml
PVC
- cat << EOF > pvc-lykops-sfs-0.yaml
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: pvc-lykops-sfs-0
- labels:
- type: nfs
- app: pvc
- version: v1
- spec:
- accessModes:
- - ReadWriteMany
- resources:
- requests:
- storage: 1Gi
- EOF
- kubectl create -f pvc-lykops-sfs-0.yaml
Headless Service
- cat << EOF >lykops-sfs-headlessservice.yaml
- apiVersion: v1
- kind: Service
- metadata:
- name: lykops-sfs
- labels:
- software: apache
- project: lykops
- app: lykops-sfs
- version: v1
- spec:
- ports:
- - port: 80
- name: apache
- clusterIP: None
- selector:
- software: apache
- project: lykops
- app: lykops-sfs
- version: v1
- EOF
- kubectl create -f lykops-sfs-headlessservice.yaml
StatefulSet
- cat << EOF > lykops-sfs.yaml
- apiVersion: apps/v1beta1
- kind: StatefulSet
- metadata:
- name: lykops-sfs
- labels:
- software: apache
- project: lykops
- app: lykops-sfs
- version: v1
- spec:
- serviceName: lykops-sfs
- template:
- metadata:
- labels:
- software: apache
- project: lykops
- app: lykops-sfs
- version: v1
- name: lykops-sfs
- spec:
- containers:
- - name: lykops-sfs
- image: hub.c.163.com/library/nginx:latest
- ports:
- - containerPort: 80
- name: apache
- volumeMounts:
- - name: pvc
- mountPath: /mnt
- volumeClaimTemplates:
- -metadata:
- name: pvc
- spec:
- accessModes:
- - ReadWriteMany
- resources:
- requests:
- storage: 1Gi
- EOF
- kubectl create -f lykops-sfs.yaml
相關推薦
kubernetes資源物件kind
PetSet首次在K8S1.4版本中,在1.5更名為StatefulSet。除了改了名字之外,這一API物件並沒有太大變化。注意:以下內容的驗證環境為CentOS7、K8S版本1.5.2,並部署SkyDNS。http://blog.csdn.net/liyingke112/a
kubernetes資源物件--deployment
本文基於kubernetes 1.5.2版本編寫 概念 Deployment(中文意思為部署、排程)提供了一種更加簡單的更新RC和Pod的機制,K8S版本1.2實現的。通過在Deployment中描述所期望的叢集狀態,Deployment Controller會將現在的叢集狀態在一個可控的速度下逐步更新成
kubernetes資源物件ConfigMap學習(一)
生產環境中很多應用程式的配置可能需要通過配置檔案,命令列引數和環境變數的組合配置來完成。這些配置應該從image中解耦,以此來保持容器化應用程式的可移植性。在K8S1.2後引入ConfigMap來處理這種型別的配置資料。ConfigMap API資源提供了將配置資料注入容器的
kubernetes資源物件--Label
本文基於kubernetes 1.5.2版本編寫 概念 Label機制是K8S中一個重要設計,通過Label進行物件弱關聯,靈活地分類和選擇不同服務或業務,讓使用者根據自己特定的組織結構以鬆耦合
kubernetes資源物件--Horizontal Pod Autoscaling(HPA)
下文基於kubernetes 1.5.2版本編寫 概念 HPA全稱Horizontal Pod Autoscaling,即pod的水平自動擴充套件。自動擴充套件主要分為兩種,其一為水平擴充套件,針對於例項數目的增減;其二為垂直擴充套件,即單個例項可以使用的資源的增減。HPA屬於前者。 HPA的操作物件是
kubernetes資源物件--pod和job
pod Pod是K8S的最小操作單元,一個Pod可以由一個或多個容器組成; 整個K8S系統都是圍繞著Pod展開的,比如如何部署執行Pod、如何保證Pod的數量、如何訪問Pod等。 特點 Pod是能夠被建立、排程和管理的最小單元; 每個Pod都有一個獨立的IP; 一個Pod由一個或多個容器構成,並共
Kubernetes 資源物件
[TOC] >在k8s中所有的物件都叫做資源,例如:pod,service等 #Pod 資源 pod是在k8s中最小單元,前面有提到,k8s支援自愈,彈性擴容等高階特性,那麼如果單純的在k8s節點中跑業務docker是沒有辦法支援這些高階特性,必須要有定製化的容器,那麼,pod就是這個官方已經定製化好的支
kubernetes建立資源物件
1.建立deployment資源物件 # cat nginx-deployment.yml apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment spec:
如何擴充套件Kubernetes管理的資源物件?
Kubernetes是一套容器化解決方案,也是一套資源管理的架構和標準;本次分享是基於我在餓了麼現階段容器化經驗和理念的總結,探討深化Kubernetes在企業內部的應用的方法,介紹如何利用開源的API Server框架在企業內部打造和擴充套件Kubernetes管理的資源物件。 Kubernet
kubernetes建立資源物件yaml檔案例子--pod
kubernetes建立pod的yaml檔案,引數說明 apiVersion: v1 #指定api版本,此值必須在kubectl apiversion中 kind: Pod #指定建立資源的
kubernetes DaemonSet資源物件
What is a DaemonSet? DaemonSet能夠讓所有(或者一些特定)的Node節點運行同一個pod。當節點加入到kubernetes叢集中,pod會被(DaemonSet)排程到該節點上執行,當節點從kubernetes叢集中被移除,被(DaemonS
kubernetes federation 工作機制之資源物件同步
01 前言希望通過本文最簡單的方式向熟悉k8s的人說明白其上的federation是幹什麼的,如何工作的。關於federation,比較官方的說法是:叢集聯邦可以讓租戶/企業根據需要擴充套件或伸縮所需要的叢集;可以讓租戶/企業在跨地區甚至跨地域的多個叢集上部署、排程、監測管理應用。通過叢集聯邦,租戶/企業可以
kubernetes--優雅刪除資源物件
本文基於kubernetes 1.5.2版本編寫 當用戶請求刪除含有pod的資源物件時(如RC、deployment等),K8S為了讓應用程式優雅關閉(即讓應用程式完成正在處理的請求後,再關閉
深入解析 kubernetes 資源管理,容器雲牛人有話說
系統 關系 充足 sig 配置信息 解釋 進行 解決 由於 資源,無論是計算資源、存儲資源、網絡資源,對於容器管理調度平臺來說都是需要關註的一個核心問題。 ? 如何對資源進行抽象、定義?? 如何確認實際可以使用的資源量?? 如何為容器分配它所申請的資源? 這些問題都是平
kubernetes 資源請求和限制
container 就會 如果 嚴格 可用 source 特殊情況 資源 節點 1. spec: containers: - name: example resources: requests:
kubernetes資源創建詳解【持續完善中】
edi arr 顯示 replicat _id describe load 主機名 create 目錄 資源創建詳解 一:Pod及常用參數 1.簡介 2.模板 3.刪除pod 4.設置Pod主機名 5.鏡像拉取策略(ImagePullPolicy) 二:RC 1.簡介
Kubernetes資源排程3-資源動態排程
基於Kubernetes的容器雲平臺資源排程策略 該篇論文質量較高,認真學習一下。 排程思想大致分為兩種 擴散以及貪心。 擴散:儘量將服務排程到不同的叢集節點上以此來保證資源的均衡利用率,避免單機故障的風險 貪心:儘量將所有服務排程到同一節點上,提高資源的利用率 叢集
Kubernetes資源排程2-資源動態排程
1.基於SLA驅動的資源動態排程演算法 將應用分為不同型別,將不同應用排程到不同資源狀態節點上,減少應用因資源不足帶來的問題,根據SLA協議實時監控應用資源使用狀況,動態調整應用資源佔用率,提高資源使用率。 SLA協議:Service-Level Agreement的縮寫,意思是服務等級協議
Kubernetes資源排程1--k8s資源排程
研究一下Kubernetes的資源排程器的實現原理以及大神們的改進。 k8s的基本架構如下: Scheduler排程器做為Kubernetes三大核心元件之一, 承載著整個叢集資源的排程功能,其根據特定排程演算法和策略,將Pod排程到最優工作節點上,從而更合理與充分的利用叢集計算資源。
收集 Kubernetes 資源統計資料的新工具
零配置工具簡化了資訊收集,例如在某個名稱空間中運行了多少個 pod。 最近我在紐約的 O'Reilly Velocity 就 Kubernetes 應用故障排除的主題發表了演講,並且在積極的反饋和討論的推動下,我決定重新審視這個領域的工具。結