1. 死磕 k8s系列之核心概念介紹
- 2020 年 2 月 10 日
- 筆記

docker入門
核心概念
- 鏡像
類似於虛擬機鏡像,可以理解為一個面向Dokcer引擎的只讀模板,包含了文件系統。
- 容器
類似於輕量級的沙箱,Docker利用容器來運行和隔離應用。容器是從鏡像創建的應用運行實例,可以將其啟動、開始、停止、刪除,但是所有的容器是相互隔離的,互不可見的,這就提供了一個實體機可以安裝多個容器,且很輕量級相對於虛擬機。
鏡像本身是只讀的,容器從鏡像啟動的時候,Docker會在鏡像的最上層創建一個可寫層,鏡像本身保持不變。
- 倉庫
類似於程式碼庫,是Dokcer集中存放鏡像的場所。
根據存儲的鏡像公開分享與否,Docker倉庫可以分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
常用命令
# 鏡像列表 docker images # 移除鏡像 docker rmi <image_id> # 查看鏡像 docker search <image_name> # 拉取鏡像 docker pull <image_name>[:tag] # 運行一個鏡像到容器 docker run [OPTIONS] <image_name>[:tag] # 所有容器 docker ps -a # 移除一個容器 docker rm <container_id> # 提交一個容器到鏡像 docker commit <container_id> [image_name:tag] # 推送鏡像到倉庫 docker push <image_name>[:tag]
k8s入門
核心概念

master,又稱為master節點、集群控制面板、控制面板等,它的作用是治理Worker Node。一般來說,master上面不運行任何pod。
Worker Node,又稱為worker節點、node節點等,node是機器的抽象,物理機或虛擬機。一般來說,所有的pod都運行在node上。

藍色部分代表高層抽象,綠色部分代表node層及其子進程。

master包含api server、etcd、scheduler、kube-controller-manager、cloud-controller-manager。
api server,暴露 K8s API,是 K8s 控制的前端,即 kube-apiserver。
etcd,用於集群狀態數據的分散式鍵值存儲。
scheduler,調度器,為新 Pod 選擇 Node,即 kube-scheduler,可以想像成匹配器
kube-controller-manager,運行控制器來處理集群後台任務的進程,可當做集群控制器。
cloud-controller-manager,運行控制器與雲供應商交互,可以當做雲介面。

Worker Node 的組件包括 kubelet、kube-proxy 及 container runtime。
kubelet,負責 Worker Node 的一切事務,與 Master 的 API server 通訊。
kube-proxy,連接正確 Pod 的路由,也扮演跨 Pod 服務負載均衡的角色。
Container Runtime,容器運行時,下載鏡像,運行容器,例如:Docker 就是一個容器運行時。

Deployment,部署,無狀態,如果你想持續運行一個無狀態的應用,那就用Deployment。Deployment 允許你在無需停機的狀態下更新應用,並在 Pod 宕掉時根據策略重啟 Pod。
ReplicaSet,無狀態,Deployment 會創建 ReplicaSet 來保障你的應用所需 Pod 的數量,ReplicaSet 會基於 Deployment 中的觸發器自動創建及伸縮 Pod 數量。老版本中有個名詞「Replication Controller」,與ReplicaSet的概念等價。
Pod,是 K8s 的基礎構建模組,一個 Pod 包含一組一個或多個容器。通常每個 Pod 包含一個容器。當應用需要水平擴展時,ReplicationSet 會複製 Pod。
StatefulSet,有狀態,與 Deployment 不同,StatefulSet 的 Pod 是不可互換的。每個 Pod 都有一個唯一的、持久的標識符,在任何重新調度期間,控制器都要維護這個標識符。StatefulSet 用於持久的、有狀態的後端,如資料庫。
DaemonSet,用於處理連續的過程,在每個 Node 上運行一個 Pod,每個自動被放入集群的 Node 會通過 DaemonSet 啟動 Pod。DaemonSet 對後台運行的任務(如監控和日誌收集)非常有用。
StatefulSet 和 DaemonSet 不受 Deployment 控制,雖然兩者與 ReplicaSet 位於同級別的抽象層,在當前 API 中沒有針對它們更高層級的抽象層了。

PV,PersistentVolumes,持久化卷,與具體的存儲關聯,可以是本地磁碟,也可以是遠程存儲設置;
PVC,PersistentVolumeClaims,持久化卷清單,使用PV,Pod只能使用PVC,不與PV直接關聯。

Service,Pod的訪問入口,有三種類型ClusterIP、NodePort、LoadBalance。
ClusterIP,使用一個集群固定IP,這個是默認選項。 NodePort,使用一個集群固定IP,但是額外在每個pod上均暴露一個埠供外部訪問 LoadBalancer,使用集群固定IP,額外還會申請一個負載均衡器來轉發到服務(load balancer )
Ingress,通常情況下,service和Pod的IP僅可在集群內部訪問。集群外部的請求需要通過負載均衡轉發到service在Node上暴露的NodePort上,然後再由kube-proxy將其轉發給相關的Pod。
Ingress可以給service提供集群外部訪問的URL、負載均衡、SSL終止、HTTP路由等。為了配置這些Ingress規則,集群管理員需要部署一個Ingress controller,它監聽Ingress和service的變化,並根據規則配置負載均衡並提供訪問入口。常用的Ingress Controller有nginx-ingress和traefik-ingress。
常用命令
# 通過文件名或控制台輸入,對資源進行創建。 kubectl create #通過文件名或控制台輸入,對資源進行替換。 kubectl replace # 通過文件名或控制台輸入,對資源進行配置,kubectl apply = kubectl create + kubectl replace。 kubectl apply # 集群資訊 kubectl cluster-info # 查看組件資訊 kubectl get # 修改組件配置 kubectl edit # 顯示組件詳情 kubectl describe # 刪除組件 kubectl delete # 查看日誌 kubectl logs
istio入門
核心概念

Envoy,一個 C++ 編寫的高性能代理伺服器,這裡做了擴展,在 Istio 中會以 Sidecar 方式跟應用運行在同一 Pod 內,一方面可以接收並執行關於規則、流量拆分等方面的指令,另一方面能夠產生各種指標用於監控和跟蹤。
Mixer,主要進行訪問控制以及策略控制,同時也負責從 Envoy 中獲取各項指標。
Pilot,是用戶和 Isito 之間的橋樑,負責接收各種配置,並發送給各個組件。
Istio Auth,內置認證和憑證管理,利用 TLS 提供服務之間、用戶和服務之間的認證。可以用來將沒有加密支援的服務升級為加密版本,並且在網路策略之外,提供服務級別的策略控制,今後還會增加更多的鑒權和審計方面的能力。
常用命令
# 將某個命名空間置為自動注入istio proxy kubectl label namespace docker-test istio-injection=enabled

