k8s學習(一):k8s入門概念

參考:
https://zhuanlan.zhihu.com/p/43266412
https://zhuanlan.zhihu.com/p/292081941

k8s的作用和解決什么問題

由于docker并不具備分布式集群部署,自動擴容縮容,負載均衡的能力,并且沒有解決故障自愈和集群內服務間的通信問題。k8s的出現就很好的彌補了docker的這些缺點,并且k8s自身也有非常出色的容器技術,不一定非得使用docker配合k8s,在最新的k8s版本中已經移除對docker容器的支持。簡而言之k8s就是容器技術的分布式架構系統

作用:
  • 自動化服務
    • 1、自動快速的垂直擴容縮容和水平擴容縮容、更新部署:
      • a、垂直擴容和縮容:服務器能夠輕易的增加和刪除
      • b、水平擴容和縮容:容器能輕松增加和移除
    • 2、自動為擴容的pod實例提供負載均衡
    • 3、自動的提供健康檢查和自愈能力
    • 4、根據指令做到任務的自動統一調度

k8s架構

K8S是屬于主從設備模型(Master-Slave架構),即有Master節點負責核心的調度、管理和運維,Slave節點則在執行用戶的程序。但是在K8S中,主節點一般被稱為Master Node或者Head Node或Master Node,而從節點則被稱為Worker Node或者Node。Master Node和Worker Node組成了K8S集群,同一個集群可能存在多個Master Node和Worker Node

Master Node
  • ETCD:K8S的存儲服務。ETCD保存了集群中Master Node和Worker Node中各個組件的狀態,同時也存儲了K8S的關鍵配置和用戶配置,k8s架構所有需要持久化的數據都會存儲在ETCD中。K8S中僅API Server才具備讀寫權限,其他組件必須通過API Server的接口才能讀寫數據;
  • Controller Manager:Worker Node的監控器,Controller Manager有很多不同類型的Controller,主要負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等;
  • Scheduler:負責資源的調度,按照預定的調度策略將 Pod 調度到相應的Node節點上;
  • API Server:API Server負責接收K8S所有請求,是k8s資源操作的唯一入口,并提供認證、授權、訪問控制、API 注冊和發現等機制。API Server根據的具體請求,去通知其他組件干活。
Worker Node
  • Kubelet。Worker Node的監視器。每個節點上都運行一個 kubelet 服務進程,默認監聽 10250 端口,接收并執行 master 發來的指令,管理 Pod 及 Pod 中的容器。每個 kubelet 進程會在 API Server 上注冊節點自身信息,定期向 master 節點匯報節點的資源使用情況,并監控節點和容器的資源,維護node節點上Pod的生命周期。
  • Kube-Proxy:K8S的網絡代理。Kube-Proxy負責Node在K8S的網絡通訊、以及對外部網絡流量的負載均衡。
  • Container Runtime:Worker Node的運行環境。容器運行時(Container Runtime)是 Kubernetes 最重要的組件之一,負責真正管理鏡像和容器的生命周期。Kubelet 通過 Container Runtime Interface (CRI) 與容器運行時交互,以管理鏡像和容器。
其他組件:

kube-dns:負責為整個集群提供 DNS 服務
Ingress Controller:為服務提供外網入口
Heapster:提供資源監控
Dashboard:提供 GUI
Federation:提供跨可用區的集群
Fluentd-elasticsearch:提供集群日志采集、存儲與查詢

K8S重要概念

k8s架構由master和node組成,node可以運行一個或多個pod,pod可以運行一個或者多個容器,master通過deployment管理和控制Pod,Kubelet管理node的資源和Pod生命周期,定期向master匯報node的資源使用情況

