Kubernetes基礎


Kubernetes是什么

Kubernetes是當今最流行的開源容器管理平台,它就是大名鼎鼎的Google Borg的開源版本。Google在2014年推出了Kubernetes,本文發布時最新的版本是1.11。Kubernetes源於希臘語,意為舵手,K8S是一個簡稱,因為首尾字母中間正好有8個字母。基於容器技術,Kubernetes可以方便的進行集群應用的部署、擴容、縮容、自愈機制、服務發現、負載均衡、日志、監控等功能,大大減少日常運維的工作量。

Kubernetes is primarily targeted at applications composed of multiple containers. It therefore groups containers using pods and labels into tightly coupled and loosely coupled formations for easy management and discovery.

Kubernets所有的操作都可以通過Kubernetes API來進行,通過API來操作Kubernetes中的對象,包括Pod、Service、Volume、Namespace等等。Kubernetes的整體結構如下圖所示:

Master

也叫做 Cluster Control Plane。

Node

Node 可以是一個物理機也可以是虛擬機,每個節點上都運行了可以運行 Pods 的服務。通過Master節點來進行管理。節點實際上是由雲供應商提供的,Kubernetes管理中創建節點實際上只是在Kubernetes中創建一個代表節點的對象。

Node 包含以下幾方面的信息:

  • Addresses:包括主機名、內部IP、外部IP。
  • Condition:描述運行的狀態,包括OutOfDisk、Ready、MemoryPressure、PIDPressure、DiskPressure、NetworkUnavailable、ConfigOK。
  • Capacity:描述節點資源的情況,包括CPU, memory and the maximum number of pods that can be scheduled onto the node.
  • Info:包括內核版本、Kubernetes版本、Docker版本、OS等基礎信息。

Kubernetes 對象 Objectes

Objects是Kubernetes生態中持久化的對象,這些對象反映了集群運行的狀態。這些狀態包括節點上運行了什么樣的應用(容器化的)、應用可以使用的資源、應用的管理策略。Kubernetes的Object是一種意圖的記錄,一旦創建了Objects,意味着你告訴K8S系統一直保持Objects處於你希望的狀態。Object包含Spec和Status兩個屬性,Spec包含對象的一些屬性,Status是對象的實際狀態。

舉例來說,Deployment 是代表集群中應用運行情況的 Object,創建一個 Deployment ,我們會指定Spec為同時運行三個實例。K8S會讀取Spec,然后運行三個實例。如果運行中其中一個實例有問題,K8S會重新運行一個實例。

上面說過Kubernetes通過API來操作對象,API接收json格式的參數,但是URL的拼接方式非常不直觀,因此我們可以將參數寫在 yaml 文件中。使用API操作對象時,需要通過Names或UID來唯一區分對象,例如/api/v1/pods/some-name這樣使用Name請求一個pod對象。Kubernetes中Names必須小於253個字符,僅能包含小寫的字母、-_。UID是Kubernetes為對象生成的唯一標識。

1. Pod

a single instance of an application in Kubernetes

Pod 是Kubernetes中可以創建和部署的最小單位。Pod包含了應用容器、存儲資源、唯一的網絡IP地址以及容器運行的參數。Pod內部的容器共享的網絡、存儲資源。Docker是Pod中最常用的容器運行環境,但仍允許用戶使用其他的容器環境。

Pod使用有兩種方式:一個容器一個Pod、一個Pod中運行多個容器。Pods設計的目標就是支持多個容器進程共同組合為一個服務,這種用法是一個相對高級的功能,僅有程序間存在緊耦合情況是才這么用。

Restarting a container in a Pod should not be confused with restarting the Pod. The Pod itself does not run, but is an environment the containers run in and persists until it is deleted.

Pod的生命周期有幾個狀態

2. Pods and Controller

Controller 在集群范圍內提供Pod的創建、管理、擴容、復制、自愈等功能。

2.1 Deployments

Deployment 是新一代用於 Pod 管理的對象,與 Replication Controller 相比,它提供了更加完善的功能,使用起來更加簡單方便。

2.2 StatefulSets

在 Kubernetes 中,Deployment 和 ReplicaSets 都是運行無狀態應用的有效手段。但這兩種方式對於有狀態應用來說就不太合適了。StatefulSet 的目的就是給為數眾多的有狀態負載提供正確的控制器支持。

2.3 DaemonSet

DaemonSet能夠讓所有(或者一些特定)的Node節點運行同一個pod。當節點加入到kubernetes集群中,pod會被(DaemonSet)調度到該節點上運行,當節點從kubernetes集群中被移除,被(DaemonSet)調度的pod會被移除,如果刪除DaemonSet,所有跟這個DaemonSet相關的pods都會被刪除。

2.4 ReplicationController

Replication Controller,稱為副本控制器。副本控制器的作用即保證集群中一個RC所關聯的Pod副本數始終保持預設值。

2.5 ReplicaSet

ReplicaSet 跟 ReplicationController 沒有本質的不同,只是名字不一樣,並且 ReplicaSet 支持集合式的 selector(ReplicationController 僅支持等式)。

2.6 Job

在有些場景下,是想要運行一些容器執行某種特定的任務,任務一旦執行完成,容器也就沒有存在的必要了。在這種場景下,創建pod就顯得不那么合適。於是就是了Job,Job指的就是那些一次性任務。通過Job運行一個容器,當其任務執行完以后,就自動退出,集群也不再重新將其喚醒。

2.7 Garbage Collection

Kubernetes進行垃圾回收管理的控制器,Kubernetes的垃圾回收由kubelet進行管理,每分鍾會查詢清理一次容器,每五分鍾查詢清理一次鏡像。在kubelet剛啟動時並不會立即進行GC,即第一次進行容器回收為kubelet啟動一分鍾后,第一次進行鏡像回收為kubelet啟動五分鍾后。

2.8 CronJob

這個比較容易理解,從字面也能看出來,是執行定時任務的控制器。

3. Service

Kubernetes的 Service 是一組 Pod 的邏輯抽象,這組 Pod 通過 Label 來定義。Service 的定義 yaml 如下。

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

上面的yaml定義了一組含有app=MyApp標簽的Pod共同組成一個名為my-service服務。Kubernetes支持兩種服務發現的模式:environment variables 和 DNS。

4. Volumes

我們知道容器中的文件系統是臨時的,一旦容器重新啟動,所有運行時對文件的操作都會丟失。Kubernetes使用Volumes來解決這個問題。不同於Docker自身的Volume,Kubernetes提供了Volume的生命周期管理,另外還提供了多種存儲形式的支持。在Pod的spec中指定volume的類型以及掛載的位置。

Kubernetes支持的volume的類型:awsElasticBlockStore、azureDisk、azureFile、cephfs、configMap、csi、downwardAPI、emptyDir、fc、local、nfs。

Add-ons

  • DNS
  • Ingress Controller
  • Heapster
  • Dashboard

歡迎關注我的微信公眾號

參考資料

  1. Kubernetes Introduction
  2. Kubernetes Concept
  3. Kubernetes Design and Architecture
  4. StatefulSet: Kubernetes 中對有狀態應用的運行和伸縮
  5. kubernetes DaemonSet資源對象
  6. Kubernetes對象之ReplicaSet


免責聲明!

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



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