歡迎光臨
每天分享高質量文章

Kaniko:無需高許可權即可在Kubernetes與Google Container Builder中構建容器映象

通常標準Dockerfile的生成需要與Docker後臺行程互動訪問,因此需要本機root許可權。在Docker後臺行程無法暴露的場景下(例如Kubernetes叢集,詳細內容可以參見這兒[1])生成容器映象就很困難。
Kaniko[2]就是為解決這類問題而生的,它是一個不許root特權就可以從Dockerfile中生成映象,並將映象推送到註冊庫的開源工具。因為Kaniko不需要特權,因此使用者可以在標準Kubernetes叢集、Google Kubernetes引擎、以及其它無法訪問Docker後臺行程環境中執行。

Kaniko工作原理

Kaniko執行時被當做自帶三個引數的容器,它們是:Dockerfile,建立背景關係和最終映象需要上傳入的註冊庫。映象是新建立的,只包含靜態Go庫和需要下拉上載映象的配置檔案。

Kaniko執行器獲取並展開基礎映象(在Dockerfile中FROM一行定義),按順序執行每條命令,每條命令執行完畢後為檔案系統做快照。快照是在使用者空間建立,並與記憶體中存在的上一個狀態進行對比,任何改變都會作為對基礎映象的修改,並以新層級對檔案系統進行增加擴充,並將任何修改都寫入映象的元資料中。當Dockerfile中每條命令都執行完畢後,執行器將新生成的映象上載入註冊庫中。
Kaniko解壓檔案系統,執行命令,在執行器映象的使用者空間中對檔案系統做快照,這都是為什麼Kaniko不需要特權訪問的原因,以上操作中沒有引入任何Docker後臺行程或者CLI操作。

在Kubernetes叢集中執行Kaniko

在標準Kubernetes叢集中執行Kaniko,Pod配置檔案需要做如下修改。本例中,Google Cloud Storage[3] bucket提供建立背景關係。
apiVersion: v1
kind: Pod
metadata:
name: kaniko
spec:
containers:
- name: kaniko
  image: gcr.io/kaniko-project/executor:latest
  args: ["--dockerfile=",
          "--bucket=",
          "--destination=]
  volumeMounts:
    - name: kaniko-secret
      mountPath: /secret
  env:
    - name: GOOGLE_APPLICATION_CREDENTIALS
      value: /secret/kaniko-secret.json
restartPolicy: Never
volumes:
  - name: kaniko-secret
    secret:
      secretName: kaniko-secret
本例中,需要掛載Kubernetes secret[4](其中包含了將映象上載入註冊庫中所需的授權),可以參見下載secret的方法[5]。

在Google Cloud Container Builder中執行Kaniko

執行Google Cloud Container Builder[6],可以在配置檔案中定義如下步驟:
steps:
- name: gcr.io/kaniko-project/executor:latest
  args: ["--dockerfile=",
         "--context=",
         "--destination="]
Kaniko執行器會根據步驟定義自動建立和上載映象。

與其它工具比較

與Kaniko類似的工具包括img[7]和orca-build[8]。這些工具都是從Dockerfile開始生成映象,但是採用不同方法和安全策略。在非特權環境下,img以非特權使用者身份在容器中生成映象,而Kaniko則是以root使用者身份在容器內生成映象。orca-build工具則是透過包裝runC,用核心空間技術執行RUN命令生成映象,kinako可以在容器內以root身份執行命令來實現同樣的功能。

結論

在我們的GitHub庫[9]中可以找到很多相關檔案,如果發現發現bug可以開問題記錄。並可以在Google group[10]中找到我們。
相關連結:
  1. https://github.com/kubernetes/kubernetes/issues/1806

  2. https://github.com/GoogleCloudPlatform/kaniko

  3. https://cloud.google.com/storage/

  4. https://kubernetes.io/docs/concepts/configuration/secret/

  5. https://github.com/GoogleCloudPlatform/kaniko

  6. https://cloud.google.com/container-builder/docs/

  7. https://github.com/genuinetools/img

  8. https://github.com/cyphar/orca-build

  9. https://github.com/GoogleCloudPlatform/kaniko

  10. https://groups.google.com/forum/#!forum/kaniko-users

原文連結:https://cloudplatform.googleblog.com/2018/04/introducing-kaniko-Build-container-images-in-Kubernetes-and-Google-Container-Builder-even-without-root-access.html
Kubernetes入門與進階實戰培訓

本次培訓內容包括:Docker基礎、容器技術、Docker映象、資料共享與持久化、Docker三駕馬車、Docker實踐、Kubernetes基礎、Pod基礎與進階、常用物件操作、服務發現、Helm、Kubernetes核心元件原理分析、Kubernetes服務質量保證、排程詳解與應用場景、網路、基於Kubernetes的CI/CD、基於Kubernetes的配置管理等,點選瞭解具體培訓內容

5月11日正式上課,點選閱讀原文連結即可報名。
贊(0)

分享創造快樂