k8s基礎知識

一、架構

master節點:

運行如下deamon服務:

  • apiserver:提供restful api服務
  • scheduler:用於調度pod到node
  • Controller Manager:用於管理各種controller
  • etcd:配置管理
  • 網絡:如flannel

node節點:

  • kubelet:從scheduler獲取pod配置信息,並在節點創建pod。
  • kube-proxy:轉發service的請求
  • 網絡:如flannel

二、核心概念

pod:調度的最基本單元,最基本工作單元,調度的時候整體調度。

    pod中所有容器使用同一個網絡namespace,共享存儲。

    pod裏一般只有一個容器,或者裏面的容器的關聯很緊密,共享資源。

 

kubernetes通過controller來管理pod,controller中定義了pod的部署特性。

controller類型:

1.deployment:最常用的controller,用來部署應用。

2.ReplicaSet:實現pod的多個副本管理。通過部署deployment來自動創建rs,不用直接操作。

3.DaemonSet:用於每個node最多運行一個副本的場景,即deamon。比如ceph,kubernetes自身的服務kube-proxy等。

4.StatefuleSet:用於有狀態的應用部署。需要穩定的集羣成員應用部署,如etcd

    穩定的唯一的網絡標識,用於發現集羣內部其他成員。如etcd-0,etcd-1

    穩定的持久化存儲。

    啓動和關閉時保證有序。

    存儲必須用pv/pvc或者外部存儲。刪除或縮容不會刪除相關卷,保證數據安全。需要一個headless service生成唯一表示,開發人員手動創建。手工升級。

    生成的pod根據名稱來匹配存儲,實現狀態持久化。

5.job:用於運行結束就刪除的應用。其他controller裏的pod通常是持續運行的長期應用。

6.service:service用於爲pod提供負載均衡,用於提供ip和端口訪問pod。用kube-proxy使用iptables實現。

7.namespace:命名空間,用於controller和pod等資源的隔離。

    default:默認命名空間

    kube-system:放系統資源

 

label:使用label來影響pod的調度,如在某個節點添加label屬性有ssd,有該label的pod會調度到指定節點。

job執行失敗:失敗後會一直重試。容器失敗會自動重啓。

dns:kubeadm安裝後會默認安裝kube-dns組件,用於對service做dns映射。是namespace隔離的。

外網訪問service:

    ClusterIP:默認service,只有cluster內部可以訪問。

    NodePort:映射到cluster靜態端口。每個節點都可以,實際實現用的iptables。

    LoadBalancer:雲負載均衡

 

健康檢查:

    默認健康檢查機制:每個容器啓動時執行一個進程,判斷返回碼是不是0,非0則重啓容器。

    liveness:自定義判斷容器是否健康條件,如文件是否存在。不健康則重啓。

    Readiness:自定義判斷容器是否健康條件,不健康設置容器不可用,不對service提供服務。

存儲資源:

    emptyDir:host上空目錄,pod從節點上刪除就沒了。 hostpath:跟host綁定,host沒了就沒了。

    外部存儲:各種雲存儲,共享存儲。

    pv和pvc:pv,將外部存儲重新規劃出一塊,由管理員創建和維護。pvc,對pv的申請。

        根據回收策略,刪除pvc用於回收清理pv,數據清空。也可以保留數據。保留的話再想刪除數據就需要刪除pv了。

    動態pv:指定容量和存儲類型等,動態分配pv。使用storageclass。

 

配置安全管理:

    configmap:

        非敏感信息,明文存儲。volume或者環境變量形式使用。

    secret:

        加密保存敏感信息,如用戶名密碼。

        以volume形式掛載到pod,也可以用環境變量形式使用。

 

Helm:包管理器。

 

網絡模型:

    每個pod有各自的ip地址,pod內部容器可以通過localhost通信,pod之間可以直接通信。

    pod可能不斷創建和銷燬,ip不固定,所以用service來抽象出pod的ip來訪問,同時提供高可用和負載均衡。

CNI:容器網絡規範。

    插件形式支持很多種網絡方案,如Flannel、Calico等

    network-policy:使用label來選擇pod,並指定與外界通信方式。Flannel沒實現,Calico實現了。

 

k8s集羣監控:

    Weave Scope

 

日誌管理:

    Kubernetes 開發了一個 Elasticsearch 附加組件來實現集羣的日誌管理。這是一個 Elasticsearch、Fluentd 和 Kibana 的組合。Elasticsearch 是一個搜索引擎,負責存儲日誌並提供查詢接口;Fluentd 負責從 Kubernetes 蒐集日誌併發送給 Elasticsearch;Kibana 提供了一個 Web GUI,用戶可以瀏覽和搜索存儲在 Elasticsearch 中的日誌。

    ElasticSearch實現

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