---
# System prepended metadata

title: Study notes of kube by example

---

---
title: Study notes of kube by example
---

## [TOC]

## Pods
`共同一個網路的containers集合，是k8s的基本部署單元，在一個pod的所有containers都被安排在相同的node`
## Labels
`用來組織k8s物件的機制，一個label是一個有長度和允許值限制的鍵值對，但沒有任何預定義的含義，可以自由選擇合適的label，例如表達pod的運作環境環境或所有權。`
## Deployments
`是pod的監督者，用來控制pod如何與何時進行更版或還原。`
## Services
`一個服務是pod的抽象，提供一個穩定的virtual IP (VIP) 位址，當pods各自有不同的IP而且隨著重新建立而改動，一個服務允許clients使用VIP可靠地連接到pod中的containers。使用virtual這個字是因為它不是一個連接到網路介面的真實IP位址，它的用途單純是用來轉發流量到一個或多個pods。保持VIP和pods對應的更新是kube-proxy的工作，每個節點都需要運行kube-proxy，它透過API伺服器查詢在cluster中的新服務`
## Port Forwarding
`開發在k8s中的應用程式時，若能夠快速存取在本地端的服務而不用將它暴露出來，這通常很有用，例如使用負載平衡或ingress資源 (resource)，在這些情況下可以使用連接埠轉發 (port forwarding)。`
## Health Checks
`為了驗證在一個pod中的一個container是健康而且已準備好提供流量，k8s提供了一系統的健康檢查機制。健康檢查，在k8s又叫探針 (probes)，由kubelet運行，liveness probes決定何時可以重啟container，readiness probes被services和deployments使用來決定一個pod是否應該接收流量。這裡將會專注在HTTP的健康檢查，請注意開發人員有責任提供一個URL讓kubelet可以使用來決定是否container的健康與否，並且已準備就緒`
## Environment Variables
`可以為在一個pod中運行的containers設定環境變數，而且k8s也會自動將某些運行環境的參數透過環境變數暴露出來。`
## Namespaces
`命名空間為k8s的資源提供一個範圍，將叢集劃分為更小的單位。可以把它當成一個與其他使用者的工作空間，很多資源包括pods、services都能設定命名空間，無法設定命名空間的，將視為叢集範圍的。作為開發者，你通常會使用一個被指派的命名空間；對於管理者而言，通常會想要管理它們，例如存取控制與資源配額。`
## Volumes
`k8s的volume本質上是在一個pod中所有運行中的containers都能存取的目錄；相較於container-local的檔案系統，在volume的資料可以在container重啟時保留。一個volume的媒介和內容由volume類型而定：
 node-local => emptyDir or hostPath
 file-sharing => nfs
 cloud provicer-specific => awsElasticBlockStore、azureDisk、gcePersistentDisk
 distributed file system => glusterfs、cephfs
 special-purpose => secret、gitRepo
`
## Persistent Volumes
`一個persistent volume是叢集範圍的資源，可以用來保存超過一個pod生命週期的資料，一個PV不是由連接於一個worker node的本地儲存器所支持，而是由網路儲存系統，像是EBS、NFS；或者分散式檔案系統，像是Ceph。`
## Secrets
`敏感性資料像是資料庫密碼或者是API金鑰不能以明文形式儲存，Secrets提供一個安全可靠的機制儲存這類型的資料，有以下性質：
 Secrets是命名空間範圍的物件，可以存在於一個特定命名空間。
 可以透過volume或運行於pod的container環境變數存取
 在nodes上的secret資料被儲存於tmpfs volumes
 每個secret存在1MB的大小限制
 API server以明碼儲存secret於etcd中`
## Logging
`記錄是一個用來了解在應用程式內部至整個cluster中發生事情的選項，在k8s中基本的記錄是一個container產生的輸出，可以透過kubectl工具獲得；較進階的設定會考量跨nodes的記錄，並且將記錄儲存於中心位置，可以是在cluster內部或者是透過專用基於雲的服務。`
## Jobs
`在k8s中的一個job是對運行一段時間到完成的pod的監督者，例如運算或備份操作`
## Nodes
`在k8s中，nodes是運行工作負載的機器 (可能是虛擬的)，作為一個開發者，你不會想要直接處理nodes，然而對於管理者來說，你必須熟悉nodes的操作。`
