CNTUG Meetup #21
Talk 1: k3sup 之極度快速 Set up k3s cluster(番外篇:Kubernetes帶我飛之歷程分享) by Samina Fu
投影片link
What's K3s?
Twitter 上的 Kelsey Hightower:"I like the way @rancher_labs has taken a fresh look at Kubernetes by removing, not adding, features to focus on running in low-resource computing environments such a retail stores and telco facilities. https://t.co/wAih5qq8Mi" / Twitter
- 號稱 Lightweight Kubernetes
- 設計用於 production workloads
- 在低硬體資源的系統可能可以跑起來
- system requirement
K3s 架構
- Server
- cluster status can be saved in SQLite, instead of etcd
- daemon on host
- Agent
特點:
- 多個功能整合為一個 process
- Tunnel proxy
- k3s 不可被刪除的 endpoint,用於 server 跟 agent 間溝通的 tunnel
Q/A: Can SQLite be HA?
=> https://github.com/rancher/k3s/issues/42
Setup a K3s cluster way
Install
Dependency: Docker
安裝:K3s Lab
Notice:
- Don't use K3s v0.9.0 in ARM platform ,裝了會掛掉
- K3s agent installation, you should export token at first
Uninstall
How does k3s be weight-less?
-
Removing old and non-essential code
- Dropping alpha APIs(刪掉一百萬行的 code)
- 移除非預設的 admission controllers、in-tree cloud providers 跟 storage drivers,需要的話自己裝(移除超過一百萬行的代碼)
-
減少主記憶體的使用
-
使用 containerd 取代 Docker
- Docker內建太多不必要的功能所以不預設使用 Docker
-
Removing extra features
-
移除額外依賴軟體
-
減少執行時期需要的binary
-
etcd 儲存資料於 /var/lib/etcd 底下
-
k3s SQLite 放於 /var/lib/rancher/k3s/server/db 下
-
journal -u k3s.service: --etcd-servers=unix://kine.sock
、--storage-backend=etcd3
Tunnel Proxy and Service LB
- 2 Load Balancers
- Service Load Balancer
- expose k8s services
- traefik used
- K8s endpoint(Cannot be disabled)
- tcpproxy, provide connectivity for HA scenarios
- Reverse tunnel connection: for master node's api-servers <-> agent nodes' kubelet & containerd
Q: pod on overlay network, what is the difference with flannel?
A:
k3sup (read 'ketchup')
- Light-weight tool to get k3s up without KUBECONFIG
- Need: ssh access, k3sup binary, kubectl
https://github.com/sufuf3/k3sup-lab
- Prepare k3sup host: 1 node
- k3s cluster: N nodes
- make sure k3sup host can use SSH public-key authentication to n-nodes cluster
ARM device 使用 k3s 的經驗
- CPU: 4x Arm Cortex-A53 @1.5 Ghz
- Memroy: 4GB
- Architecture: ARMv8 (AArch64)
- 2 VM nodes
要注意的地方:
總結
- Will be ideal for accelerating solution in edge cases
Q: 如果有很多Edges要建立多個Clusters嗎?
A:
Talk 2: Kafka on Kubernetes
distributed 要注意的事情
- 資料有時序性
- 大量寫入/讀取
- 快速寫入/讀取
- 宣稱 latency 較低
Concepts
- 用 topics 作為分類保存多個 records 串流
- record = (key, value, timestamp)
KAFKA DIAGRAM
- 有複數個 worker 在工作
- producer製造訊息給Kafka
- consumer消化訊息,去 Kafka 拿
- 用 Connecter 存取 DB
- Stream processors
TOPIC PARTITIONS
- 多個有時序性的佇列
- 以 topic 分隔複寫寫入多個 partition
- 資料寫入時會有時間差
- 耐用性
- consumer理論上可自至少一 partition 拿到資料
- 資料拿出來的時候是按照Kafka裡的順序
DISTRIBUTED DATA STREAMING
- 帶寬可以 scale
- 可承受一定程度的故障
- Data consistency
- Availability
- Partition Tolerance
CONSUMER GROUP(跳過)
Deployment
Helm Kafka
HELM CHART VALUES
裝之前要確認參數
- 強烈建議設定 limit
- Notices:
- jvm heap option
- pidAntiAffinity
- 提供 Prometheus exporter,方便即時監控 Kafka 運行狀況
- Zookeeper:保存 topic config
KUBERNETES CONFIGURATION
KAFKA CONFIGURATIONS
- zookeeper
- configurationOverrides
default.replication.factor
(預設1無冗餘保存資料)
監控設定
在了解配置後才佈署 Kafka
PODS
kubectl get po | grep kafka
AVAILABILITY / 可用性
ex. replication factor = 3
- 3 partition 各一保存於 kafka-broker
- 1 master(r/w) 2 slaves (r)
- sync: master -> slave, more slaves more effort
- in-synced slave: Just keep part of slaves for sychronizing, if new slave want to sync, just connect those in-sync slaves.
- not enough in-sync slaves: master might die.
ON SLAVE FAILURE
- client 不受影響
- master 補齊足夠的 in-sync slaves
- wait dead slave to back online
ON Master Failure
- slave 於 in-sync slaves 中選舉出新的 master
- new master sync to slaves (因為in-sync資料跟得很緊)
- 新的 master 服務客戶端
- 會先確保sync的資料是正確的並且完成,死掉的 master 重新上線會變為 slave 節點
CONFIGS AVAILABILITY / 配置的可用性
- 保存於外部(Zookeeper)的Metadata:
- topic configs
- partition configs
- consumer offsets
重點
- helm chart values 的設定設錯就幹掉重來
- 要跑得好必須研究Kafka 的概念與設定
- resource & JVM heap size
- Prometheus is must-have, export JVM heap status
Markdown 語法說明