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)