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

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)

分享創造快樂