Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deploy Kubernetes Cluster using Kuberspray

Kyle Bai
December 14, 2016

Deploy Kubernetes Cluster using Kuberspray

Kyle Bai

December 14, 2016
Tweet

More Decks by Kyle Bai

Other Decks in Technology

Transcript

  1. Agenda • What is Kubernetes? • CNI/CRI/CSI • Kubespray introduction

    • Quick Start • Baremetal • Provider Cloud(GCE)
  2. Kubernetes 架構 K8s 屬於分散式架構系統,主要元件有: • Master – ⼤大總管,可做為主節點 • Node(Minion)

    – 主要⼯工作的節點,上⾯面運⾏行行了了 許多容器 • Masters和 Nodes組成叢集(Clusters)
  3. Kubernetes Master Kubernetes Master 包含了了四個基本組件: • Etcd: 儲存 kubernetes 相關資訊。

    • API Server:以 REST APIs 介⾯面⽅方式提供所有業 務邏輯CRUD操作,如認證、狀狀態變更更。 • Controller Manager :可說是叢集⼤大腦,透過 apiserver 監控整個叢集狀狀態,並確保叢集處於 預期⼯工作狀狀態。 • Scheduler:監聽 apiserver 來來查詢未分配 Node 的 Pod,根據策略略來來負責整個分散式系統的資 源排程功能。
  4. Kubernetes Node(Minion) Kubernetes Node 包含了了三個基本組件: • kubelet:接收 Master 任務,並負責管理理的映 像檔、容器與資料

    Volume等操作,然後定 期回報資源狀狀態。 • kube-proxy: 透過監控 apiserver 中 service 與 endpoint 的變化,來來利利⽤用 iptables 等位服 務設定負載平衡(Only L4 TCP/UDP)。 • container:基於 Container Runtime(Docker or rkt)來來執⾏行行應⽤用程式容器實例例。
  5. Etcd - Distributed reliable key-value store Etcd 是基於 Raft 開發的分散式

    K/V 儲 存系統,其有以下特點: • 基本 K/V 儲存 • ⽤用於監控與服務發現 • Key 過期與續約機制 • ⽤用於分散式鎖定管理理與 Leader 選 舉。 • 採⽤用 Raft ⼀一致性演算法(Like paxos) • 有叢集與容錯機制
  6. 為什什麼使⽤用 Kubernetes? Kubernetes ⽬目標是管理理跨區域多個主機的容器節點(CRI),提供基本的部署,維護以及運⽤用在 各項應⽤用,擁有以下好處 : • 基於容器的應⽤用程式部署、維運與滾動更更新。 • 負載平衡與服務發現。

    • 易易遷移、擴展與升級服務。 • 跨機器與區域的叢集排程。 • ⽀支持公有雲,私有雲,混合雲,以及多種雲平台。 • ⽀支援 Federation 與跨作業系統平台。 • 插件機制與規範化。
  7. CNI: Container Network interface CNI 是由 CoreOS 發起的容器網路路規範,是 Kubernetes 網路路插件基礎,⽬目前以貢

    獻給 CNCF。其思想為在 Container Runtime 建立時,並建立 network namespace,之後呼叫 CNI 插件來來設定 netns 網路路,最後提供給容器使⽤用。
  8. CNI: Flannel GRE/VXLAN Networking Flannel 是 CoreOS 開發的 Overlay network,基於

    Linux TUN/TAP ⽅方式,以 UDP 封裝 IP 封包來來建立⼀一個隧道網路路讓 容器節點進⾏行行溝通。 • 優點:安裝與設定簡單,⼤大多數雲端平 台都⽀支援,對於在 VPC 上沒有額外效 能損失。 • 缺點:VXLAN 模式在 Zero-downtime restart ⽀支援不佳,另外只有 Layer 2 網 路路功能、單⼀一⼦子網路路。
  9. CNI: Calico BGP Networking Calico 是⼀一種純 Layer 3 的網路路技術(Underlay), 是基於

    Linux Kernel 實做⾼高效能的 vRouter 來來進 ⾏行行封包轉發,不依賴硬體,且不使⽤用 NAT 或 Tunnel 等技術,⽽而每個 vRouter 都是透過 BGP 協定來來將 workload 的路路由訊息進⾏行行傳播。 • 優點:⽀支援 Layer 3 網路路、基於 iptables ACL 規則、⽀支援多種雲原⽣生平台整合、轉發效能 好、⽀支援 Network policy。 • 缺點:不⽀支援 Virtual Routing and Forwarding、有網路路安全問題(未加密)、只⽀支 援 TCP/UDP/ICMP/ICMPv6 協定、IP-in-IP 效 能差。
  10. CNI: Weave lightweight networking Weave Net 是⼀一種去中⼼心化控制平⾯面的容 器網路路⽅方案,是透過開發 wRouter 以

    Full Mesh 的 TCP 連接,並利利⽤用 Gossip 來來同部 控制資訊,以解決集中式 K/V 儲存,在資 料⾯面利利⽤用 UDP 封裝實作 L2 Overlay 網路路。 • 優點:去中⼼心化 K/V 儲存、故障恢復、 傳輸加密與⽀支援多播網路路、可動態增減 網路路、⽀支援跨主機多⼦子網路路。 • 缺點:沒有服務發現、UDP 下的效能不 佳、主機無法動態加入節點網路路。
  11. CNI: Canal = Calico + Flannel Canal 是社群驅動促成的專案,⽬目標是讓 使⽤用者能夠簡單地同時部署 Flannel

    與 Calico 的統⼀一網路路⽅方案,結合 Calico 的 Network policy 與 Flannel 的 Overlay Network 技術。 • 優點:Policy-based、⽀支援 Kubernetes 與 Mesos 等平台、⽀支援 Layer 2 與 3 技術。 • 缺點:成熟度不佳。
  12. CRI: Container Runtime interface CRI 是 Kubernetes 社區提出的規範,由於隨著不同的容器引擎推成出新, Kubernetes 已不在只是管理理

    Docker 的容器,CRI 將 Kubernetes 與具體容器實現 進⾏行行解耦,來來增加 Kubernetes 的擴展。 CRI 是 Kubelet 在 1.5/1.6 主要負責項 ⽬目,透過重新定義 Kubelet Container Runtime API,來來分離 ImageService 與 RuntimeService,並分別負責映像檔管理理與容器⽣生命週期。
  13. 已⽀支援 Container Runtime interface • Docker:⽬目前最穩定,且特性與功能⽀支援程度最⾼高。 • rkt:為 CoreOS 容器引擎⽬目前處於孵化專案,可參參考

    rktlet。 • HyperContainer: v.1.6 已⽀支援,是 hypervisor 與 Docker 的混合使⽤用,可參參考 frakti。 • cri-o:基於 runC 與 intel clear container 的 Runtime,v1.6 已⽀支援,可參參考 cri-o。 • cri-containerd:基於 runC 與 containerd 的 Runtime,孵化中,可參參考 cri- containerd。 • virtlet: 是 Mirantis 開發的 Runtime,可以管理理 libvirt 虛擬機,並使⽤用 Qcow2 的映 像檔格式,可參參考 virtlet。 • Infranetes:直接管理理 IaaS 虛擬機,如 GCE 與 AWS等,可參參考 infranetes。
  14. CSI: Container Storage interface CSI 是基於 CNI 與 CRI 概念念所提出的規範,⽬目的就是讓儲存供應商只需要

    開發規範好的插件,就能讓⾃自家儲存在 Kubernetes 上使⽤用。CSI 定義⼀一系列列介 於 Kubernetes 與儲存插件之間的溝通程式介⾯面,並透過標準化⽅方式來來降低開發 複雜與耦合,⽬目前 CSI 希望⽀支援⼤大部分儲存格式,如區塊儲存或檔案系統等, 並同時想⽀支援本地與遠端的儲存服務。 ⽬目前還在規範,出版參參考 Container Storage Interface (CSI)。
  15. Kubespray Kubespray 是 Kubernetes incubator 中的專案,⽬目標是提供 Production Ready Kubernetes 部署⽅方案,該專案基礎是透過

    Ansible Playbook 來來定義系統與 Kubernetes 叢集部署的任務。 PROS • ⽀支援多種 Linux distributions(CoreOS、Debian Jessie、 Ubuntu 16.04、CentOS/RHEL7)。 • 部署 High Available Kubernetes 叢集。 • 可以部署在 AWS、GCE、Azure、OpenStack 或者 Baremetal。 • 基於 Ansible Playbook 開發,容易易理理解與修改。 • 可組合性(Composable),可⾃自⾏行行選擇 Network Plugin (flannel、calico、canal、weave) 與 Container Runtime Plugin(Docker、rkt)來來部署。 CONS • Kubespray 是很進階的⼯工具,它可以⽤用於⾃自動化整合。但 是由於採⽤用⼤大量量 Ansible 與環境,對這些不舒服的使⽤用者 與開發者,就不太適合了了。 • 整個架構不太直觀。 • ⽬目前 Addons 整合有限。(不過可以⾃自⾏行行解決)
  16. Kubespray vs Kops Kubespray 可以執⾏行行於裸機與⼤大部分雲端平台上,並利利⽤用 Ansible 來來作為底層供應與編配的 引擎,其架構簡單,靈活性較⾼高。⽽而 Kops 是⾃自⾏行行開發組態與編配,因此靈活性較低,⽬目前

    僅⽀支援雲端平台,⽽而雲端平台現在只可以在 AWS 上部署,其餘都在規劃中。 對於熟悉 Ansible 的⼈人,可以選擇 Kubespray,但是若若只想使⽤用單⼀一雲端平台的話,則可以 選擇 Kops 來來使⽤用 vs
  17. Kubespray vs Kubeadm Kubeadm 是提供 Kubernetes 叢集、組態與部署相關領域知識的週期管理理⼯工具,包含⾃自我託 管部署與動態服務發現等功能,⽬目前作為新⼀一代的快速部署⼯工具,但其缺點是不⽀支援 HA 叢

    集部署,且網路路插件要⾃自⾏行行部署。⽽而 Kubespray 是以 "OS operators" ⾓角度出發,其採⽤用多 種 CRI 插件與 CNI 插件,並透過 Ansible 進⾏行行通⽤用的組態設定管理理任務,⽬目前 Kubespray 也會加入⼀一些 Kubeadm 概念念來來增加管理理的功能。 vs
  18. Quick Start ⾸首先安裝 Ansible 與相關套件: $ sudo yum install -y

    epel-release && sudo yum -y install ansible python-netaddr 然後 clone kubespray 專案: $ git clone https://github.com/kubernetes-incubator/kubespray.git 透過 Vagrant 進⾏行行部署: $ sed -i 's/\$os =.*/\$os = \"coreos-stable\"/g' Vagrantfile $ vagrant up $ vagrant ssh k8s-01
  19. Kubespray 節點部署情境 6 vms, 2 are nodes and masters, 1

    is node only and a distinct etcd cluster 8 vms, 2 distinct masters, 3 nodes and 3 etcds 3 vms, all 3 have etcd installed, all 3 are nodes (running pods), 2 of them run master components