Kubernetes基本概念和術語

1.Master

Kubernetes裏的Master指的是集羣控制節點,每個k8s集羣需要一個master來負責整個集羣的管理和控制,基本上k8s所有控制命令都發給它,它來負責具體的執行過程(高可用建議部署3臺服務器)

Master 節點運行的組件:

Kube-apiserver:提供http Rest接口的關鍵服務進程,是k8s裏所有資源增刪改查等操作的唯一入口,也是集羣控制的入口進程。

Kube-controller-manager:k8s裏所有資源對象的自動化控制中心,可以理解爲資源對象的“大總管”。

Kube-scheduler:負責資源調度(pod調度)的進程,相當於公司的調度室。

另外,在master節點上還需要啓動一個etcd服務,用於存儲所有資源對象的數據。

2.Node

除了master,k8s集羣中的其他機器被稱爲Node節點,它可以是一臺物理機,也可以是一臺虛擬機,是集羣中的負載節點,master會根據自動算法或者自定義的策略將pod調度到指定的node上工作,當node宕機時,其上的工作負載會被master自動轉移到其他節點。

每個node節點上運行的進程:

Kubelet:負責pod對應的容器的創建,啓停等任務,與master關係密切,實現集羣管理的基本功能。

Kube-proxy:實現kubernetes service的通信與負載均衡的組件。

Docker engine:docker 引擎,負責本機的容器創建與管理。

前文k8s集羣已介紹如何搭建一套集羣。這裏不多說。

·  [root@api-server ~]# kubectl get nodes  

·  NAME         STATUS   ROLES    AGE     VERSION  

·  api-server   Ready    master   7d20h   v1.14.1  

·  node1        Ready    <none>   7d19h   v1.14.1  

·  node2        Ready    <none>   7d17h   v1.14.1  

·  node3        Ready    <none>   4d16h   v1.14.2 

這裏可以看到集羣有3個node 1個master.

#kubectl get nodes用於查看集羣的node信息。

#kubectl describe node $node_name可以查看更詳細的node信息。比如每個pod的CPU的使用率,內存的使用率,node的內核版本,ip信息等以及發生的event都可以查看到。

3.Pod

Kubernetes基本概念和術語

Pod組成示意圖

Pod是k8s的最重要也是最基本的概念,如圖所示,每個pod都有一個特殊的被“根容器”的Pause容器。Pause容器對應的鏡像屬於k8s平臺的一部分,以他的狀態代表整個容器組的狀態。Docker業務容器運行於pod中。

Kubernetes爲每個Pod都分配了唯一的IP地址,稱爲pod IP,一個pod裏的多個容器共享Pod IP。kubernetes要求底層網絡支持集羣內任意兩個pod之間的tcp/ip直接通信,通常使用虛擬二層網絡技術實現。

4.Label

Label是k8s系統中另一個重要的核心概念,label可以附加到各種對象資源上,例如可以給node打label,給pod打label,一個對象可以添加多個label,例如可以給node增加labe role: preonline 這樣就代表着這是個預上線的節點,通過不通label對不同資源進行區分,方便批量更新與回滾。

5.Replication Controller

RC簡單來說,定義了一個期望值,即聲明瞭某種pod的副本數量在某時某刻都符合設定的值,如果實際pod的數量少於RC定義的預期的數量,則會自動新增一個pod來符合設定的預期。如配置文件:

apiVersion: v1

kind: ReplicationController

metadata:

name : frontend

spec :

replicas: 1

selector:

tier : frontend

template:

metadata:

labels:

app: app-demo

tie.r: frontend

spec:

containers:

  • name: tomcat-demo

image: tomcat

imagePullPolicy: IfNotPresent

env :

  • name : GET HOSTS FROM

value: dns

ports:

  • containerPort: 80

這裏創建了個RC,命名爲frontend ,預期存活含有tier:frontend的pod爲1個(replicas=1),當預期少於1個時(例如發生node重啓,關機等意外),將從template字段生成一個pod,生成後這個pod打上tier: frontend的標籤。此時pod數量從0變爲1,符合replicas=1的預期.當然此文件還聲明瞭這個pod啓用了tomcat的容器(container.image=tomcat)並暴露出80端口(ports.containerPort=80)。

6.Deployment

Deployment 其實是RC的一個升級,增加了例如升級 回滾鏡像的功能,如有批量更新鏡像版本,則可以使用kubectl set image deployment/$deployment_name $imager_name=$image_version 實例:kubectl set image deployment/nginx-deploy nginx=nginx:1.9.1,說明將升級nginx鏡像到1.9.1版本。

apiVersion: apps/v1beta1

kind: Deployment

metadata:

name: nginx-deployment

spec:

replicas: 3

template:

metadata:

labels:

app: nginx

spec:

containers:

-name: nginx

image: nginx:1.7.9

ports:

-containerPort: 80
Kubernetes基本概念和術語

睿江雲官網鏈接:https://www.eflycloud.com/home?from=RJ0024

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