Kubernetes 學習筆記

概覽

Kubernetes是容器集羣管理系統,是一個開源的平臺,能夠實現容器集羣的自動化部署、自動擴縮容、維護等功能。nginx

特色

  • 可移植: 支持公有云,私有云,混合雲,多重雲
  • 可擴展: 模塊化, 插件化, 可掛載, 可組合
  • 自動化: 自動部署,自動重啓,自動複製,自動伸縮/擴展

與傳統部署對比

傳統的應用部署方式是經過插件或腳原本安裝應用。這樣作的缺點是不利於應用的升級更新、回滾等其它一系列複雜管理操做,固然經過建立虛機來擴展功能並不利於可移植性。docker

使用容器

新的方式是經過部署容器方式實現。相對於虛擬機能快速部署且能在不一樣雲、不一樣版本操做系統間進行遷移。api

特色

  1. 快速建立部署應用:與VM虛擬機相比,容器鏡像的建立更加容易。
  2. 持續開發、集成和部署:提供可靠且頻繁的容器鏡像構建/部署,並使用快速和簡單的回滾。
  3. 開發和運行相分離:在build或者release階段建立容器鏡像,使得應用和基礎設施解耦。
  4. 開發,測試和生產環境一致性:在本地或外網(生產環境)運行的一致性。
  5. 雲平臺或其餘操做系統:能夠在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何環境中運行。
  6. Loosely coupled,分佈式,彈性,微服務化:應用程序分爲更小的、獨立的部件,能夠動態部署和管理。
  7. 資源隔離
  8. 資源利用:更高效

Kubernetes

主要功能

  • 存儲系統掛載
  • 應用健康檢測
  • 應用實例的複製
  • Pod自動伸縮擴展
  • 負載均衡
  • 資源監控
  • 日誌訪問
  • 調試應用程序

組件

Master組件

概覽
  1. Master組件提供集羣的管理控制中心。
  2. 爲了簡單起見,一般在一臺VM機器上啓動全部Master組件,而且不會在此VM機器上運行用戶容器。
包含組件
  1. kube-apiserver:暴露全部資源請求接口
  2. ETCD:存儲系統
  3. kube-scheduler:監視新建立沒有分配到Node的Pod,爲Pod選擇一個Node。
  4. 容器資源監測:提供一個UI瀏覽監控數據。
  5. Cluster-level Logging:負責保存容器日誌,搜索/查看日誌。
  6. kube-controller-manager:後臺線程管理器

它們是集羣中處理常規任務的後臺線程。邏輯上,每一個控制器是一個單獨的進程,但爲了下降複雜性,它們都被編譯成單個二進制文件,並在單個進程中運行數據結構

功能
- 節點控制器
- 路由控制器
- Service控制器
- 卷控制器

Node組件

  1. kubelet:節點代理
  2. kube-proxy:鏈接轉發實現服務抽象
  3. docker:運行容器
  4. RKT:docker的替代方案
  5. supervisord:輕量級監控系統
  6. fluentd:守護進程,提供cluster-level logging
Kubernetes對象

Kubernetes對象是Kubernetes系統中的持久化實體,用於記錄容器化正在運行的情況、應用可用的資源、應用的運行策略等。能夠用Kubernetes API管理。
數據結構app

  • Object Spec: 描述了對象所需的狀態,好比但願啓動3個Pod
  • Object Status: 描述了對象的實際狀態,好比實際也啓動了3個Pod

yaml文件結構負載均衡

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

字段解釋分佈式

  • apiVersion: 建立對象的Kubernetes API 版本
  • kind: 要建立什麼樣的對象
  • metadata: 具備惟一標示對象的數據,包括 name(字符串)、UID和Namespace(可選項)
Namespaces的使用

用於劃分資源管理空間,不一樣空間具備不一樣的用途。對於稍有不一樣用途的資源不必區分。
使用 kubectl命令能夠直接建立
建立模塊化

$ kubectl create namespace new-namespace

刪除微服務

$ kubectl delete namespaces new-namespace

查看測試

$ kubectl get namespaces
Labels 和 Selectors

label:label實際上是一對 key/value。
labels Selectors:標籤選擇器。經過標籤選擇器,客戶端/用戶 能方便辨識出一組對象。

Annotations

Annotations不用於標識和選擇對象。能夠將一些其它的元數據放入Annotations,其也是Key/Value格式

"annotations": {
  "key1" : "value1",
  "key2" : "value2"
}
Volume

存在於pod的卷,可掛載到指定位置
做用:

  1. 當容器重啓時,保證磁盤文件不丟失
  2. 容器之間文件共享

Volume具備本身的生命週期,其生命週期比pod中運行的任何容器都要持久。

Node

節點
狀態信息:

  • Addresses
  • Condition: 描述全部running節點狀態
  • Capacity: CPU、內存和能夠調度到節點上的最大pod數。
  • Info: 節點基礎信息

Pod

ubernetes建立或部署的最小且最簡單的基本單位,一個Pod表明集羣上正在運行的一個進程。
Node結構圖
Node結構圖

相關文章
相關標籤/搜索