From NodeJs, Scala to Go
說明後端開發語言轉換至 Golang 原因
演講投影片
- 2017 iTHome GopherDay
說明後端開發語言轉換至 Golang 原因
學習如何手動移除 GKE 指定節點
在 GKE 上運作的 Kubernetes 叢集支援多個 node pool,每個 pool 可以根據需求調配不同的機器規格、自動擴展等設定,但當我們從網頁設定縮小 node pool 時,GKE 會隨機選擇 pool 中的機器來移除。有時我們會希望移除指定的機器,因此下面會介紹該如何手動移除特定節點。
找出想要移除的節點,比方說 gke-dummy-server-default-pool-16ce3e71-9192
$ kubectl get node
NAME STATUS AGE VERSION
gke-dummy-server-default-pool-16ce3e71-9192 Ready 15h v1.6.7
gke-dummy-server-default-pool-16ce3e71-s8w0 Ready 4d v1.6.7
透過 kubectl drain
指令,將原本部署在該節點的 Pod 移到其他節點上。
$ kubectl drain <node> --force --ignore-daemonsets
並且執行後可以看到將該節點狀態變成 Ready,SchedulingDisabled
。
$ kubectl get node
NAME STATUS AGE VERSION
gke-dummy-server-default-pool-16ce3e71-9192 Ready,SchedulingDisabled 15h v1.6.7
gke-dummy-server-default-pool-16ce3e71-s8w0 Ready 4d v1.6.7
不同情境下 Redis 資料持久化設定建議
大型網站、平台往往需要透過緩存來儲存靜態、異動量較少的資料,減緩後端伺服器的負載,而目前 Redis 與 Memcached 兩套皆是非常流行的儲存資料庫。以下會介紹在 Redis 的資料持久化 (data persistence) 該如何設定才足以應付日常營運需求 (內文主要針對需要注意的設定進行講解,完整 Redis 設定請見官方設定)。
Redis 是「緩存」而非永久儲存用的資料庫
偶爾聽到有人會將資料定期倒入 Redis 存放,但資料持久化的功能應當視為在出現異常時,服務能在短時間回復的最後手段。「緩存」裡面資料最終都要能夠透過任何方式還原,才是較為正確的做法。
Redis 目前擁有兩種資料持久化的格式: RDB、AOF
設定的格式為 save <seconds> <changes>
,意思是當過 X 秒後且有 Y 個鍵值改變即備份資料。
# Default Setting
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
討論 Kubernetes Service 存取路徑差異、注意要點
前篇文章介紹 Service 在 Kubernetes 裡的基礎概念及應用,但 Service 透過不同路徑存取 Pod 間的差異在哪裡,以及服務營運上的細節、注意事項 ,接下來在本篇文章中將為各位逐一說明。
前篇文章內有提到,有兩種角色會透過 Service 存取其他的 Pod,分別是 Kubernetes 集群外部使用者以及集群內部其他 Pod。儘管兩種路徑的結果都相同,但之間仍存在一個關鍵差異在於: 存取 IP 不同
。
實際上在 Kubernetes 內共有三種 IP 存在
介紹如何透過 Kubeadm 在短時間內安裝 Kubernetes
古早時期安裝完整 Kubernetes 的步驟十分繁複,Kubernetes 1.4 之後推出 kubeadm
讓整個安裝過程能在幾分鐘內完成,以下將介紹使用 kubeadm 安裝 Kubernetes 的過程。
#!/bin/bash
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
# Install docker if you don't have it already.
apt-get install -y docker.io
apt-get install -y kubelet kubeadm kubectl kubernetes-cni