(2020 版)
Python Taiwan (Telegram 讀書會)
王銘德
9/25/2020
資料庫 MySQL, MongoDB, redis, Oracle 是一種軟體
Web Apps "網頁前端應用程式" 也是一種軟體
提供 API 服務的也是一種軟體
Web Proxy, 像 Apache, Nginx, Traefik 等, 都是軟體
它們都需要被 "部屬" 也就是把 新版的程式, 更新到 servers (硬體) 上. 這類主機, 則稱 "伺服器".
* 有可能一台主機, 裝很多不同軟體, 也有可能同一個軟體, 同一功能的服務 (service), 裝在很多台主機上, 提供同一個服務
(Facebook, Google search, Gmail, iphone, 還有你公司的網站)
這些 servers 的軟體都在哪裡執行?
(跨主機叢集, 又是什麼?)
Facebook 公司機房
Google 公司
機房
貴公司機房
... ...
"主機叢集"
* 大公司的電算中心 (MIS 人員)
* 新創軟體公司 (DevOps 人員)
* 你的服務, 未來需要快速擴充
* 自學者
*大量軟體快速部署
*因使用量瞬間暴增, 需快速增加主機台數, 執行相同軟體
(scale up)
*因使用量瞬間減少, 需減少主機台數, 執行相同軟體
(scale down)
* 很多人, 只會考慮 scale up, 不會想到 scale down 的好處
*使用 containers 技術, 跟利用 VMs (虛擬主機) 的管理方式, 又快, 又省資源, 又免費
*跨主機, 所以可以隨時加入新主機, 或淘汰就主機, 或甚至跨域主機叢集, 服務不停頓
*可因使用量, 自動調整 replicas 數量 (複製更多的軟體同時執行), 也會自動挑資源足夠的主機來執行.
*開放原始碼, 免費使用
*幾乎所有雲端大小廠都有提供, 而且相容. 也就是需求, 因實際情況需要, 可以快速軟體搬家 (重新部署)
* 國外很多人使用, 所以技術資源充裕, 文件完善.
*目前最新版本 1.19.x, 因為技術更新很快, 很多舊版的YAML檔格式不相容, 需修改後才能使用.
*目前台灣比較少人會, 找不到人問問題.
*目前台灣公司用 k8s 的少, 相對不容易找到工作.
(但找到工作, 通常薪水較高!!)
*台灣廠商喜歡自己架 (私有雲) K8s, 無法善用到 scale up and down 的最大好處
*學習門檻稍高
*架設及維護門檻超高. (幾乎就是自己在架設一個 Clouds 一樣.)
(我又是如何部署我的軟體?)
(其他的人, 不需要學安裝. 只要會用 K8s 就好)
(現在, 你在台北市, 可能只有 1/10,000 的機會需要用 K8s)
(有需要的時候, 自然會用 K8s)
(其他靠線上文章學習, 以及問問題)
(scale up)
參考圖來源 https://rtfm.co.ua/wp-content/uploads/2020/06/1_I4j4xaaxsuchdvO66V3lAg.png
(Cluster IP, NodePort, Load Balancer)
參考圖來源 https://rtfm.co.ua/en/kubernetes-clusterip-vs-nodeport-vs-loadbalancer-services-and-ingress-an-overview-with-examples/
(同一個 IP 提供多個 Services)
參考圖來源 https://rtfm.co.ua/en/kubernetes-clusterip-vs-nodeport-vs-loadbalancer-services-and-ingress-an-overview-with-examples/
(其他還有 Nginx 等也可以當 Ingress)
參考圖來源 https://doc.traefik.io/traefik/assets/img/traefik-architecture.png
(學習中用, 未來直接寫 K8s 的 yaml)
➜ kompose convert -f docker-compose.yml
WARN Volume mount on the host "/Users/mingderwang/2020/PYTHON-TAIWAN/test-docker" isn't supported - ignoring path on the host
INFO Kubernetes file "redis-service.yaml" created
INFO Kubernetes file "web-service.yaml" created
INFO Kubernetes file "redis-deployment.yaml" created
INFO Kubernetes file "web-deployment.yaml" created
INFO Kubernetes file "web-claim0-persistentvolumeclaim.yaml" created
或 直接
kompose up
docker-compose.yml
web: -> deployment (pod)
-> service
redis: -> deployment (pod)
-> service
volume: -> persistant volume claim
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
links:
- redis
redis:
image: "redis:alpine"
用 image 才能用 K8s 佈署
volume 要用 PVC
services
改成 image: ming/web
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: web-claim0
name: web-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}
<--- PVC
(舉例而已)
--- apiVersion: v1 kind: Service metadata: name: "nginx-service" namespace: "default" spec: ports: - port: 80 type: ClusterIP selector: app: "nginx"
<---可改用 NodePort, LoadBalancer, ExternalName 等
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
labels:
io.kompose.service: redis
name: redis
spec:
replicas: 1
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
io.kompose.service: redis
spec:
containers:
- image: redis:alpine
name: redis
resources: {}
restartPolicy: Always
status: {}