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

An Introduction to Kubernetes

Avatar for Kyle Bai Kyle Bai
November 04, 2016

An Introduction to Kubernetes

Avatar for Kyle Bai

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