K8S(kubernetes)概述

Kubernetes概述

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

  • 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的獨立性和安全性nginx

  • storage
    volumes
    persistent volumes
  • pollcies策略
    resource quotas
  • otherlabel:標籤,附加到某個資源上,用戶關聯對象、查詢和篩選namespaces:命名空間,將對象從邏輯上隔離annotations:註釋
相關文章
相關標籤/搜索