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

An Introduction to Kubernetes

Kyle Bai
November 04, 2016

An Introduction to Kubernetes

Kyle Bai

November 04, 2016
Tweet

More Decks by Kyle Bai

Other Decks in Technology

Transcript

  1. 三者差異異-全虛擬化(Full Virtualization) • 全虛擬化(Full Virtualization)是透過軟體來來模擬虛擬的硬體環境,所有硬 體資訊的溝通,都需要透過轉換的⽅方式來來運作,因此 Guest OS 不知道⾃自 ⼰己活在虛擬環境下。

    • 優點:不需要修改作業系統核⼼心,因此可運作⼤大部分的作業系統種類。 • 缺點:透過⼆二進位轉譯會消耗較多的硬體資源。 • ex: Virtual PC 、VMWare、Virtual Box、KVM
  2. 三者差異異-半虛擬化(Para-Virtualization) • 半虛擬化(Para-Virtualization)簡單說就是指模擬⼀一半,因此 Guest OS 知 道⾃自⼰己是被模擬的環境,並且要遵守很多指令來來進⾏行行執⾏行行,但好處是 Host OS 不需要模擬

    CPU,因此負荷低。 • 優點:此⽅方式虛擬化對於硬體資源消耗相對較少。 • 缺點:因為必須修改作業系統核⼼心,因此可於半虛擬化平台上運作的作業 系統種類較少。 • ex: Xen
  3. 三者差異異-作業系統層虛擬化(OS-Virtualization) • 作業系統層虛擬化(OS-Virtualization)只在 Host OS 上模擬⼀一個⾏行行程,所有的 CPU/RAM/IO 等資源,都共⽤用原⽣生的 Host OS,完全沒有模擬Hardware

    的負 擔,所以跟在原機上執⾏行行的效能,幾乎⼀一樣,⼤大約只差1-3%的效能。 • 優點:虛擬化較輕量量,且效能最佳。 • 缺點:Host OS 與 Guest OS 必須使⽤用同⼀一種 Kernel,Linux 只能模擬 Linux OS,⽽而 Windows 只能模擬 Windows。 • ex: OpenVZ、Linux Container
  4. Linux 容器使⽤用的 Linux Kernel 功能 • Namespaces(mnt, pid, net, ipc,

    uts/hostname, user ids) • cgroups(cpu, memory, disk, i/o - resource management) • AppArmor, SELinux(security/access control) • seccomp(computation isolation) • chroot(file system isolation)
  5. Docker Docker 是 Docker.inc(dotCloud) 於 2013 年年開源的專案,早期是 LXC 基礎 上進⾏行行封裝的⼯工具,從檔案系統、網路路與程序隔離等,都極⼤大簡化了了

    Linux 容器的管理理,因此虛擬化更更為輕量量。 P.S. 最初實作是基於 LXC,從 0.7 以後開始去除 LXC,轉⽽而使⽤用⾃自⾏行行開發 的 libcontainer,從 1.11 開始,則進⼀一步演進為使⽤用 runC 和 containerd。
  6. Docker 底層架構 基於 Linux 核⼼心的 cgroup, namespace,以及 AUFS 類的 Union

    FS 等技術,對 處理理序進⾏行行封裝隔離,屬於 作業系統層⾯面的虛擬化技 術。
  7. 容器 (Docker Container) 利利⽤用 Image 執⾏行行後的服務就稱 為⼀一個 container,可以想成是 VM 的實例例

    (Instance) ,它在⼀一 個被隔離的⾏行行程中執⾏行行,這⾏行行 程共享主機的核⼼心。
  8. Docker - Hello World # Install docker engine > curl

    -fsSL https://get.docker.com/ | sh # Get one base Docker image > docker pull ubuntu # List Docker images available > docker images # Run hello world > docker run ubuntu:14.04 echo "Hello world" https://www.katacoda.com/courses/docker
  9. Detached mode # Run hello world in detached mode (-d)

    > docker run -d ubuntu sh -c "while true; do echo hello world; sleep 1; done" # Get container’s ID > docker ps # Stop/start/restart the container > docker stop <container-id>
  10. 微服務 (Microservices) 是⼀一種 軟體架構風格,它是以專注於單 ⼀一責任與功能的⼩小型功能區塊 (Small Building Blocks) 為基礎, 利利⽤用模組化的⽅方式組合出複雜的

    ⼤大型應⽤用程式,各功能區塊使⽤用 與語⾔言無關 (Language- Independent/Language agnostic) 的 API 集相互通訊。 微服務 (Microservices)
  11. Kubernetes 架構 K8s 屬於分散式架構系統,主要元件有: • Master – ⼤大總管,可做為主節點 • Node(Minion)

    – 主要⼯工作的節點,上⾯面運⾏行行了了 許多容器 • Masters和 Nodes組成叢集(Clusters)
  12. Kubernetes Master Kubernetes Master 包含了了四個基本組件: • Etcd: 是 CoreOS 團隊發起的⼀一個管理理設定資訊

    和服務發現(service discovery)的專案。 • API Server:以 REST APIs 介⾯面⽅方式提供所有業 務邏輯CURD操作。 • Controller Manager Server:所有其他叢集級 功能都是透過控制管理理器(Controller Manager)來來 操作。 • Scheduler:負責整個分散式系統的資源排程。
  13. Kubernetes Node(Minion) Kubernetes Node 包含了了四個基本組件: • Kubelet:負責管理理的映像檔、容器與資料 Volume等操作。也是連接 Master 的橋樑。

    • Kube-proxy: 為了了解決外部網路路能夠群曲跨 機器叢集中容器提供的應⽤用服務⽽而設計。⽀支 援 TCP,UDP stream forwarding 或 round robin TCP,UDP forwarding。 • Container:基於 Docker engine 來來執⾏行行應⽤用 程式容器實例例。
  14. Kubernetes - Pod Pod 是 K8s 中最⼩小的部署單位,可以將⼀一個或多個容器組成⼀一個 Pod,Pod 所 包含的容器只會運⾏行行在同⼀一個

    Host 上,並共享 network namespaces、IP port,每個 Pod的 network mapping 都是由 container pause 所封裝處理理的。
  15. Pod 的特性 以下針對 Pod 的特性進⾏行行說明: 1. Pod 擁有不確定的⽣生命週期,這意味著不曉得任⼀一pod是否會永久保留留 2. Pod

    內有⼀一個讓所有container共⽤用的Volume,這會與Docker不同 3. Pod 採取shared IP,內部所有的容器皆使⽤用同⼀一個Pod IP,這也與 Docker不同 4. Pod 內的眾多容器都會和Pod同⽣生共死,就像桃園三結義⼀一樣!
  16. Kubernetes - Service Service是 pod 服務的抽象 層,俱有負載平衡的功 能,由於 pod 的數量量與IP

    不會固定,可將⼀一群 pod 指派成 service 並給予⼀一個 固定IP (cluster IP),service 會將請求⾄至 cluster IP 的流 量量導入其對應 pod。
  17. Service 的特性 以下針對 Service 的特性進⾏行行說明: 1. 每個 Service 包含著⼀一個以上的 Pod

    2. 每個 Service 有個獨立且固定的IP地址 – Cluster IP 3. 客⼾戶端訪問 Service 時,會經由上述提過的 Proxy 來來達到負載平衡、與 各 Pod 連結的結果 4. 利利⽤用標籤選擇器(Label Selector),聰明地選擇那些已貼上標籤的 Pod
  18. Kubernetes - Deployments Deployments(Replication Controllers)是部署群組 Pods,其會確保 K8s 系統 中指定數量量副本的 Pod

    存 活, 也可以利利⽤用 Label 及 Rolling update 來來進⾏行行副本 的擴展或更更新。
  19. 單機 Kubernetes 安裝 Mac OS X 安裝指令 # curl -Lo

    minikube https://storage.googleapis.com/minikube/releases/v0.17.1/ minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/ bin/ Linux 安裝指令 # curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.17.1/ minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
  20. 簡單 minikube 指令 檢視版本資訊 # minikube version 檢查 k8s version

    # minikube get-k8s-versions 確認 minikube 狀狀態 # minikube status 啟動與關閉 minikube # minikube start/stop Minikube 的儀表板 # minikube dashboard minikube docker env # minikube docker-env minikube ssh # minikube ssh
  21. 安裝 kubectl ⼯工具 Mac OS X 安裝指令 # curl -LO

    https://storage.googleapis.com/kubernetes-release/release/v1.5.3/bin/ darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ Linux 安裝指令 # curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.5.3/bin/ linux/amd64/kubect && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
  22. 建立⼀一個 Nginx applcation cluster ⾸首先下載 run-my-nginx.yaml 接著執⾏行行以下指令: $ kubectl create

    -f run-my-nginx.yaml $ kubectl get po $ kubectl get deployments $ kubectl rollout status deployment/nginx- deployment $ kubectl describe deployments
  23. 建立⼀一個 Nginx applcation service ⾸首先下載 nginx-svc.yaml 接著執⾏行行以下指令: $ kubectl create

    -f nginx-svc.yaml $ kubectl get svc my-nginx $ kubectl describe svc my-nginx # minikube ssh $ curl 10.0.0.76
  24. 建立⼀一個 NodePort service 修改 nginx-svc.yaml 加入以下內容: spec: type: NodePort ports:

    - port: 80 targetPort: 80 protocol: TCP nodePort: 31000 selector: run: my-nginx
  25. 其他部署⼯工具 • kubeadm • kargo • Kops • Kube-aws •

    Bootkube • Kismatic • Terraform • Supergiant • kubebox • LazyKube
  26. 【⼤大規模容器叢集實例例】雷亞遊戲借助Kubernetes,3⼈人搞定百萬玩家App底層維運 (1/3) http://www.ithome.com.tw/news/108748 How is 雷亞? 成立於2012年年的雷亞遊戲,截⾄至現今已經推出了了5款遊戲,在Google Play平臺上累積下載次數超過2,300萬,其遊戲已在23個國家中拿下付費排⾏行行榜 的第⼀一名。在2012年年年年底,雷亞遊戲推出⾳音樂遊戲Mandora 使⽤用Kubernetes的三⼤大優點

    除了了技術決策的原因,鐘志遠也歸納其他Kubernetes的使⽤用優點。第⼀一是其開源的性質,只要使⽤用上碰到任何異異常,只要開啟它在GitHub專案的⾴頁 ⾯面,就可以了了解其運作原理理且進⾏行行除錯。 第⼆二則是Kubernetes⽀支援多區(Multi-zone)部署功能,在其1.2.4版本中,開發者可以在資料中⼼心內建置叢集外,叢集還可以分布在不同區間(Zone) 內,藉此提升應⽤用程式的可⽤用性。 最後則是其運⾏行行環境很容易易開發者進⾏行行除錯。鐘志遠舉例例,當開發者想要利利⽤用本機電腦連線⾄至遠端環境除錯時,開發者不需要透過重重的SSH連線、 建立VPN等步驟,只需要⼀一些基本指令,就可以對Container進⾏行行存取並且讀取其內部運⾏行行資料。
  27. Kubernetes 在華為全球 IT 系統中的實踐(1/3) https://read01.com/kkg3ag.html 華為 IT 系統規模非常龐⼤大,部署在全球各個地區,業務量量⼤大, 應⽤用數量量急劇增長。隨著規模的愈發龐⼤大,問題也越來來越突出: 1.

    資源利利⽤用率低,虛擬機增長過快,成本激增。 2. 跨區域多 DC 的部署維護無法拉伸,運維投入巨⼤大。 3. 系統重載、應⽤用伸縮周期長。 4. 難以⽀支持快速疊代,業務上線效率低。
  28. Kubernetes 在華為全球 IT 系統中的實踐(3/3) 資源利利⽤用率提升了了 3 到 4 倍,當前的規模達到 2000

    多個虛機。下⾯面重點講下近期的兩兩⼤大重點技術實踐: 1. Kubernetes 多集群聯聯邦 2. 應⽤用間的親和/反親和調度。
  29. Smart Conference at OpenStack Summit Austin TCP Cloud - Smart

    Conference at OpenStack Summit Austin(2/2)
  30. 越來來越多廠商提供 Kubernetes 服務或與 Kubernetes 結合 ... 微軟、紅帽與IBM加入Google Kubernetes容器管理理開放源碼專案 瞄準容器混搭平臺,Kubernetes 1.5新版釋出,竟然開始⽀支援Windows

    Server⾃自家容器 Google容器調度⼯工具Kubernetes正式登陸Azure Container服務 結合Docker與Kubernetes,紅帽打造企業級容器應⽤用程式平臺 CoreOS捨棄⾃自家調度⼯工具Fleet,將重⼼心轉移⾄至Kubernetes CoreOS推出新版容器管理理平臺Tectonic,讓Kubernetes能⾃自動更更新 Rancher正式推出1.0版本,同時可以建構Docker Swarm及Kubernetes叢集 Canonical加入容器調度戰局,推出⾃自家版本Kubernetes 推廣無伺服器新架構,⽤用Kubernetes加速企業上雲端 在 2013 年年推出以Container為主的GKE服務 後,⼀一直到今天,Google每周啟⽤用的 Container數量量超過了了20億個。
  31. More Use Case Kubernetes User Case Studies Making OpenStack Production

    Ready with Kubernetes and OpenStack Open Source IoT Platform based on OpenStack and Kubernetes
  32. References • http://en.wikipedia.org/wiki/Virtualization • http://en.wikipedia.org/wiki/Hypervisor • http://en.wikipedia.org/wiki/LXC • http://www.cs.ucsb.edu/~rich/class/cs290-cloud/papers/lxc-namespace.pdf •

    http://en.wikipedia.org/wiki/Cgroups • http://en.wikipedia.org/wiki/AppArmor • http://en.wikipedia.org/wiki/Security-Enhanced_Linux • http://www.lorien.ch/server/chroot.html • http://kubernetes.io • https://github.com/ramitsurana/awesome-kubernetes