K8S(kubernetes)概述

Kubernetes概述

一、什麼是K8S(Kubernetes)?
1.k8s全稱kubernetes,這個名字大家應該都不陌生,k8s是爲容器服務而生的一個可移植容器的編排管理工具,越來越多的公司正在擁抱k8s,並且當前k8s已經主導了雲業務流程,推動了微服務架構等熱門技術的普及和落地,正在如火如荼的發展。那麼稱霸容器領域的k8s究竟是有什麼魔力呢?
2.首先,我們從容器技術談起,在容器技術之前,大家開發用虛擬機比較多,比如vmware和openstack,我們可以使用虛擬機在我們的操作系統中模擬出多臺子電腦(Linux),子電腦之間是相互隔離的,但是虛擬機對於開發和運維人員而言,存在啓動慢,佔用空間大,不易遷移的缺點。舉一個我親身經歷過的場景吧,之前在vmware中開發了一個線下平臺,爲了保證每次能夠順利使用,我們就把這個虛擬機導出爲OVF,然後隨身攜帶,用的時候在服務器中部署,這裏就充分體現了虛擬機的缺點。
接着,容器化技術應運而生,它不需要虛擬出整個操作系統,只需要虛擬一個小規模的環境即可,而且啓動速度很快,除了運行其中應用以外,基本不消耗額外的系統資源。Docker是應用最爲廣泛的容器技術,通過打包鏡像,啓動容器來創建一個服務。但是隨着應用越來越複雜,容器的數量也越來越多,由此衍生了管理運維容器的重大問題,而且隨着雲計算的發展,雲端最大的挑戰,容器在漂移。在此業務驅動下,k8s問世,提出了一套全新的基於容器技術的分佈式架構領先方案,在整個容器技術領域的發展是一個重大突破與創新。
那麼,K8S實現了什麼?
從架構設計層面,我們關注的可用性,伸縮性都可以結合k8s得到很好的解決,如果你想使用微服務架構,搭配k8s,真的是完美,再從部署運維層面,服務部署,服務監控,應用擴容和故障處理,k8s都提供了很好的解決方案。
總而言之,k8s可以使我們應用的部署和運維更加方便。
二、kubernetes特性
1.自我修復
在節點故障時可以刪除失效容器,重新創建新的容器,替換和重新部署,保證預期的副本數量,kill掉健康檢查失敗的容器,並且在容器未準備好之前不會處理客戶端情況,確保線上服務不會中斷
2.彈性伸縮
使用命令、UI或者k8s基於cpu使用情況自動快速擴容和縮容應用程序實例,保證應用業務高峯併發時的高可用性,業務低峯時回收資源,以最小成本運行服務
3.自動部署和回滾
k8s採用滾動更新策略更新應用,一次更新一個pod,而不是同時刪除所有pod,如果更新過程中出現問題,將回滾恢復,確保升級不影響業務
4.服務發現和負載均衡
k8s爲多個容器提供一個統一訪問入口(內部IP地址和一個dns名稱)並且負載均衡關聯的所有容器,使得用戶無需考慮容器IP問題
5.機密和配置管理
管理機密數據和應用程序配置,而不需要把敏感數據暴露在徑向力,提高敏感數據安全性,並可以將一些常用的配置存儲在k8s中,方便應用程序調用
6.存儲編排
掛載外部存儲系統,無論時來自本地存儲、公有云(aws)、還是網絡存儲(nfs、GFS、ceph),都作爲集羣資源的一部分使用,極大提高存儲使用靈活性
7.批處理
提供一次性任務,定時任務:滿足批量數據處理和分析的場景
三、kubernetes集羣架構與組件
kubernetes集羣架構拓補圖
K8S(kubernetes)概述
注:

  • API server是所有請求的唯一入口
  • api server管理所有的事務,並把信息記錄到etcd數據庫中
  • etcd有一個自動服務發現的特性機制,etcd會搭建有三個節點的集羣,實現三副本
  • scheduler 調度器用來調度資源,查看業務節點的資源情況,確定在哪個node上創建pod,把指令告知給api server
  • 控制管理器controller-manager管理pod
  • pod可以分爲有狀態和無狀態的pod,一個pod裏最好只放一個容器
  • api server 把任務下發給業務節點的kubelet去執行
  • 客戶訪問通過kube-proxy去訪問pod
  • pod下面的不一定是docker,還有別的容器
  • 一般pod中只包含一個容器,除了一種情況除外,那就是elk
  • elk會在pod內多放一個logstash去收集日誌
    用戶訪問kubernetes過程示意圖
    K8S(kubernetes)概述
    kubernetes各個組件及功能
    1.master組件
  • kube-apiserver
    kubernetes api,集羣的統一入口,各組件之間的協調者,以restful api提供接口服務,所有對象資源的增刪改查和監聽操作都交給apiserver處理後在提交給etcd存儲記錄
  • kube-controller-manager
    處理集羣中常規的後臺任務,一種資源對應一個控制器,controller-manager就是負責管理這些控制器的
  • kube-scheduler
    根據調度算法爲新創建的pod選擇一個node節點,可以任意部署,可以部署在同一個節點上,也可以部署在不同節點上
  • etcd
    分佈式鍵值存儲系統,用戶保存集羣狀態數據,比如pod、service等對象信息
    2.node組件
  • kubelet
    kubelet時master在node節點上的代理agent,管理本node運行容器的生命週期
    比如創建容器、pod掛載數據卷、下載sercet、獲取容器和節點狀態等工作,kubelet將每個pod轉換成一組容器
  • kube-proxy
    在node節點上實現pod的網絡代理,維護網絡規則和四層的負載均衡工作
  • docker或rockert
    容器引擎,運行容器
    kubernetes核心概念
  • pod
    最小部署單元
    一組容器的集合
    一個pod中的容器共享網絡命名空間
    pod是短暫的

  • controllers
    replicaset:確保預期的pod副本數量
    deployment:無狀態應用部署,比如nginx、apache,一定程度上的增減不會影響客戶體驗
    statefulset:有狀態應用部署,是獨一無二型的,會影響到客戶的體驗
    daemonset:確保所有node運行同一個pod,確保pod在統一命名空間
    job:一次性任務
    cronjob:定時任務
    更高級層次對象:部署和管理pod

  • service
    防止pod失聯
    定義一組pod的訪問策略

    確保了每個pod的獨立性和安全性

  • storage
    volumes
    persistent volumes
  • pollcies策略
    resource quotas
  • other
    label:標籤,附加到某個資源上,用戶關聯對象、查詢和篩選
    namespaces:命名空間,將對象從邏輯上隔離
    annotations:註釋
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章