Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Deploy Kubernetes Cluster using Kuberspray
Search
Kyle Bai
December 14, 2016
Technology
0
91
Deploy Kubernetes Cluster using Kuberspray
Kyle Bai
December 14, 2016
Tweet
Share
More Decks by Kyle Bai
See All by Kyle Bai
讓 Jenkins 老爺爺掌舵帶領開發者航向美好新世界
kairen
1
160
AWS Startup 2020 - AMIS
kairen
0
40
學習 Kubernetes 不是為了成為 YAML Engineer
kairen
0
250
How to make your container:Kubernetes is a bit more secure
kairen
0
140
Vishwakarma: Terraform modules for deploying EKS and Self-hosting Kubernetes(AWS))
kairen
0
67
Vishwakarma: Terraform modules for deploying EKS and Self-hosting Kubernetes
kairen
0
54
Chatbot as a Service on Container(Kubernetes)
kairen
0
820
IT IRONMAN 2020
kairen
0
54
Advanced Kubernetes For UMC
kairen
0
110
Other Decks in Technology
See All in Technology
Can We Measure Developer Productivity?
ewolff
1
150
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
1
380
Lambdaと地方とコミュニティ
miu_crescent
2
370
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
310
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
180
SRE×AIOpsを始めよう!GuardDutyによるお手軽脅威検出
amixedcolor
0
140
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
9
1.1k
Zennのパフォーマンスモニタリングでやっていること
ryosukeigarashi
0
130
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
120
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
530
OS 標準のデザインシステムを超えて - より柔軟な Flutter テーマ管理 | FlutterKaigi 2024
ronnnnn
0
170
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
130
Featured
See All Featured
Music & Morning Musume
bryan
46
6.2k
A Tale of Four Properties
chriscoyier
156
23k
Designing for Performance
lara
604
68k
Teambox: Starting and Learning
jrom
133
8.8k
Building Your Own Lightsaber
phodgson
103
6.1k
Being A Developer After 40
akosma
87
590k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
RailsConf 2023
tenderlove
29
900
It's Worth the Effort
3n
183
27k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Transcript
https://goo.gl/mngiLM
Deploy Kubernetes Cluster using Kargo Kubespray
Agenda • What is Kubernetes? • CNI/CRI/CSI • Kubespray introduction
• Quick Start • Baremetal • Provider Cloud(GCE)
What is Kubernetes? Kubernetes 是 Google 開源的容器(Container)分散式管理理系統,是建於OCI標準容 器 Runtim之上的叢集排程系統。Kubernetes 設計概念念是來來⾄至
Borg 系統,⽬目標是 管理理⼤大量量的容器叢集。
Kubernetes 架構 K8s 屬於分散式架構系統,主要元件有: • Master – ⼤大總管,可做為主節點 • Node(Minion)
– 主要⼯工作的節點,上⾯面運⾏行行了了 許多容器 • Masters和 Nodes組成叢集(Clusters)
Kubernetes 細節架構
Kubernetes Master Kubernetes Master 包含了了四個基本組件: • Etcd: 儲存 kubernetes 相關資訊。
• API Server:以 REST APIs 介⾯面⽅方式提供所有業 務邏輯CRUD操作,如認證、狀狀態變更更。 • Controller Manager :可說是叢集⼤大腦,透過 apiserver 監控整個叢集狀狀態,並確保叢集處於 預期⼯工作狀狀態。 • Scheduler:監聽 apiserver 來來查詢未分配 Node 的 Pod,根據策略略來來負責整個分散式系統的資 源排程功能。
Kubernetes Node(Minion) Kubernetes Node 包含了了三個基本組件: • kubelet:接收 Master 任務,並負責管理理的映 像檔、容器與資料
Volume等操作,然後定 期回報資源狀狀態。 • kube-proxy: 透過監控 apiserver 中 service 與 endpoint 的變化,來來利利⽤用 iptables 等位服 務設定負載平衡(Only L4 TCP/UDP)。 • container:基於 Container Runtime(Docker or rkt)來來執⾏行行應⽤用程式容器實例例。
Etcd - Distributed reliable key-value store Etcd 是基於 Raft 開發的分散式
K/V 儲 存系統,其有以下特點: • 基本 K/V 儲存 • ⽤用於監控與服務發現 • Key 過期與續約機制 • ⽤用於分散式鎖定管理理與 Leader 選 舉。 • 採⽤用 Raft ⼀一致性演算法(Like paxos) • 有叢集與容錯機制
為什什麼使⽤用 Kubernetes? Kubernetes ⽬目標是管理理跨區域多個主機的容器節點(CRI),提供基本的部署,維護以及運⽤用在 各項應⽤用,擁有以下好處 : • 基於容器的應⽤用程式部署、維運與滾動更更新。 • 負載平衡與服務發現。
• 易易遷移、擴展與升級服務。 • 跨機器與區域的叢集排程。 • ⽀支持公有雲,私有雲,混合雲,以及多種雲平台。 • ⽀支援 Federation 與跨作業系統平台。 • 插件機制與規範化。
Kubernetes community
CNI/CRI/CSI CNI, CRI, CSI 是經過規範化的網路路、運⾏行行與儲存介⾯面。
CNI: Container Network interface CNI 是由 CoreOS 發起的容器網路路規範,是 Kubernetes 網路路插件基礎,⽬目前以貢
獻給 CNCF。其思想為在 Container Runtime 建立時,並建立 network namespace,之後呼叫 CNI 插件來來設定 netns 網路路,最後提供給容器使⽤用。
CNI 插件主要實做兩兩個部份: • CNI Plugins:管理理容器網路路設 定,主要有兩兩個基礎介⾯面, AddNetwork 與 DelNetwork。 •
IPAM Plugin:負責分配 IP 給 容器,主要實做如 host-local 與 DHCP 等。
CNI: Flannel GRE/VXLAN Networking Flannel 是 CoreOS 開發的 Overlay network,基於
Linux TUN/TAP ⽅方式,以 UDP 封裝 IP 封包來來建立⼀一個隧道網路路讓 容器節點進⾏行行溝通。 • 優點:安裝與設定簡單,⼤大多數雲端平 台都⽀支援,對於在 VPC 上沒有額外效 能損失。 • 缺點:VXLAN 模式在 Zero-downtime restart ⽀支援不佳,另外只有 Layer 2 網 路路功能、單⼀一⼦子網路路。
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 效 能差。
CNI: Weave lightweight networking Weave Net 是⼀一種去中⼼心化控制平⾯面的容 器網路路⽅方案,是透過開發 wRouter 以
Full Mesh 的 TCP 連接,並利利⽤用 Gossip 來來同部 控制資訊,以解決集中式 K/V 儲存,在資 料⾯面利利⽤用 UDP 封裝實作 L2 Overlay 網路路。 • 優點:去中⼼心化 K/V 儲存、故障恢復、 傳輸加密與⽀支援多播網路路、可動態增減 網路路、⽀支援跨主機多⼦子網路路。 • 缺點:沒有服務發現、UDP 下的效能不 佳、主機無法動態加入節點網路路。
CNI: Canal = Calico + Flannel Canal 是社群驅動促成的專案,⽬目標是讓 使⽤用者能夠簡單地同時部署 Flannel
與 Calico 的統⼀一網路路⽅方案,結合 Calico 的 Network policy 與 Flannel 的 Overlay Network 技術。 • 優點:Policy-based、⽀支援 Kubernetes 與 Mesos 等平台、⽀支援 Layer 2 與 3 技術。 • 缺點:成熟度不佳。
CRI: Container Runtime interface CRI 是 Kubernetes 社區提出的規範,由於隨著不同的容器引擎推成出新, Kubernetes 已不在只是管理理
Docker 的容器,CRI 將 Kubernetes 與具體容器實現 進⾏行行解耦,來來增加 Kubernetes 的擴展。 CRI 是 Kubelet 在 1.5/1.6 主要負責項 ⽬目,透過重新定義 Kubelet Container Runtime API,來來分離 ImageService 與 RuntimeService,並分別負責映像檔管理理與容器⽣生命週期。
已⽀支援 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。
CSI: Container Storage interface CSI 是基於 CNI 與 CRI 概念念所提出的規範,⽬目的就是讓儲存供應商只需要
開發規範好的插件,就能讓⾃自家儲存在 Kubernetes 上使⽤用。CSI 定義⼀一系列列介 於 Kubernetes 與儲存插件之間的溝通程式介⾯面,並透過標準化⽅方式來來降低開發 複雜與耦合,⽬目前 CSI 希望⽀支援⼤大部分儲存格式,如區塊儲存或檔案系統等, 並同時想⽀支援本地與遠端的儲存服務。 ⽬目前還在規範,出版參參考 Container Storage Interface (CSI)。
Kubespray introduction Kubespray: Deploy a production ready kubernetes cluster.
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 整合有限。(不過可以⾃自⾏行行解決)
Kubespray 架構 Operator Ansible Kubespray Playbook OpenStack GCP AWS Azure
Kargo-cli
Kubespray vs Kops Kubespray 可以執⾏行行於裸機與⼤大部分雲端平台上,並利利⽤用 Ansible 來來作為底層供應與編配的 引擎,其架構簡單,靈活性較⾼高。⽽而 Kops 是⾃自⾏行行開發組態與編配,因此靈活性較低,⽬目前
僅⽀支援雲端平台,⽽而雲端平台現在只可以在 AWS 上部署,其餘都在規劃中。 對於熟悉 Ansible 的⼈人,可以選擇 Kubespray,但是若若只想使⽤用單⼀一雲端平台的話,則可以 選擇 Kops 來來使⽤用 vs
Kubespray vs Kubeadm Kubeadm 是提供 Kubernetes 叢集、組態與部署相關領域知識的週期管理理⼯工具,包含⾃自我託 管部署與動態服務發現等功能,⽬目前作為新⼀一代的快速部署⼯工具,但其缺點是不⽀支援 HA 叢
集部署,且網路路插件要⾃自⾏行行部署。⽽而 Kubespray 是以 "OS operators" ⾓角度出發,其採⽤用多 種 CRI 插件與 CNI 插件,並透過 Ansible 進⾏行行通⽤用的組態設定管理理任務,⽬目前 Kubespray 也會加入⼀一些 Kubeadm 概念念來來增加管理理的功能。 vs
Quick Start Quick start to use kubespray.
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
Operation https://hackmd.io/s/B1Oz17_7W
Baremetal Deploy kubernetes on Baremetal using kubespray
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
Deploy guide https://hackmd.io/s/r1dMjueJZ
Provider Cloud(GCE) Deploy kubernetes on GCE cloud using kubespray.
Deploy guide https://hackmd.io/s/r1LJed20g
www.inwinstack.com Thank You! 迎 棧 科 技 股 份 有
限 公 司