K8S技術第一篇

K8S架構介紹

這幾天參加了k8s官網培訓,在這總結一下學習到的知識給大家分享,後面會陸續更新上來,如果有對k8s感興趣的,或從事k8s行業的,可以多交流,謝謝

1、k8s是什麼?
kubernetes是一個開源,以集羣方式部署調度容器應用,彈性伸縮以及運維容器集羣的系統。
kubernetes1.0版本在2015年12月21日正式發佈,2015年7月google聯合Linux基金會(Linux Foundation)創辦了CNCF基金會(Cloud Native Foundation)並將kubernetes種子項目捐獻給了CNCF基金會。且k8s每三個月發佈一個版本,目前最新版本v1.18.4
2、k8s核心組件
master節點是集羣的大腦,主要運行的組件 kube-apiservice、kube-controller-manager、kube-scheduler、etcd等組件,主要職責是對資源管理、調度、認證、彈性伸縮、安全認證。
node節點運行容器應用,由master管理,接受master節點的請求,進行容器的創建與管理,並將運行在上面的容器應用上報到master節點
下面分別介紹一下:
etcd保存了整個集羣的狀態和應用部署的信息
Kube-Controller-manager負責維護集羣的狀態,比如故障檢測、自動擴展、滾動更新等;
Kube-scheduler負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
kubelet負責節點註冊和心跳發送、應用生命週期管理、應用健康檢查、CSI存儲接口對接存儲;
Container runtime負責鏡像管理以及Pod和容器的真正運行(CRI);
kube-proxy負責服務暴露實現;
Add-ons插件
• kube-dns負責爲整個集羣提供服務註冊和服務發現;
• Ingress Controller爲服務提供七層負載均衡;
• metric-server收集節點和POD的資源使用;
• Dashboard提供GUI

在這裏插入圖片描述
3、基本概念
pod
label
anonation
node
namespace
init container
static pod
controller:
replicaset
deployment
statefulset
daemonset
job
cronjob
service

pod
Pod是kubernetes中可以創建和部署的最小也是最簡的單位。
Pod中封裝着應用的容器(有的情況下是好幾個容器),存儲、獨立的網絡IP,管理容器如何運行的
策略選項。可能由一個或者多個容器組合在一起共享資源。
Pod中可以共享兩種資源:網絡和存儲。
• 網絡:每個Pod都會被分配一個唯一的IP地址。Pod中的所
有容器共享網絡空間,包括IP地址和端口。Pod內部的容
器可以使用localhost互相通信。Pod中的容器與外界通信
時,必須分配共享網絡資源(例如使用宿主機的端口映
射)。
• 存儲:可以Pod指定多個共享的Volume。Pod中的所有容
器都可以訪問共享的volume。Volume也可以用來持久化
Pod中的存儲資源,以防容器重啓後文件丟失。

label
Label是識別Kubernetes對象的標籤,也是不同資源之間互相關聯的方式。以key/value的方式附加到對象上(key最長不能超過63字節,value可以爲空,也可以是不超過253字節的字符串)。
anonation
Annotation是註解。Annotation可以將Kubernetes資源對象關聯到任意的非標識性元數據。使用客戶端(如工具和庫)可以檢索到這些元數據。
Annotation與Label區別
Label主要用於選擇對象,可以挑選出滿足特定條件的對象。
annotation 不能用於標識及選擇對象。主要用於註釋信息。
node
namespace
• 在Kubernetes中用來實現隔離的東西叫Namespace,
Namespace是對一組資源和對象的抽象集合,比如可以用
來將系統內部的對象劃分爲不同的項目組或用戶組。常見的
pods, services, replication controllers和deployments等
都是屬於某一個namespace的(默認是default)。
• Kubernetes默認部署後會創建kube-system、default
namespace,kube-system主要用於平臺組件運行,
default用於默認的部署namespace。
• 默認get資源對象不指定namespace時,則默認是default
namespace
• 可以給namespace設置配額和默認的資源限制來達到集羣
資源的管理目的。
• node, persistentVolumes等集羣類資源則不屬於任何namespace
init container
Pod 能夠具有多個容器,應用運行在容器裏面,但是它也可能有一個或
多個先於應用容器啓動的 Init 容器。Init容器是一種專用的容器,在應用
程序容器啓動之前運行,一般包括一些應用鏡像中不存在的實用工具和
安裝腳本。Init 容器與普通的容器非常類似,除了如下點:
• Init 容器總是運行到成功完成爲止。
• 如果 Pod 的 Init 容器失敗,Kubernetes 會不斷地重啓該 Pod,直到
Init 容器成功爲止。然而,如果 Pod 對應的 restartPolicy 爲 Never,
它不會重新啓動。
• 如果爲一個 Pod 指定了多個 Init 容器,那些容器會按順序一次運行一
個。 每個 Init 容器必須運行成功,下一個才能夠運行。 當所有的 Init
容器運行完成時,Kubernetes 初始化 Pod 並像平常一樣運行應用容
器。
應用場景:
• 進行應用的初始化,如,從git或svn拉取應用的最新配置或動態生成配置文件。
• 進行應用的依賴檢查,如一些web服務,必須要數據庫服務先啓動,然後在去啓動
web服務,否則會啓動失敗,此時在web應用pod內定義一個init容器,通過init容器
去對數據庫容器進行檢測,一旦檢測到數據庫容器啓動成功,就啓動web應用pod。
static pod
• Static-Pod由特定節點上的kubelet守護程序直接管理,不需要使用API-server監視它們。
• kubelet會監視每個靜態Pod(並在崩潰時重新啓動它)。
• 靜態Pod始終綁定到一個Kubelet在特定節點上。
• 節點服務器上運行的static-Pod通過API-server上是可見,但不會通過API-server進行控制。
controller:
replicaset用實現pod副本數的管理
deployment是常用的控制器對象,能進行應用部署、副本數管理、滾動升級、彈性伸縮等操作
statefulset用於保證有狀態應用
daemonset在每個node上都運行一個pod
job用於執行一次性任務
cron job用於定時執行一次性任務
service
service是爲一組功能相同的pod提供統一入口併爲它們提供負載均
衡和自動服務發現。

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