Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
zxcvbnius committed Sep 24, 2018
1 parent 2fde95c commit b4029e5
Showing 1 changed file with 84 additions and 34 deletions.
118 changes: 84 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,59 +1,109 @@
# 前言
記得去年看到身邊許多人多參加 [IThome鐵人賽](https://ithelp.ithome.com.tw/ironman),心中滿滿崇拜,一直期許明年自己也能參加。然而,今年在[IThome鐵人賽](https://ithelp.ithome.com.tw/ironman)報名截止前兩天才赫然想起有這活動XD,雖然參加匆忙、第一次參賽,但仍是希望30天學習筆記不間斷、順利完賽。

第一次認識 **Kubernetes(aka. k8s)** ,約莫去年夏天時候的事。那時還在一家新創擔任後端工程師,在資源有限的情況下,每個人都須身兼多職,除了開會、討論產品、程式開發、有時還需拜訪客戶。而同時,系統維護以及產品更新也是我們一個需要顧及的課題,如何快速開發客戶的需求、如何確保系統的穩定、以及如何協助團隊之間合作更流暢等,可以說是忙得焦頭爛額。而 Kubernetes 給人最直接的感受是,相較於系統複雜的設定,只需要一名系統兼運維的工程師負責部署與維護、其他人就能更專注在開發上,**即便像我們這樣『小』團隊、也是有能力面對複雜的系統設計,這並不是因為我們做了什麼,而是 Kubernetes 已經幫我們做了很多事情**


# 未來 30 天的學習筆記
希望在未來 30 天裡,能每天不間斷的跟大家分享,不只帶大家認識 Kubernetes ,在最後幾天,也能使用 [第三方套件Kops](https://github.com/kubernetes/kops) 帶著大家操作,在實際應用的環境中,架設 Kubernetes 與使用。這次的學習筆記可以分為以下幾個方向:

# 30天的學習筆記
希望在30天的筆記中,能每天不間斷的跟大家分享,不只帶大家認識Kubernetes,在最後幾天,也能使用[第三方套件Kops](https://github.com/kubernetes/kops)帶著大家操作,在實際應用的環境中,架設Kubernetes與使用。這次的學習筆記可以分為以下幾個方向:

**介紹與開發環境架設**

- [[[Day 1] 介紹Kubernetes是什麼](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day01)
- [[Day 1] 介紹 Kubernetes 是什麼](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day01)
- [[Day 2] Minikube 安裝與配置](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day02)
- [[Day 3] 打造你的docker containers](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day03)
- [[Day 4] 上傳Docker Image到Docker Hub](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day04)
- [[Day 5] 在Minikube上跑起你的docker containers - Pod](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day05)
- [[Day 3] 打造你的 Docker Containers](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day03)
- [[Day 4] 上傳 Docker Image 到 Docker Hub](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day04)
- [[Day 5] 在 Minikube 上跑起你的 Docker Containers - Pod & kubectl 常用指令](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day05)

**Kubernetes基礎概念與實作**

- [[Day 6] 實際環境運行的Kubernetes - Node](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day06)
- [[Day 7] 如何擴張我的pods?! - Replication Controller](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day07)
- [[Day 8] 還在用Replication Controller嗎?不妨考慮Deployments](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day08)
- [[Day 9] 如何讓外部服務與pods的溝通管道 - Services](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day09)
- [[Day 10] Kubernetes世界不可缺少的 - Labels](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day10)
- [Day 11] 如何確保我的程式還在運行 - Healthchecks
- [Day 12] 敏感的資料怎麼存在k8s?! - Secrets
- [Day 13] Demo: 架設stateless Wordpress在Kubernetes
- [Day 14] Kubernetes Web UI介紹
- [[Day 6] 實際環境運行的 Kubernetes - Node](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day06)
- [[Day 7] 如何擴張我的 Pods ?! - Replication Controller](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day07)
- [[Day 8] 還在用 Replication Controller 嗎?不妨考慮 Deployments](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day08)
- [[Day 9] 建立外部服務與 Pods 的溝通管道 - Services](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day09)
- [[Day 10] Kubernetes 世界不可缺少的 - Labels](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day10)
- [[Day 11] 如何確保 Container 運行狀態 - Health Checks](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day11)
- [[Day 12] 敏感的資料怎麼存在k8s?! - Secrets](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day12)
- [[Day 13] Demo: 架設 Stateless Wordpress 在 Kubernetes](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day13)
- [[Day 14] Kubernetes Dashboard 介紹](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day14)

**Kubernetes進階概念與實作**

- [Day 15] 介紹kops - 在AWS 上打造Kubernetes Cluster
- [Day 16] 打造多台機器的cluster - Node Controller
- [Day 17] Pod之間是如何找到彼此呢 - Service Discovery
- [Day 18] 把環境參數帶入Kubernetes - ConfigMap
- [Day 19] Ingress Contoller
- [Day 20] 如何保存我的資料 - Volumes
- [Day 21] Volumes Autoprovisoning
- [Day 22] 在k8s上運行stateful app - Pet Sets
- [Day 23] 如何監控服務的資源使用 - Monitoring
- [Day 24] 實現 auto-scaling
- [Day 25] Demo: 架設stateful Wordpress在Kubernetes
- [[Day 15] 介紹 kops - 在 AWS 上打造 Kubernetes Cluster (上)](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day15)
- [[Day 16] 介紹 kops - 在 AWS 上打造 Kubernetes Cluster (下)](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day16)
- [[Day 17] Pod 之間是如何找到彼此呢 - DNS Service Discovery](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day17)
- [[Day 18] 高彈性部署 Application - ConfigMap](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day18)
- [[Day 19] 在 Kubernetes 中實現負載平衡 - Ingress Controller](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day19)
- [[Day 20] 如何保存 Container 中資料 - Volumes](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day20)
- [[Day21] 如何動態提供 & 管理儲存資源 - Storage Class & PersistentVolumeClaim](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day21)
- [[Day 22] Demo: 在 Kubernetes 上架設 Stateful Wordpress Application](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day22)
- [[Day23] 在 Kuberbetes 上實現排程服務 - Cronjob](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day23)
- [[Day 24] 如何在 Kubernetes 上監控服務的資源使用 - Heapster](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day24)
- [[Day 25] 實現 Horizontal Pod Autoscaling](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day25)


**如何管理Kubernetes**

- [Day 26] 介紹Kubernetes調度中心 - Master Node
- [Day 27] 如何限制每個服務資源 - Resource Quotas
- [Day 28] 如何在k8s管理不同的專案 - Namespaces
- [Day 29] 如何將一台機器上的服務搬移到另外一台 - Node Maintenance
- [Day 30] 如何確保k8s的HA - High Avaiability & 總結
- [[Day 26] 如何管理 Kubernetes 上的資源分配 - Resource Quotas](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day26)
- [[Day 27] 在 Kubernetes 上管理不同的專案 - Namespaces](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day27)
- [[Day 28] 如何將一台機器上的服務搬移到另外一台 - Node Maintenance](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day28)
- [[Day 29] 介紹 Kubernetes 調度中心 - Master Node](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day29)
- [[Day 30] Kubernetes 30天學習總結](https://github.com/zxcvbnius/k8s-30-day-sharing/tree/master/Day30)




# 所以,什麼是Kubernetes

![Kubernetes](https://kubernetes.io/images/favicon.png)
(圖片擷取自:[kubernetes.io](https://kubernetes.io/images/favicon.png))



> 如果對於Docker, Container還不太熟悉的讀者,不妨先看過IThome的專欄 [Container技術三部曲](https://www.ithome.com.tw/article/91838) ,也許會對什麼是container更加了解
[Kubernetes](https://kubernetes.io/) 是一個協助我們自動化部署、擴張以及管理容器應用程式(containerized applications)的系統。相較於需要手動部署每個容器化應用程式(containers)到每台機器上,Kubernetes 可以幫我們做到以下幾件事情:

- 同時部署多個 containers 到一台機器上,甚至多台機器。
- 管理各個 container 的狀態。如果提供某個服務的 container 不小心 crash 了,Kubernetes 會偵測到並重啟這個 container,確保持續提供服務
- 將一台機器上所有的 containers 轉移到另外一台機器上。
- 提供機器高度擴張性。Kubernetes cluster 可以從一台機器,延展到多台機器共同運行。



# 為何使用Kubenetes
筆者過去曾參與過大型專案開發,上線產品、除錯、與測試功能都包在一起。每次發布新功能、修改代碼都非常膽戰心驚,哪怕是一個 bug 也會影響整個系統效能。而相較於這樣 [單體架構(Monolithic Architecture)](https://www.nginx.com/blog/refactoring-a-monolith-into-microservices/) 的服務, [微服務(microservices)架構](https://www.nginx.com/blog/introduction-to-microservices/) 大大減少程式複雜度,將每個服務依照各自業務需求獨立出來,以 Rest API 互相構通。而 microservices 概念的導入,改善了我們過去所面臨到的問題:

- 將龐大的專案拆成幾個不同面向的小專案,當代碼夠小、容易理解、開發效率能被提高
- 各個服務之間也可獨立部署,不因一個服務癱瘓而癱瘓整個系統
- 各團隊可以依照自己的需求使用適合自己的語言、資料庫開發
- 每個服務也可以依照自己的需求,選擇在不同機器上部署

然而,當系統中的微服務越來越多時,管理上也會面臨到很大的挑戰。Kubenetes 的出現讓我們管理這些微服務程式更加方便。



# Kubernetes 的優點
- **可以跑在任何地方 Can run anywhere**
Kubernetes 可以運行在任何地方:不論是私有雲、公有雲(像是 AWS, Google Cloud Platform )、或是混合雲。

- **高度模組化 High modular**
每個服務都被切成一個 container ,不論是要做修改、擴張、甚至將服務遷移到另外一台機器,都可以快速被部署。

- **活躍的社群 Open source & active community**
Kubernetes 是 [開源的](https://github.com/kubernetes/kubernetes) ,受到社群的關注度也非常高。

- **Google的背書 Backed by Google**
最初版的 Kubernetes 是由 Google 內部 Borg team 的成員撰寫且現在仍在持續維護。Google 使用他們自身的系統 Borg 管理容器化應用長達十年多。Kubernetes 的目的即是將 Borg 最精華的部分取出來,使得開發者能夠更簡單、直接應用。



# Q&A
筆者也還在學習Kubernetes中,如有對於文章有任何疑問或建議,也歡迎大家來信<zxcvbnius@gmail.com>
筆者也還在學習Kubernetes中,如有對於文章有任何疑問或建議,也歡迎大家留言給我唷 : )



# 參考連結
- [Kubernetes Wikipedia](https://zh.wikipedia.org/wiki/Kubernetes)
- [GKE 系列文章(一)](https://blog.gcp.expert/kubernetes-gke-introduction/)
- [kubernetes使用指南](http://www.books.com.tw/products/0010724009)
- [kubernetes 使用指南](http://www.books.com.tw/products/0010724009)

0 comments on commit b4029e5

Please sign in to comment.