k8s是一個分佈式集羣管理平臺。
Kubernetes優勢: 容器編排 輕量級 開源 彈性伸縮 負載均衡
我的環境:Linux CentOS-7(VMware虛擬機)
k8s的安裝
- 所有節點都需要安裝docker,並設置爲開機自啓。
- 根據集羣架構來看,Master和Node的安裝內容是不相同的
- 還有一點非常重要,k8s集羣架構不僅有master-node的架構,還有有多Master,這事是一個高可用集羣
kubernets的作用(管理容器)
- 真實的生產環境應用會包含多個容器,而這些容器還很可能會跨越多個服務器主機部署。
Kubernetes 提供了爲那些工作負載大規模部署容器的編排與管理能力。Kubernetes 編排讓你能夠構建多容器的應用服務,在集羣上調度或伸縮這些容器,以及管理它們隨時間變化的健康狀態。
Kubernets中的一些基礎名詞
Master(主節點): 控制 Kubernetes 節點的機器,也是創建作業任務的地方。
Node(節點): 這些機器在 Kubernetes 主節點的控制下執行被分配的任務。
pod:實例,
一個Pod代表集羣上正在運行的一個進程。Pod是Kubernetes創建或部署的最小/最簡單的基本單位。 由一個或多個容器(container)構成的>集合,作爲一個整體被部署到一個單一節點。同一個 pod 中的容器共享 IP 地址、進程間通訊(IPC)、主機名以及其它資源。Pod 將底層>容器的網絡和存儲抽象出來,使得集羣內的容器遷移更爲便捷。volume:存儲卷,
持久化保存容器的數據。是k8s數據卷,常見的數據卷有4種類型,即EmptyDir,HostDir,NFS,Secret。Replication controller: 拷貝控制器,
Replication Controller簡稱RC,控制一個 pod 在集羣上運行的實例數量。它能夠保證Pod持續運行,並且在任何時候都有指定數量的Pod副本,在此基礎上提供一些高級特性,比如滾動升級和彈性伸縮,可以說,通過ReplicationController,Kubernetes實現了集羣的高可用性。Service:微服務,
定義了一個服務的多個pod邏輯合集和訪問pod的策略;
將服務內容與具體的pod分離。Kubernetes 服務代理負責自動將服務請求分發到正確的pod處,不管pod移動到集羣中的什麼位置,甚至可以被替換掉,仍然不會影響到服務請求的分發。Kubelet:
這個守護進程運行在各個工作節點上,負責和master節點進行通信,獲取容器列表,保證被聲明的容器已經啓動並且正常運行。kubectl:
是操作kubernets常用和最成熟的途徑**: 這是 Kubernetes 的命令行配置工具。namespace:命名空間,
在一個Kubernetes集羣中可以擁有多個命名空間,它們在邏輯上彼此隔離。Lable:標籤,
在爲對象定義好Label後,其他對象就可以通過Label來對對象進行引用。一個對象可以有任意數量lable
Label以key/value鍵值對的形式附加到任何對象上,如Pod,Service,Node,RC(ReplicationController)/RS(ReplicaSet)等。ReplicaSet
ReplicaSet 跟 ReplicationController 沒有本質的不同,只是名字不一樣,並且 ReplicaSet 支持集合式的 selector(ReplicationController 僅支持等式)。Deployment:部署
它爲ReplicaSet和Pod的創建提供了一種聲明式的定義方法,從而無需像手動創建ReplicaSet和Pod對象。Job:任務
Job負責處理任務,即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束。
CronJob在Job的基礎上加上了時間調度,我們可以:在給定的時間點運行一個任務,也可以週期性地在給定時間點運行。helm:Kubernetes 應用(服務)的包管理工具
類似與CentOS的yum。
對於應用發佈者而言,可以通過 Helm 打包應用、管理應用依賴關係、管理應用版本併發布應用到軟件倉庫。
對於使用者而言,使用 Helm 後不用需要編寫複雜的應用部署文件,可以以簡單的方式在 Kubernetes 上查找、安裝、升級、回滾、卸載應用程序。chart:說明
chart 由一系列文件組成,這些文件描述了 Kubernetes 部署應用時所需要的資源,
比如 Service、Deployment、PersistentVolumeClaim、Secret、ConfigMap 等。PV/PVC
PV是羣集中的資源。PVC是對這些資源的請求,並且還充當對資源的檢查。
使用目的:實現存儲的持久化,在k8s中並非綁定宿主機的目錄即爲存儲持久化
docker 在 Kubernetes 中的角色
- 當 kubernetes 把 pod 調度到節點上,節點上的 kubelet 會指示 docker 啓動特定的容器。
接着,kubelet 會通過 docker 持續地收集容器的信息,然後提交到主節點上。 - Docker 如往常一樣拉取容器鏡像、啓動或停止容器。
不同點僅僅在於這是由自動化系統控制而非管理員在每個節點上手動操作的。
Kubernets基礎架構
- ❄️Kubernetes 主控組件(Master) 包含三個進程,都運行在集羣中的某個節上,主控組件通常這個節點被稱爲 master 節點。這些進程包括:
kube-apiserver,整個系統的數據總線和數據中心。
kube-controller-manager,集羣內部的管理控制中心,
kube-scheduler,負責Pod調度。在整個系統中起"承上啓下"作用。 - ❄️集羣中的每個非master節點都運行兩個進程:
kubelet,和master節點進行通信。
kube-proxy,一種網絡代理,將 Kubernetes 的網絡服務代理到每個節點上。
(Master和Node的交互原理圖)
- k8s API Server提供了k8s各類資源對象(pod,RC,Service等)的增刪改查等HTTP Rest接口,是整個系統的數據總線和數據中心。
提供了集羣管理的REST API接口,提供其他模塊之間的數據交互和通信的樞紐,資源配額控制的入口,有完備的集羣安全機制。(工作原理)
k8s通過kube-apiserver這個進程提供服務,該進程運行在單個k8s-master節點上。默認有兩個端口。本地端口默認值8080,安全端口默認值6443。
通過API Server訪問Node、Pod和Service,k8s API Server最主要的REST接口是資源對象的增刪改查,另外還有一類特殊的REST接口—k8s Proxy API接口,這類接口的作用是代理REST請求,即kubernetes API Server把收到的REST請求轉發到某個Node上的kubelet守護進程的REST端口上,由該kubelet進程負責響應。(接口介紹) - Controller Manager作爲集羣內部的管理控制中心,
負責集羣內的Node、Pod副本、服務端點(Endpoint)、命名空間(Namespace)、服務賬號(ServiceAccount)、資源定額(ResourceQuota)的管理,
當某個Node意外宕機時,Controller Manager會及時發現並執行自動化修復流程,確保集羣始終處於預期的工作狀態。 - scheduler負責Pod調度。在整個系統中起"承上啓下"作用。
承上:負責接收Controller Manager創建的新的Pod,爲其選擇一個合適的Node。
啓下:Node上的kubelet接管Pod的生命週期。 - Kubelet在kubernetes集羣中,每個Node節點都會啓動kubelet進程,用來處理Master節點下發到本節點的任務,管理Pod和其中的容器。
kubelet會在API Server上註冊節點信息,定期向Master彙報節點資源使用情況,並通過cAdvisor監控容器和節點資源。是Node上的pod管家。 - kube-proxy它是實現Kubernetes Service的通信與負載均衡機制的重要組件,
kube-proxy負責爲Pod創建代理服務,從apiserver獲取所有server信息,並根據server信息創建代理服務,實現server到Pod的請求路由和轉發,從而實現K8s層級的虛擬轉發網絡。 - etcd集羣管理器的狀態存儲在一個高度分佈的 key/value存儲etcd中,是一個可靠的共享存儲服務。
Kubernets部署應用程序
- ConfigMap,kubernetes提供了的管理配置文件一套方案。
創建ConfigMap的方式有兩種,一種是通過yaml文件來創建,另一種是通過kubectl直接在命令行下創建。 - Deployment:部署
它爲ReplicaSet和Pod的創建提供了一種聲明式的定義方法,從而無需像手動創建ReplicaSet和Pod對象。
secret保存小片敏感數據的k8s資源。
pesistent volume claims持久卷聲明,它和Pod類似,Pod消耗Node資源,而PVC消耗PV資源。
volume持久化保存容器的數據,是k8s數據卷,常見的數據卷有4種類型,即EmptyDir,HostDir,NFS,Secret。
參考文獻
- 【博客園—CentOS7安裝k8s】
- 【博客園----Kubernets入門介紹片】k8s的架構和組件。
- 【博客園----Kubernets入門系列之集羣安裝】
- 【Kubernets-中文社區】
- 【Kubernets-官方】
- 【知乎上的一篇】k8s入門級別的名詞,k8s可以做什麼
- 【知乎–初學者指南】k8s架構、應用程序部署、負載均衡,service,Persistent Volumes 的使用,在節點部署守護程序、部署數據庫、部署有狀態的分佈式系統、滾動更新、配置管理、自動縮放、包管理
- 【CSDN—一個阿里員工的k8s目錄】
- 【kubernets高可用集羣(多master)】