首先來看一個最簡單的系統架構圖:由一個主節點和若干工做節點組成,開發者將一個應用列表提交到主節點,k8s會將它們部署到集羣的工做節點,組件被部署在哪一個節點對開發者和系統管理員來講都不用關心。
在這個層級上,k8s能夠當作是集羣的操做系統,幫助開發者聚焦核心應用功能,沒必要去考慮額外的服務如:服務發現、擴容、負載均衡、自恢復或者選舉leader等,同時也可以幫助運維團隊獲取更高的資源利用率。
視角拉近一點會看到k8s的架構是以下所示,在硬件層面,一個k8s集羣由不少節點構成,主要分爲兩類:nginx
各節點具備的組件及其功能可參考我以前的文章[k8s-設計理念-原理圖](http://www.javashuo.com/article/p-kvgsxlnm-hd.html)git
最後看一個在k8s集羣中是如何部署應用程序的簡易流程圖。
左邊的容器被分爲3組,這些容器組被稱爲pod,旁邊的數字表明pod的副本數量,後續將會詳細講解。pod通常由deployment控制器負責建立,開發人員提交的deployment.yaml裏面會包含建立pod所需的信息,下面是一個nginx-deployment.yaml的例子。github
apiVersion: apps/v1 // 當前使用的apiVersion版本 kind: Deployment // 要建立的資源類型 metadata: // 該資源的元數據,name是必需的元數據項 name: nginx-deployment labels: app: nginx spec: // 該Deployment的規格說明 replicas: 2 // 副本數量 selector: // label選擇器 matchLabels: app: nginx template: // 定義Pod的模板,這是配置文件的重要部分 metadata: // 定義Pod的元數據,至少要定義一個label labels: app: nginx spec: // 描述Pod的規格,此部分定義Pod中每個容器的屬性,name和image是必需的 containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
執行kubectl apply -f nginx-deployment.yaml
經過 kubectl get 查看 nginx-deployment 的各類資源web