1. 程式人生 > >kubernetes資源物件kind

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

是用來部署和管理有狀態服務。PetSet/StatefulSet中的每個Pod的名字都是事先確定的,不能更改,能提供固定的DNS名稱、pod級別的持久化儲存和有序podPod名字是用來關聯與該Pod對應的狀態。

應用場景

有狀態服務:資料庫服務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

  1. cat << EOF > pv-lykops-sfs-0.yaml  
  2. apiVersion: v1  
  3. kind: PersistentVolume  
  4. metadata:  
  5.  name: pv-lykops-sfs-0  
  6.  labels:  
  7.    type: nfs  
  8.    app: pv  
  9.    version: v1  
  10. spec:  
  11.  capacity:  
  12.    storage: 1Gi  
  13.  accessModes:  
  14.    - ReadWriteMany  
  15.  persistentVolumeReclaimPolicy: Recycle  
  16.   nfs:  
  17.    path: /mysql/data 
  18.    server: 10.30.30.128  
  19.    readOnly: false  
  20. EOF  
  21. kubectl create -f pv-lykops-sfs-0.yaml  

PVC

  1. cat << EOF > pvc-lykops-sfs-0.yaml  
  2. apiVersion: v1  
  3. kind: PersistentVolumeClaim  
  4. metadata:  
  5.  name: pvc-lykops-sfs-0  
  6.  labels:  
  7.    type: nfs  
  8.    app: pvc  
  9.    version: v1  
  10. spec:  
  11.  accessModes:  
  12.    - ReadWriteMany  
  13.  resources:  
  14.    requests:  
  15.      storage: 1Gi  
  16. EOF  
  17. kubectl create -f pvc-lykops-sfs-0.yaml  

Headless Service

  1. cat << EOF >lykops-sfs-headlessservice.yaml  
  2. apiVersion: v1   
  3. kind: Service   
  4. metadata:  
  5.  name: lykops-sfs  
  6.  labels:  
  7.    software: apache  
  8.    project: lykops  
  9.    app: lykops-sfs  
  10.    version: v1  
  11. spec:   
  12.  ports:   
  13.  - port: 80   
  14.    name: apache   
  15.  clusterIP: None   
  16.  selector:   
  17.    software: apache  
  18.    project: lykops  
  19.    app: lykops-sfs  
  20.    version: v1  
  21. EOF  
  22. kubectl create -f lykops-sfs-headlessservice.yaml  

StatefulSet

  1. cat << EOF > lykops-sfs.yaml  
  2. apiVersion: apps/v1beta1   
  3. kind: StatefulSet   
  4. metadata:  
  5.  name: lykops-sfs  
  6.  labels:  
  7.    software: apache  
  8.    project: lykops  
  9.    app: lykops-sfs  
  10.    version: v1  
  11. spec:  
  12.  serviceName: lykops-sfs  
  13.  template:  
  14.    metadata:  
  15.      labels:  
  16.        software: apache  
  17.        project: lykops  
  18.        app: lykops-sfs  
  19.        version: v1  
  20.        name: lykops-sfs  
  21.    spec:  
  22.      containers:  
  23.      - name: lykops-sfs  
  24.        image: hub.c.163.com/library/nginx:latest
  25.        ports:  
  26.        - containerPort: 80  
  27.          name: apache  
  28.        volumeMounts:  
  29.        - name: pvc  
  30.          mountPath: /mnt
  31.  volumeClaimTemplates:  
  32.   -metadata:  
  33.      name: pvc  
  34.    spec:  
  35.      accessModes:  
  36.      - ReadWriteMany  
  37.      resources:  
  38.        requests:  
  39.          storage: 1Gi  
  40. EOF  
  41. 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 應用故障排除的主題發表了演講,並且在積極的反饋和討論的推動下,我決定重新審視這個領域的工具。結