Slide 1

Slide 1 text

Laravel on Kubernetes 101

Slide 2

Slide 2 text

Agenda • 簡單認識 Kubernetes / Docker • 介紹 Kubernetes 各項元件 • 實際部署⼀一個 Laravel Project 到 GKE 上

Slide 3

Slide 3 text

關於我 • Jerry Cheng • Sr. Software Engineer • 偶爾會假裝⾃自⼰己是 Operator • https://www.facebook.com/ ilay.tw

Slide 4

Slide 4 text

What is Kubernetes • 容器的全⾃自動管理理/調度平台,誕⽣生⾃自 Google Borg • 不限制 application 類型,只要能容器化的都吃 • 各種抽象化的資源類型 • web/database • task runner • auto scaler • Ingress..

Slide 5

Slide 5 text

Why Containers • ⼀一致性的執⾏行行環境 • ⽅方便便的應⽤用部署,有利利於持續整合/持續部署 • 清楚的分離 Dev 與 Ops,有利利於分⼯工 • 以應⽤用為中⼼心的管理理⽅方式

Slide 6

Slide 6 text

Docker • 了了解 Docker Container 的⽣生命週期 • 了了解 Docker Image 的管理理流程

Slide 7

Slide 7 text

https://docs.microsoft.com/zh-tw/dotnet/standard/microservices-architecture/docker-application-development- process/media/image1.png

Slide 8

Slide 8 text

Docker Registry • 維護⽅方式跟 Github 有 87% 像,但是放 Docker image • Dockerhub -> 由 Docker 官⽅方維護,是⽬目前最⼤大的 public registry • Private registry: • VMware Harbor • Gitlab Registry • Cloud: AWS/GCP/Azure…

Slide 9

Slide 9 text

Kubernetes 資源介紹

Slide 10

Slide 10 text

Kubernetes Nodes • Node • Node • 負責 Resource 的執⾏行行 • 監控 Resource 的健康狀狀態 • Master Node • 管理理與監控 Node • 負責調度所有的 Resource • 儲存整個 Cluster 的運作狀狀態 • 架設⽅方式 • ⾃自架:minikube / kubeadm / Rancher 2.x (⼈人⽣生短短幾個秋...) • 直接⽤用 Cloud: AWS/ GCP/ Azure/ DigitalOcean…

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

• ⼀一組資源的集合 • 隔離不同 namespace 之間的資源(persistent volume 除外) • 預設有 kube-system/ kube-public/ default https://www.mundodocker.com.br/wp-content/uploads/2017/06/namespaces.png

Slide 13

Slide 13 text

Pod • Kubernetes 中的最⼩小執⾏行行單位 • ⼀一個完整的 application 部署封裝,可能有⼀一個以上的 container • 共享儲存空間/網路路 https://i0.wp.com/foxutech.com/wp-content/uploads/2018/02/Kubernetes-Pod.jpg

Slide 14

Slide 14 text

ReplicaSet • 保證 Pod 的數量量跟設定中要求的⼀一樣 • 少了了就補⿑齊,多了了就砍掉,絕對不多不少 • ⽀支援動態縮放 https://prod-edxapp.edx-cdn.org/assets/courseware/v1/27bbf25e6c924d3db9c2e7e568a90bbf/asset-v1:LinuxFoundationX+LFS158x+2T2017+type@asset+block/replicaset-3.png

Slide 15

Slide 15 text

Deployment • 管理理 Pod 與 ReplicaSet • 聲明式更更新 • ⽀支援 Rolling Update

Slide 16

Slide 16 text

Rolling Update

Slide 17

Slide 17 text

Rolling Update

Slide 18

Slide 18 text

Rolling Update

Slide 19

Slide 19 text

Rolling Update

Slide 20

Slide 20 text

Job • 啟動 Pod 並且執⾏行行指定次數 • Pod 如果執⾏行行錯誤,會重新開啟直到完成

Slide 21

Slide 21 text

Service • ⽤用來來存取 Pod 的資源 • 可透過 Kubernetes 內部的 DNS 來來對應 • 各種 Service Type: • ClusterIP • NodePort • LoadBalancer

Slide 22

Slide 22 text

ClusterIP Service https://cdn-images-1.medium.com/max/1600/1*I4j4xaaxsuchdvO66V3lAg.png

Slide 23

Slide 23 text

NodePort Service https://cdn-images-1.medium.com/max/1600/1*CdyUtG-8CfGu2oFC5s0KwA.png

Slide 24

Slide 24 text

LoadBalancer Service https://cdn-images-1.medium.com/max/1600/1*P-10bQg_1VheU9DRlvHBTQ.png

Slide 25

Slide 25 text

Ingress • 類似 Virtual Host 的概念念 • 可以⽤用 URL 來來 proxy 到不同的 service https://cdn-images-1.medium.com/max/2000/1*KIVa4hUVZxg-8Ncabo8pdg.png

Slide 26

Slide 26 text

Label • Key-Value • 可以放在任何的資源設定中作為識別 • 可透過 Selector 查詢

Slide 27

Slide 27 text

Selector • ⽤用來來查詢 Labels • 透過 Selector 可以查詢到關聯聯的 Labels

Slide 28

Slide 28 text

https://www.metaltoad.com/sites/default/files/2018-01/Screen%20Shot%202018-01-19%20at%204.23.36%20PM.png

Slide 29

Slide 29 text

Volume • 在 Pod 啟動時⾃自動掛載(需要先定義) • 可以掛載 Host 的檔案或是⽬目錄 • 也能掛 ConfigMap/ Secret

Slide 30

Slide 30 text

ConfigMap • ⽤用來來放各種設定 • 可以 mount 到 container 中使⽤用 • Environment 設定可以放這

Slide 31

Slide 31 text

Secret • 基本上功能跟 ConfigMap ⼀一樣 • 不過有做 Base64 Encode • 適合放敏感性的資料

Slide 32

Slide 32 text

Let’s laravel it https://gitlab.com/kube-laravel/

Slide 33

Slide 33 text

Laravel requirements • Nginx/PHP-FPM • Database (MySQL) • Cache/Session store (Redis) • Storage (S3/GCS) • Log (ELK) • Exception handler (Sentry)

Slide 34

Slide 34 text

Q & A “