Kubernetes

心得分享&簡單介紹k8s

今天要來賣什麼?

Kubernetes

一直以來,工程師都有個疑問

在我的電腦上會動啊~

真奇怪

開發/維運

原因

  • 作業系統、環境
  • 依賴套件版本
  • 缺檔、config
  • blah blah...

青銅器時代

透過工具改善部署

  • SSH session
  • 利用工具協助系統升級

 

  • 回滾還是麻煩
  • 眾多服務還是很難管
  • 服務擴展

鐵器時代

容器技術

  • 程式與執行環境都在image裡
  • 方便散佈與部屬

虛擬化技術演進

VM

  • 軟體模擬硬體

 

  • 映像檔大
  • 難以擴散

虛擬化技術演進

Container

  • 作業系統虛擬化

 

  • 映像檔小
  • 易擴散
  • 啟動時間短

Container Image

  • 利用Dockerfile建立映像檔,納入版本控制
  • 執行環境一致性
  • Image不可變性

指令、細節就自己看&實作:P

Kubernetes

Kubernetes的主要用途

  • 微服務應用程式的 協調器

 

  • 全自動化的管理與調度容器

 

  • 全自動的配置容器要在叢集的哪個節點執行

 

  • 以抽象化的方式管理容器執行

Kubernetes的主要元件

Master

    - 叢集的大腦

    - 調度Pods

Minion(Nodes)

    - 管理容器執行

    - 指派要執行的Pods實體化

Kubernetes的主要元件

Kubernetes的主要元件

Kubernetes的主要物件

Pod

    - 最小的 Immutable deploy單位

    - Auto Scaling

    - 自動復原機制

Service

    - 透過定義Service來讓外部

      的使用者訪問Pod

    - 抽象化概念

Kubernetes的主要物件

Service Network

    - ClusterIP : pod-to-pod

    - NodePort

    - LoadBlancer

Kubernetes的主要物件

Volumn

    - 設定檔案存取的方式

    - 讓容器紀錄狀態以便重啟時回復

ConfigMap

    - 應用程式常用的參數設定

Secret

    - 應用程式需要安全保存的參數設定

 

Kubernetes的主要物件

水平擴展

Deployment

    - 回滾機制 (Rollback)

    - 官方推薦

 

 

Deamonset

    - 讓Pod自動跑在所有Nodes

Kubernetes的主要物件

HPA (Horizontal Pod Autoscaler)

    - 依據Pod負載去做Deployment伸縮擴展

    - Pod要做資源控管

Desired State

期望狀態

    - 透過建立k8s物件告知cluster如何運行

      藉此建立一種期望狀態

反向思考: 假設服務都會掛

當一個Service有3個pods

    - 叢集會盡力達到

    - 狀態會經常改變

掌控 Pod 生命週期

Init Container

    - 避免Service倒流量到不健康的Pod

    - 自動檢測與修復

 

掌控 Pod 生命週期

Job/Cronjob

    - 任務取向的服務

    - 定時執行檢測

 

Kubectl偵錯技巧

kubectl get [object]

    - get po

    - get svc

kubectl describe [object]

    - 從cluster角度看pod運作狀況

kubectl logs [object]

    - 看pod的console log

 

Kubernetes部署流程

打包建立Image

> 在本地docker測試運行

> 推到 Docker Registry保存

> 寫Docker File > 建立服務 > 監控服務

 

> 寫Deployment部署腳本

> 建立Deployment物件

> 監控服務

Kubernetes實作建議

GCP、GKE

    - $ $ $

minikube

    - 裝虛擬機>裝minikube

    - minikube start

自幹

    - 這裡有批機器好便宜阿!

 

Kubernetes實作建議

Pod

    - 建個pod先

Service

    - 用Service管理幾個Pods

 

Deployment

    - 官方建議不要裸佈Pod

 

Kubernetes實作建議

實際建立服務

    - Web

 

嘗試建立較困難服務

    - Redis

    - EFK

 

嘗試會讓系統當機的服務

    - 教訓>>>>教程

    - Be careful

Kubernetes實作建議

寫yaml檔

寫yaml檔

寫yaml檔

 

因為很重要所以要說三次

 

Kubernetes實作建議

邪門歪道

    - Deployment Builder

    - Kompose

Kubernetes實作建議

多想想你要的服務結構

    - 如何實作與撰寫yaml

 

 

Kubernetes學習資源

上課老師的部落格
    https://tachingchen.com/tw/blog/

上課的共用筆記

   https://hackmd.io/9pYIJhQoTJeaAw0qSUuxJA

Online k8s

    https://labs.play-with-k8s.com/

 

google

END

k8s

By 坊吉

k8s

  • 90