透過 Kubernetes Deployments 實現滾動升級

學習如何利用 Kubernetes Deployment 進行滾動升級

ta-ching chen

4 minute read

Deployment

在新版的 Kubernetes 官方推薦使用 Deployment 來取代 Replication Controller(rc),兩者間主要相同點包括確保處在服務狀態的 Pod 數量(replicas)能滿足先前所設定的值以及支援滾動升級(Rolling update),前者額外支援回滾(Roll back)的機制,因此接下來會介紹如何利用 Deployment 來進行滾動升級。

Kubernetes 分派 Pod 到指定節點

學習利用 Kubernetes nodeSelector 來限制 pod 的開啟節點

ta-ching chen

1 minute read

前言

目前 Kubernetes 支援 nodeSelectoraffinityanti-affinity 來限制每個 pod 能夠在哪些節點上開啟,本文會介紹如何利用 nodeSelector 來達到此功能

動手做

查詢現有標籤 (labels)

$ kubectl get nodes --show-labels
NAME            STATUS    AGE       LABELS
192.168.1.1    Ready     4d        beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.1
192.168.1.2    Ready     4d        beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.2
192.168.1.3    Ready     4d        beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.3

Kubernetes 最小部署單位 Pod

Kubernetes Pod 簡介與使用範例

ta-ching chen

2 minute read

Pod

在 Kubernetes 中最小的部署單位 Pod 係由一至多個容器所組成,而在一般應用層面上由於下述幾點原因,使其較接近於一般使用的 VM:

  • 共享同樣的 IP 位址及 Port space
  • 共享儲存空間 (volumes)
  • 耦合性較高之應用

共享同樣的 IP 位址及 Port space

相較於 Docker 中每個容器會擁有各自獨立的 IP,Kubernetes 則是每個在 Pod 內的容器會共享同樣的 IP address 以及 Port space。最直接的好處就是同個 Pod 內的容器可以透過 localhost 來互相溝通。這點和我們在使用一般虛擬機是相同的情況: one prcoess find others with localhost:port

由於擁有各自 IP 位址,因此每個位處於同樣 Kubernetes 集群內的 Pod 可以直接透過該 IP 和其他 Pod 進行聯繫,但一般而言我們會透過 service 來取代直接 Pod 存取,這其中表明一件很重要的事情: 在 Cloud 環境中有人做比起誰做來得重要。

打造高可用 Kubernetes 集群

學習如何在裸機上建立高可用 Kubernetes 集群

ta-ching chen

4 minute read

預先準備

  • 請參照先前的安裝教學確保沒有任何東西遺漏。

建立可靠的資訊儲存空間

Kubernetes 仰賴 etcd 來儲存整個集群的相關資訊,若要建立一個完整的 Kubernetes 集群,我們勢必要先從 etcd 集群開始著手來建立可靠的高可用的 key-value 儲存空間,而一旦 etcd 集群建立後,其內部機制回會自動把儲存的資料同步至其他的 etcd 節點。

停止 etcd 服務

service etcd stop

建立 etcd 集群

首先將 etcd 執行檔複製到各節點上並執行它們。

sudo /opt/bin/etcd --name <node name> -data-dir <path to etcd data dir> \
--initial-advertise-peer-urls http://<node ip>:4000 \
--listen-peer-urls http://<node ip>:4000 \
--listen-client-urls http://127.0.0.1:4001,http://<node ip>:4001 \
--advertise-client-urls http://<node ip>:4001 \
--initial-cluster-token etcd-cluster-1 \
--initial-cluster <node1 name>=http://<node1 ip>:4000,<node2 name>=http://<node2 ip>:4000,<node3 name>=http://<node3 ip>:4000 \
--initial-cluster-state new