從Docker到k8s

Docker, 是一個管理虛擬化的工具,原理上是利用Linux 上的LXC和cgroup提供OS Level的虛擬化。Docker 提供直觀的CMD管理方式,可分佈的Image打包方案,腳本式配置,令Docker 成為現今最簡單,最有效的開發工具之一。

Docker為開發提供快速建立開發環境,在沒有docker 之前,一般開發環境需要配置半天到一天不等。在建立docker compose 檔案後,可以一建配置開發所需要的環境,如mysql, mongode, redis, activemq 等等。

雖然Docker可以滿足單機上的開發和部署需求,但在分佈式和集群部署上的管理並不方便,Kubernetes(K8s)因此誕生。

img

K8s是一系列的解決案,本是是Google 內部的部署安案(Borg)開源等來。K8s 主力解決管理大量機器需要的人手,時間和配置,以減輕維護所需成本。

K8s 主要由Pod,Service,Deployment,Node等組成而成。

Pod

Pod 最K8s中最少的組件相等放Docker中的Image/Instance。

Deployment

Deployment是配置一組Pod的詳細內容,比如Pod的數目,CPU和memory的分配,Pod expose的port, persistent volume 的掛載等等。

Service

而Service 是管理 Deployment中expose的port mapping,分別有ClusterIp NodePort, LoadBalancer 三種配置。

ClusterIp 是只分別 k8s 內部Ip,外部不能直接Access到Pod的Port,

NodePort是把每一個Node上指定的port 連接到Serivce 綁定的Pod配置的expose port上,但NodePort只可以用30000-32767段,適合用在內部網絡暴露port的需求。

最後LoadBalancer 一般用在AWS,GCP,Azure等Cloud service上,因為這個配置需要提供公開IP的地址,是用作整合Cloud provider的LoadBalancer功能。如果是自建K8s 可以用 Linux virtual ip 作Loadbalance NAT到NodePort上,從而達到相同功能。

Node

Node相常於K8s 群集上每一台機器的Instance,而Node有Master, Slaver之分。在K8s上Master Node只能配置單數數目,主要作用是調度K8s的任務和Pod分配等工能,Slaver Node主要是乘載Pod的容器。

Namespces

Ingress

Config

Secrets

Persistent Volume Claims

Stateful Sets

Jobs

Cron Jobs

Daemon Sets

RBAC

待續