kubernetes基礎概念理解

1、概念理解node

容器:一種輕量級、可移植、自包含的軟件打包技術linux

Pod:  k8s最小的調度單位,封裝了一個或者多個容器的資源對象,共享命名空間api

資源標籤:一個鍵值型(key/value)數據,辨別pod的熟悉bash

標籤選擇器: Lable Selector,根據標籤過濾符合調劑的資源對象的機制網絡

 

Pod控制器:用戶不會直接部署管理pod,藉助另外一個抽象的工具---控制器(control) 進行管理,達到副本數量精確app

 

一、ReplicationController //幾乎廢棄負載均衡

 

二、ReplicaSet //新一代控制器工具

 

三、Deployment //是目前最經常使用的管理無狀態的pod,構建於RS之上測試

 

四、StatefulSet //有狀態應用,如database,爲每一個Pod建立獨特標識,確保Pod間順序性spa

 

五、DaemonSet //用於確保每一個節點都運行某Pod的一個副本,新增節點也會被添加此類Pod,用於運行集羣存儲守護進程,如ceph和glusterd,日誌收集進程fluentd、logstash以及監控進程,prometheus的Node Exporter等

 

六、Job //運行完成後可終止的應用,如批處理做業任務

 

Deployment 支持基於集合( set-based )的標籤選擇器,以及它的滾動更新( Rolling-Update )機制,區別於RS的地方

 

六、服務資源 ( Serv ice )

 

Service 是創建在一組Pod 對象之上的資源抽象,它經過標籤選擇器選定一組Pod 對象,

併爲這組Pod 對象定義一個統一的固定訪問入口(一般是一個IP 地址),若Kubemetes 集羣

存在DNS 附件,它就會在Service 建立時爲其自動配置一個DNS 名稱以便客戶端進行服務發

現。到達Service IP 的請求將被負載均衡至其後的端點一一各個Pod 對象之上,所以Service

從本質上來說是一個四層代理服務。另外, Service 還能夠將集羣外部流量引入到集羣中來。

 

層級關係理解: 物理層 ------> 單個容器(container) --------> Pod --------> service

 

Service IP 是一種虛擬IP ,也稱爲Cluster IP ,它專用於集羣內通訊,一般使用專用的地址段,如「 10.96.0.0 /12 」網絡

 

PodIP: 10.244.0.0/16

 

七、Ingress:Pod和service都只能在集羣內部通訊,Ingress能夠實現HTTPS(七層)負載均衡,實現和集羣外部通訊,自己是一組路由規則的集合其控制器主要使用Nginx

 

八、k8s集羣的網絡

a、各主機自身的網絡,地址配置於主機網絡接口,配置於k8s集羣構建以前,不能由k8s管理

b、k8s集羣專用於pod資源對象的虛擬網絡,配置在Pod的容器接口上,爲Pod設定IP和網絡,藉助於CNI插件實現,可部署k8s集羣以外或者託管在集羣上,須要在構建集羣有管理員定義

c、專用於service資源對象的虛擬網絡,不配置在任何主機或者容器的網絡接口,經過node的kube-proxy配置爲iptables或者ipvs規則,網絡在集羣建立時指定

 

2、k8s服務、網絡、存儲概念

一、Service類型:

第一種是僅用於集羣內部通訊的ClusterIP類型;

第二種是接入集羣外部請求的NodePort 類型它工做於每一個節點的主機IP 之上;

第三種是LoadBalancer 類型,它能夠把外部請求負載均衡至多個Node 的主機IP 的NodePort 之上

此三種類型中,每一種都以其前一種爲基礎才能實現,並且第三種類型中的LoadBalancer 須要協同集羣外部的組件才能實現,而且此外部組件並不接受Kubemetes的管理。

第四種:ExternalName,經過將Service映射由ExternalName字段的內容指定的主機名來暴露服務

 

二、Kubernetes 的資源對象依據資源的主要功能做爲分類標準, Kubemetes 的API 對象大致可分爲

 

工做負載( Workload ) 有狀態、無狀態

 

發現和負載均衡( Discovery & LB ) Ingress

 

配置和存儲( Config & Storage )、

 

集羣( Cluster )資源 RoleBinding、 ClusterRoleBinding

 

元數據( Metadat a )

 

具備kind 、apiVersion 、meta data 、spec 和status 五個一級宇段

 

資源類型( resource type )是指在URL 中使用的名稱,如Pod 、Namespace 和Service等,其URL 格式爲「 GROUPNERSION度ESOURCE 」,如apps/v1/deployment 。

 

kind 表明着資源對象所屬的類 Namespace/Deployment

 

metadata 字段爲資源提供元數據信息,如名稱、隸屬的名稱空間和標籤等;

 

spec 則用於定義用戶指望的狀態,不一樣的資源類型,其狀態的意義也各有不一樣

 

status 則記錄着活動對象的當前狀態信息,它由Kubemetes 系統自行維護,對用戶來講爲只讀字段

 

 

 

四、kubectl 的命令由此能夠分爲三類:

 

陳述式命令( imperative command ) run , expose 、delete 和get 等命令

 

陳述式對象配置( imperative object configuration ) create 、delete 、get 和replace

 

聲明式對象配置( declarative object config uration ) apply

 

 

 

NodePort 部署於每一臺節點

LoadBalancer 外部複製均衡器

 

HostPort和NodePort的區別:NodetPort是經過全部節點暴露容器服務,而HostPort由Pod對象所在的節點IP地址來暴露

 

五、經常使用命令

[root@master ~]# kubectl version --short
Client Version: v1.15.0
Server Version: v1.15.0

 

kubectl -it exec <Pod-name> /bin/bash //進入容器,若是一個pod裏面有多個容器加 -c< container name> 指定容器

 

[root@master ~]# kubectl run client --image=busybox --restart=Never -it -- /bin/bash //運行一個測試容器

報錯:OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown

多是沒有bash這個命令

[root@master ~]# kubectl run client --image=busybox --restart=Never -it -- /bin/sh //執行這個沒有問題

  

六、Pod的生命週期

Pending: API Server建立了Pod資源對象並已經存入etcd中,但它還沒有被調度完成,或者處於下載鏡像過程當中

Running: Pod已經被調度至某節點,而且全部容器被kubelet建立完成

Successed: Pod中的全部容器都已經成功終止且不會被重啓

Failed: 全部容器都已經終止,但至少有一個終止失敗

Unknown:API Server沒法正常獲取到Pod對象狀態的信息,一般是因爲沒法和kubelet通訊致使

 

七、Pod健康檢查機制

 

存活性探測:判斷容器是否處於Running狀態,一旦此類檢測未經過,kubelet將殺死容器並根據策略判斷是否重啓,主要用於四層(TCP)服務探測

 

就緒性探測:判斷容器是否準備就緒可對外提供服務,主要用於七層(http)服務探測

 

 

八、kube-proxy請求代理的三種方式userspace代理模式、iptables代理模式、ipvs代理模式

 

 

3、數據存儲與持久化

 

存儲卷和Pod綁定,PV(PersistentVolume) PVC(persistentVolumeClaim)

相關文章
相關標籤/搜索