學習筆記---K8s

什麼是kubernetes?

服務部署模式的變遷

  1. 將服務直接部署在物理機上;
  2. 將服務部署在虛擬機上(虛擬機分隔物理資源,使服務器得到充分利用)openstack;
  3. 將服務部署到容器中(容器化),使用k8s管理容器;

帶來的問題

  • 前提條件:SOA架構,微服務架構模式下,服務拆分越來越多,部署維護的服務越來越多,如此多的服務如何去管理?
  • 面臨問題:
  1. 如何對服務進行橫向擴展?
  2. 如何應對容器宕機?數據應該如何恢復?
  3. 如何在不影響業務的前提下發布新版本?
  4. 如何對容器進行監控?
  5. 如何調度創建容器?
  6. 如何保證數據安全性?
  • 以上問題使用k8s進行管理容器可以完美解決

雲架構 & 雲原生

  • 雲 和 k8s 的關係
  1. 雲就是使用容器構建的一套服務集羣網絡,雲由很多的大量容器構成。
  2. k8s 就是用來管理雲中的容器。
  • 雲架構
  1. iaas 基礎設施即服務
  2. paas 平臺即服務
  3. saas 軟件即服務
  4. serverless:站在用戶的角度考慮問題,用戶只需要使用雲服務器即可,在雲服務器所有的基礎環境,軟件環境都不需要用戶自己考慮。(趨勢)
  • 雲原生:讓應用程序(項目,服務軟件)運行在雲上的解決方案叫做雲原生。具有以下特點:
  1. 容器化 --- 所有的服務都必須部署在容器中
  2. 微服務 --- web服務架構師微服務架構
  3. CI/CD
  4. DevOps

k8s 在企業中應用場景

  1. 可以構建自動化運維平臺
  2. 可以充分利用服務器資源
  3. 可以使服務進行無縫遷移

kubernetes 架構原理

  • kubernetes 是google公司使用go語言開發,是根據borg系統開發出來的。
  • kubernetes 架構
  1. master節點:不存儲容器,只負責調度、控制器、網關、資源對象存儲。
    1. api server:k8s網關,所有的指令請求都必須要經過api server;
    2. scheduler:調度器,使用調度算法,把請求資源調度某一個node節點;
    3. controller:控制器,維護k8s資源對象;
    4. etcd:存儲資源對象;
  2. node節點(物理機):內部存pod,pod中存容器。
    1. docker:運營容器的基礎環境,容器引擎;
    2. kubelet:在每一個node節點都存在一份,在node節點上的資源操作指令由kubelet來執行,負責本地pod的維護。
    3. kube-proxy:代理服務,負責負載均衡,在多個pod之間來做負載均衡;
    4. fluentd:日誌收集服務;
    5. pod:是k8s管理的基本單元(最小單元),pod內部存放容器。k8s不直接管理容器,而是管理pod;
  3. 關係: 一個master 對應一羣 node節點。

Pod 核心原理

  • pod也是一個容器,用來封裝容器,相當於一個獨立主機(虛擬化分組)有自己的ip、主機名,一個沙箱環境;
  • 在部署服務時,用來管理一組相關的服務(一般爲一個服務);
  • 一組相關服務:在鏈式調用上的一組服務;
  • 實現服務集羣:只需要複製多個pod副本即可,k8s的擴容、縮容就是在控制pod的數量;
  • 無法直接對外提供服務:pod是虛擬化的,沒有物理機或網卡與之對應,只能綁定物理機的端口,讓其與pod的端口進行映射,這樣可以通過物理機進行數據包的轉發;
  • 生命週期:每一個生命週期內的ip、hostname都是不同的,即pod宕機後新建的pod的ip、hostname與之前的不相同;

  • Pod底層:

1.Pod內部容器創建之前,必須先創建pause容器。

2.服務容器之間訪問使用localhost,相當於訪問本地服務一樣。

ReplicaSet 副本控制器

  • 功能:控制pod副本(服務集羣)的數量,使得永遠與設定的數量保持一致,當有pod宕機的時候,副本控制器會立馬重新創建一個新的pod;
  • 原理:通過標籤選擇器來選擇維護一組相關的服務;
  • 兩種副本控制器:
    1. ReplicationController:使用標籤選擇器時只能單選;
    2. ReplicaSet:使用標籤選擇器時既能單選也能複選;(建議使用

Deployment 部署對象

  • 服務部署結構模型,一般用來部署無狀態服務,不能部署有狀態的服務,如MySql;
  • 支持滾動更新;

StatefulSet 部署對象

  • 服務部署結構模型
  • 解決有狀態服務的容器化部署問題
    • 有狀態服務:
      1. 有實時的數據進行存儲;
      2. 有狀態服務集羣中,把一個服務抽離出去,一段時間後再加入集羣網絡,集羣網絡無法使用;
    • 無狀態服務:
      1. 無實時的數據進行存儲;
      2. 無狀態服務集羣中,把一個服務抽離出去,一段時間後再加入集羣網絡,對集羣網絡沒有影響;

Service 資源對象

  • pod IP:pod的 IP 地址;
  • node IP:物理機的 IP 地址;
  • cluster IP:虛擬 IP,是由k8s抽象出的service對象,這個service對象就是一個VIP的資源對象;
  • 通信:service同樣不能直接對外提供服務,與pod間的通信是局域網通信;
  • 請求流程:外部請求→物理機IP:Port→將請求交給service→service使用iptable、ipvs分發到pod;
  • 實現負載均衡:service的負載均衡實際上是iptable、ipvs實現的;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章