k8s學習總結(持續更新)

基礎概念:
一、資源對象:
0、命令:kubectl create -f mysql-rc.yaml,改命令會創建rc,rc會根據配置文件,啓pods
1、Replication Controller(RC):複製控制器(命令:kubectl get rc,可用於查看rc)
作用:
(1)確保pod數量:RC用來管理正常運行Pod數量,一個RC可以由一個或多個Pod組成,在RC被創建後,系統會根據定義好的副本數來創建Pod數量。在運行過程中,如果Pod數量小於定義的,就會重啓停止的或重新分配Pod,反之則殺死多餘的。
(2)確保pod健康:當pod不健康,運行出錯或者無法提供服務時,RC也會殺死不健康的pod,重新創建新的。
(3)彈性伸縮 :在業務高峯或者低峯期的時候,可以通過RC動態的調整pod的數量來提高資源的利用率。同時,配置相應的監控功能(Hroizontal Pod Autoscaler),會定時自動從監控平臺獲取RC關聯pod的整體資源使用情況,做到自動伸縮。
$ kubectl scale rc redis-slave --replicas=3
scaled
(4)滾動升級:滾動升級爲一種平滑的升級方式,通過逐步替換的策略,保證整體系統的穩定,在初始化升級的時候就可以及時發現和解決問題,避免問題不斷擴大。
注意:刪除rc,並不影響通過該rc已創建好的pod。爲了刪除所有pod,可以設置replicas的值爲0,然後更新rc,另外kubectl提供了stop和delete命令來一次性刪除rc和rc控制的全部pod
另:
replica set:  下一代的rc,區別是:支持基於集合的label selector(kubectl get rs)
rc只支持基於等式的label selector
deployment:相當於rc的最大升級,是我們可以隨時知道當前pod部署的進度
HPA(horizontal pod autoscaling):pod橫向自動擴容,也是一種資源對象,原理:通過追蹤分析rc控制的所有目標pod的負載變化情況,來確定是否需要針對性地調整目標pod的副本數。
2、Pods:(命令:kubectl get pods,可用於查看pods;kubectl describe pod <pod_name>:查看pod詳細信息)
定義:
Pod是可以創建和管理Kubernetes計算的最小可部署單元。一個Pod代表着集羣中運行的一個進程。
Pod就像是豌豆莢一樣,它由一個或者多個容器組成(例如Docker容器),它們共享容器存儲、網絡和容器運行配置項。Pod中的容器總是被同時調度,有共同的運行環境。你可以把單個Pod想象成是運行獨立應用的“邏輯主機”——其中運行着一個或者多個緊密耦合的應用容器——在有容器之前,這些應用都是運行在幾個相同的物理機或者虛擬機上。
儘管kubernetes支持多種容器運行時,但是Docker依然是最常用的運行時環境,我們可以使用Docker的術語和規則來定義Pod。
Pod中共享的環境包括Linux的namespace,cgroup和其他可能的隔絕環境,這一點跟Docker容器一致。在Pod的環境中,每個容器中可能還有更小的子隔離環境。
Pod中的容器共享IP地址和端口號,它們之間可以通過localhost互相發現。它們之間可以通過進程間通信,例如SystemV信號或者POSIX共享內存。不同Pod之間的容器具有不同的IP地址,不能直接通過IPC通信。
Pod中的容器也有訪問共享volume的權限,這些volume會被定義成pod的一部分並掛載到應用容器的文件系統中。
就像每個應用容器,pod被認爲是臨時實體。在Pod的生命週期中,pod被創建後,被分配一個唯一的ID(UID),調度到節點上,並一致維持期望的狀態直到被終結(根據重啓策略)或者被刪除。如果node死掉了,分配到了這個node上的pod,在經過一個超時時間後會被重新調度到其他node節點上。一個給定的pod(如UID定義的)不會被“重新調度”到新的節點上,而是被一個同樣的pod取代,如果期望的話甚至可以是相同的名字,但是會有一個新的UID(查看replication controller獲取詳情)。
每個pod都有一個“根容器(Pause容器)”和其他業務容器組成
Pause容器作用:
(1)不易死亡,其狀態代表整個容器組的狀態
(2)其他業務容器共享Pause容器的ip、共享掛接的volume,簡化了容器間通信、和文件共享問題
每個pod,都有唯一id,爲pod ip,集羣內pod間通信通過tcp/ip直接通信
默認情況下:pod裏的某個容器掛了後,kubernetes會自動檢查並重啓這個pod(重啓pod裏面的所有容器)
3、service(kubectl get svc:查看當前服務)
定義:
(1)Kubernetes中一個應用服務會有一個或多個實例(Pod),每個實例(Pod)的IP地址由網絡插件動態隨機分配(Pod重啓後IP地址會改變)。爲屏蔽這些後端實例的動態變化和對多實例的負載均衡,引入了Service這個資源對象
(2)k8s的Service定義了一個服務的訪問入口地址(cluster ip),前端的應用通過這個入口地址訪問其背後的一組由Pod副本組成的集羣實例,來自外部的訪問請求被負載均衡到後端的各個容器應用上。Service與其後端Pod副本集羣之間則是通過Label Selector來實現對接的。而RC的作用相當於是保證Service的服務能力和服務質量始終處於預期的標準。Service 定義可以基於 POST 方式,請求 apiserver 創建新的實例。一個 Service 在 Kubernetes 中是一個 REST 對象。
kubectl get endpoints:查看service的endpoint列表
4、Master
定義:集羣控制節點,每個k8s集羣,需要一個master節點來負責整個集羣的管理和控制,基本上k8s的所有控制命令都是發給它,它來負責具體的執行過程,我們後面所有執行的命令都是在master節點上運行。
master節點上運行的關鍵進程:
kubernetes API Server(kube-apiserver),提供了HTTP Rest接口的關鍵服務進程,是kubernetes裏所有資源的增刪改查操作的唯一入口,也是集羣控制的入口進程。
kubernetes controller manager(kube-controller-manager),kubernetes裏所有資源對象的自動化控制中心。
kubernetes scheduler(kube-scheduler),負責資源調度(Pod調度)的進程。
master節點上,往往還啓動了一個etcd server 進程,kubernetes裏的所有資源對象的數據全部保存在etcd中。
5、Nodekubectl get nodes:查看nodes;kubectl describe node <node_name>:查看node詳細信息)
除了master,kubernetes集羣中的其他機器稱爲node節點。
與master 一樣,master節點可以是物理主機,也可以是虛擬機,node節點是kubernetes集羣中的工作負載節點。
node節點上運行的關鍵進程:
kubelet:負責pod對應的容器創建、啓停等任務,同時與master節點密切協作,實現集羣管理的基本功能
kube-proxy:實現kubernetes service的通信與負載均衡機制的重要組件
docker engine:docker引擎,負責本機的容器創建和管理工作
6、label:一個label是一個key-value的鍵值對,由用戶指定。
可以附加在各種資源對象上,如node、pod、service、rc等
一個資源對象可以定義任意數量的label,同一個label也可以被添加到任何數量的資源對象上去
label通常在資源定義時確定,也可以在對象創建後動態添加和刪除
k8s可通過label來查詢對象

二、kubectl命令行語法詳解:
kubectl [command] [type] [name] [flags]
(1)command:子命令,用於操作k8s資源對象,例如create、delete、describe、get、apply
(2)type:資源對象類型,區分大小寫、支持單數、複數或者簡寫形式
(3)name:資源對象的名稱,區分大小寫,如果不指定名稱,則系統返回屬於type的全部對象的列表
(4)flags:可選參數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章