集群調度的最小單元就是一個pod,node可以運行一個或多個pod,一個pod可以運行一個容器或者多個容器,并且同一個Pod的容器可以共用Pod里的存儲資源,node中通過Kubelet管理node的資源使用和Pod的生命周期(啟動、關閉和監控)
每個pod有獨一的ip地址,當有多個pod提供相同的服務的時候,就需要有負載均衡的能力,從而這里就涉及到一個概念就是service,專門用來提供服務的。服務主要是用來提供外界訪問的接口,service可以關聯一組pod,這些pod的ip地址各不相同,而service相當于一個復雜均衡的vip,用來指向各個pod,當pod的ip地址發生改變之后,也能做到自動進行負載均衡,在關聯的時候,service和pod之間主要通過label來關聯,也就是標簽,例如圖中的A,B就是標簽,每個deployment通過標簽可以知道它所管理哪些pod
  • Pod:Pod是可以在 Kubernetes 中創建和管理的、最小的可部署的計算單元。Pod可以被理解成一群可以共享網絡、存儲和計算資源的容器化服務的集合。同一個Pod之間的Container可以通過localhost互相訪問,并且可以掛載Pod內所有的數據卷;但是不同的Pod之間的Container不能用localhost訪問,也不能掛載其他Pod的數據卷。每個Pod中都運行著一個特殊的被稱為Pause的容器,其他容器則為業務容器,這些業務容器共享Pause容器的網絡棧和Volume掛載卷,因此它們之間的通信和數據交換更為高效,在設計時我們可以充分利用這一特性將一組密切相關的服務進程放入同一個Pod中,每當啟動一個pod的時候,pause容器也會隨之啟動
  • Deployment:Deployment的作用是管理和控制Pod和ReplicaSet,管控它們運行在用戶期望的狀態中,確保每時每刻有用戶要求數量的Pod在工作。如果一旦發現某Pod不行了,就從其他的node上啟動一個新的pod替換掉。
  • ReplicaSet :ReplicaSet 的目的是維護一組Pod在任何時候都處于穩定運行的狀態。 因此,它通常用來保證給定數量的、完全相同的 Pod 的可用性。ReplicaSet受控制于Deployment
  • Service:Service屏蔽了服務細節,統一對外暴露服務接口。舉個例子,我們的一個服務A,部署了3個備份,也就是3個Pod;對于用戶來說,只需要關注一個Service的入口就可以,而不需要操心究竟應該請求哪一個Pod。一方面外部用戶不需要感知因為Pod上服務的意外崩潰、K8S重新拉起Pod而造成的IP變更,外部用戶也不需要感知因升級、變更服務帶來的Pod替換而造成的IP變化,另一方面,Service還可以做流量負載均衡。
  • Ingress:Ingress是整個K8S集群的接入層,負責集群內外通訊,類似springcloud的zuul網關的作用
  • Label:Label是為使Deployment識別調度范圍內的Pod是哪些,從而使service知道給哪些Pod進行負載均衡。比如我有2個業務A和B,通過標簽,DeploymentA和DeploymentB可以識別調度的Pod在哪里,Label不僅可以貼到pod上,它還可以貼到任何的資源上,例如:Namespace和node都可以貼標簽
  • Namespace:在一個Kubernetes集群中可以使用namespace創建多個“虛擬集群”,這些namespace之間可以完全隔離,資源名稱在同一個命名空間內需保持唯一,但是兩個不同的命名空間可以包含同名的資源。例如service訪問pod時,如果service的命名空間不指定正確,那么就無法通過標簽關聯到pod。但是可以通過某種方式,讓一個namespace中的service可以訪問到其他的namespace中的pod。也就是說命名空間不會隔離不同空間下的Pod 之間的網絡通訊,除非針對命名空間加了相應的安全策略。

通過實例理解概念:

參考:https://zhuanlan.zhihu.com/p/265997618

以搭建Nginx為例:
創建命名空間

vim nginx-namespace.yaml

apiVersion: v1 #類型為Namespace
kind: Namespace  #類型為Namespace
metadata:
  name: ns-test  #命名空間名稱

#創建
kubectl create -f nginx-namespace.yaml
#查詢
kubectl get namespace

在Namespace下創建資源,通過controller來創建pod。deployment為其中一種controller
deployment創建pod

vim nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: ns-test
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80

#創建
kubectl create -f nginx-deployment.yaml
#查詢
kubectl get deployment
#或
kubectl get pods -n ns-test

創建service
使用隨機生產ip:

vim nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

kubectl create -f nginx-service.yaml
//查看生成的ip
kubectl get svc nginx-service -o wide

創建service
使用本機ip:

vim nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 8000

kubectl create -f nginx-service.yaml
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容