如何直接在 Minikube 內構建容器映像檔

利用 Docker Machine 方式構建映像檔,加速開發不必費時 push & pull images

ta-ching chen

1 minute read

開發流程發生什麼問題

對於一般開發者來說要架設 Kubernetes 是件吃力不討好的事情,自從 minikube 推出後大幅減低進入門檻,讓任何人都可以輕易在電腦上執行本地端的 Kubernetes。minikube 原理是利用 Hyperviosr 在電腦上執行已經安裝好 Kubernetes 的虛擬機,再將 kubelet 的設定指向 minikube 內。

一般開發流程大概是:

  1. 修改程式
  2. 打包成映像檔,送到 remote registry
  3. 更新 pod spec
  4. docker daemon 從 registry 拉最新映像檔

push-pull-image-to-from-remote-registry

BASH 讀取傳入值的坑

那些年的心酸血淚

ta-ching chen

1 minute read

前言

進入正題前想到這則推特,真是心情寫照阿!

辛酸血淚

最近利用 bash 寫測試程式,需要將參數傳入 function 內

#!/bin/bash
test() {
    echo $1
}
test "foobar"

今天卻遇到個百思不得其解的問題,程式、參數大致看起來沒有問題

#!/bin/bash
test() {
    echo $1 $2 ... $9 $10
}
test "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

程式輸出卻變成

$ ./test.sh
a b ... i a0

透過 Multi-Stage Builds 改善持續交付流程

學習利用 Docker multi-stage builds

ta-ching chen

2 minute read

介紹

製作容器映像檔時有個常見的原則: 映像檔越小越好

但針對編譯式語言 (e.g. go, java),由於映像檔本身包含編譯環境、相依套件導致最終的映像檔十分肥大。在文章「打造最小 Go Docker Image」,我們必須先編譯好所需的 artifacts 再放進 scratch 裡面。可以想見對於一個建構持續交付的流水線 (Continuous Delivery Pipeline) 的開發人員而言,上述步驟會變得過於臃腫與繁雜。

為解決此問題在 Docker 17.05+ 以後提供名為「多階段構建 (multi-stage builds)」的新功能,透過將原先流水線中的多個映像檔整合進同個 Dockerfile 內,而後續的映像檔可透過指令取得中間映像檔 (intermediate image) 所產生的檔案 (artifacts),如此便能讓整個過程更為簡單,也確保流水線簡潔易懂及提高維護性。

Fission x Istio 迸出新滋味

Fission x Istio 整合教學

ta-ching chen

3 minute read

系列文章

前言

Fission 是基於 Kubernetes 之上的 Serverless 框架,而 Istio 是前陣子由 Google、IBM、Lyft 共同推出用來管理、連結微服務的開放平台,透過將兩者整合在一起便能夠提供使用者更多強大的功能。

這陣子花了些時間做實驗跟開發將 Fission 跟 Istio 做初步的整合。雖就目前的狀況來說還有許多地方尚待改進,但相信過陣子就能夠將兩者更好的結合在一起了。

若對 Fission 以及 Istio 整合有興趣的人,下面是完整的安裝教學。

安裝

測試環境

  • Google Kubernetes Engine: 1.9.2-gke.1 cluster
  • Fission: 0.6.0
  • Istio: 0.6.0

建立 Kubernetes v1.9+ alpha cluster

可用的區域 (ZONE) 可看這裡

$ export ZONE=<zone name>
$ gcloud container clusters create istio-demo-1 \
    --machine-type=n1-standard-2 \
    --num-nodes=1 \
    --no-enable-legacy-authorization \
    --zone=$ZONE \
    --cluster-version=1.9.2-gke.1