Kubernetes系列(一) - kubernetes入門基本概念


1. 基本概念

1.1 什么是 Kubernetes 集群

  1. Kubernetes用於協調高度可用的計算機集群,這些計算機群集被連接作為單個單元工作
  2. Kubernetes在一個集群上以更有效的方式自動分發和調度容器應用程序

1.2 Kubernetes集群資源組成:

  • Master是集群的調度節點
  • Nodes是應用程序實際運行的工作節點
  1. Master 負責管理集群
  2. Node是Kubernetes集群中的工作機器,可以是物理機或虛擬機
  • 每個工作節點都有一個Kubelet,它是管理 節點 並與 Kubernetes Master 節點進行通信的代理。節點上還應具有處理容器操作的工作,例如 Docker。一個 Kubernetes 工作集群至少有三個節點

  • 節點 使用 Master 公開的 Kubernetes APIMaster 通信

1.3 無狀態和有狀態的區別

1.3.1 無狀態服務

  1. 是指該服務運行的實例不會在本地存儲需要持久化的數據,並且多個實例對於同一個請求響應的結果是完全一致的。
  2. 多個實例可以共享相同的持久化數據。例如:nginx實例,tomcat實例等
  3. 相關的k8s資源有:ReplicaSet, ReplicationController、Deployment等,由於是無狀態服務,所以這些控制器創建的pod序號都是隨機值。並且在縮容的時候並不會明確縮容某一個pod,而是隨機的,因為所有實例得到的返回值都是一樣,所以縮容任何一個pod都可以。

1.3.2 有狀態服務

  1. 有狀態服務可以說是需要數據存儲功能的服務、或者指多線程類型的服務,隊列等。(mysql數據庫、kafka、zookeeper等)
  2. 每個實例都需要有自己獨立的持久化存儲,並且在k8s中是通過申明模板來進行定義。持久卷申明模板在創建pod之前創建,綁定到pod中,模板可以定義多個。

2. Kubernetes結構划分

2.1 Kubernetes總體結構划分

  1. 只有中間的是k8s的部分
  2. 左邊是管理master的
  3. 右邊的是鏡像倉庫

2.2 Master結構划分

  1. API Server

負責與外部通信,有:接口,GUI,命令行

  1. Scheduler

調度器,容器調度

  1. Controller

控制器,負責具體工作: 還有容器監控等等

  1. etcd

第三方的,保存應用程序配置信息的守護進程,K/V存儲

2.3 Node結構划分

  1. kubelet

管理node,而且是負責與master API Server通信

  1. pod

k8s運行的核心基本單元,也是被編排對象

  • k8s上不會直接運行容器,而是運行pod
  • 說白了pod是容器的外殼
  • 但是一個pod可能會包含多個容器,在這種情況下,多個容器被當作一個原子單位管理
  • pod運行在一個私有的隔離的網絡上,默認情況下在同一集群的其他pod和service中可見,但是外部不可見,需要借助service暴露給外部

  1. node還應該具有處理容器操作的工具

例如docker或者rkt,一般是docker

3. Kubernetes的組件組成

3.1 Master Components

  1. kube-apiserver
  2. etcd
  3. kube-scheduler
  4. kube-controller-manager
  5. cloud-controller-manager

3.2 Node Components

  1. kubelet

與API server進行交互的

  1. kube-proxy
  2. Container Runtime

docker等

3.3 Addons拓展

  1. DNS

服務注冊和服務發現

  1. CNI

必須要一個,容器網絡接口實現,flannel,calico。。。

  1. Web UI(Dashboard)

GUI界面

  1. Container Resource Monitoring
  2. Cluster-level Logging

4. Kubernetes的一些對象(資源)

4.1 Kubernetes基礎對象

  1. pod
  2. service

可以認為是pod的反向代理,負責接收客戶端請求,把請求轉給pod

  • 因為每個pod都有自己的內部ip,但是針對一個deployment的pod是有可能變的【pod掛掉或者復制】,所以需要一個service來做一個類似中間者的一個抽象的存在
  • 通過typeServiceSpec中指定可以以不同的方式公開服務
    • ClusterIP(默認): 在集群的內部ip上公開服務。這種類型使得只能從集群內訪問服務
    • NodePort:在每個node上的相同端口上公開服務,可以從集群外部訪問服務。ClusterIP的超集, 最常用
    • LoadBalancer: 在當前雲中創建一個外部負載平衡器(如果支持),並為該服務分配一個固定的外部IP。NodePort的超集。
    • ExternalName-externalName: 通過返回具有該名稱的CNAME記錄,使用任意名稱(在規范中指定)公開服務。不使用代理。此類型需要v1.7或更高版本kube-dns
  1. pod controller(統稱)

Deployment最常見

  1. Namespace
  2. Volume

4.2 高級對象

建立在基礎對象之上,提供額外功能

  1. pod controller(抽象概念):Deployment(具體實現)【負責操作pod】

5. 部署相關

5.1 部署高可用要點

5.2 部署工具

5.3 安裝和部署K8S的兩種方式

  1. 二進制部署

讓基礎程序運行為守護進程

  1. 讓基礎程序運行為容器

自動化部署工具kubeadm

其他章節
kubernetes系列(二) - kubectl的入門操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM