自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kubernetes包管理神器Kustomize與Helm對(duì)比

云計(jì)算 云原生
Helm 將所有 K8s 對(duì)象封裝到一個(gè)包中,減少了與各個(gè)yaml 文件的交互。除此之外,大多數(shù)第三方供應(yīng)商還提供預(yù)構(gòu)建的 Helm 圖表,以簡(jiǎn)化將其產(chǎn)品部署到 K8s 中的過(guò)程。因此,Helm 通常是安裝現(xiàn)成解決方案(例如監(jiān)控、數(shù)據(jù)庫(kù)和消息中間件等)的首選。

K8s 是一個(gè)開源容器編排平臺(tái),可自動(dòng)執(zhí)行容器化應(yīng)用程序的部署、擴(kuò)展和管理。近年來(lái),K8s 已成為采用云原生架構(gòu)和容器化技術(shù)的組織的標(biāo)準(zhǔn)。

但是由于K8s的復(fù)雜性,因此誕生很多工具來(lái)簡(jiǎn)化使用的門檻。大多數(shù)公司使用的兩個(gè)工具是Kustomize (K8s 的配置管理器)和Helm (K8s 的包管理器)

在本文中,我們將討論 Helm 和 Kustomize、它們可以做什么、如何使用它們以及這些工具之間有什么區(qū)別。


Kustomize

Helm

操作方法

overlays

templating

使用成本

簡(jiǎn)單

復(fù)雜

是否支持封裝



原生 kubectl 集成



聲明式/ 命令式

聲明式

命令式

什么是Kustomize?

Kustomize 是 k8s集群的配置定制工具。它允許管理員使用非模板文件進(jìn)行聲明性更改,而不影響原始清單文件。

所有自定義規(guī)范都包含在 kustomization.yaml 文件中,該文件將規(guī)范疊加在現(xiàn)有清單之上以生成資源的自定義版本。

比如我們有一個(gè)應(yīng)用,需要在生產(chǎn)環(huán)境和測(cè)試環(huán)境部署,并且它的 yaml 配置大部分是相同的,只有少數(shù)的字段不同,那么這時(shí)候就可以用kustomize 來(lái)解決

Kustomize結(jié)構(gòu)

Kustomize 使用共享基礎(chǔ)資源和覆蓋來(lái)提供可重用性和配置生成。Kustomize 項(xiàng)目的典型目錄結(jié)構(gòu)如下所示:

圖片圖片

Kustomize 項(xiàng)目結(jié)構(gòu)通常包含基本目錄和覆蓋目錄。在上面結(jié)構(gòu)中,基本目錄包含一個(gè)名為kustomization.yaml的文件和共享資源的清單文件。

base/kustomization.yaml文件聲明文件,將包含在所有環(huán)境中

Overlays目錄也包含kustomization.yaml,此文件會(huì)引用base文件夾的yaml 文件并進(jìn)行自定義修改來(lái)構(gòu)建個(gè)性化資源。同時(shí)Overlays 目錄還包括單獨(dú)的yaml文件,Kustomize 使用這些文件來(lái)創(chuàng)建特定環(huán)境資源

自定義部署示例

下面通用示例演示如何使用 Kustomize 進(jìn)行最小 K8s 部署,將資源部署到開發(fā)和生產(chǎn)環(huán)境。

前置依賴

  • k8s 集群(1.14+)
  • Kubectl 客戶端

使用以下命令克隆示例 Git 存儲(chǔ)庫(kù)并將所需的清單下載到您的工作環(huán)境中:

git clone https://github.com/dongweizhao/kustomize-demo.git

圖片圖片

結(jié)構(gòu)如下

圖片圖片

此示例模擬在不同環(huán)境部署httpd 的dp和svc,其中dev會(huì)在名稱前增加dev-,prod 會(huì)在名稱前增加prod-,而 base會(huì)使用默認(rèn)名稱 httpd

  1. base
resources:
- deployment.yaml
- service.yaml
  1. prod
bases:
- ../../base
namePrefix: prod-
  1. dev
bases:
- ../../base
namePrefix: dev-

部署

cd base && kubectl apply -k .

執(zhí)行完成以后會(huì)輸出以下結(jié)果

圖片圖片

注意: kubectl 使用 -k 或 --kustomize 標(biāo)志來(lái)識(shí)別 Kustomize

和前面一樣,到“/overlays/dev”文件夾執(zhí)行部署,如下所示:

cd overlays/dev && kubectl apply -k .

輸出結(jié)果

圖片圖片

prod 部署

cd overlays/prod && kubectl apply -k .

輸出結(jié)果

圖片圖片

結(jié)果驗(yàn)證

kubectl get pods|grep http

圖片圖片

kubectl get svc|grep http

圖片圖片

根據(jù)以上結(jié)果,可以看到配置已經(jīng)生效

什么是Helm?

Helm 是一個(gè)能夠在 K8s 上打包、部署和管理應(yīng)用程序的工具,即使是最復(fù)雜的 K8s 應(yīng)用程序它都可以幫助定義,安裝和升級(jí),同時(shí)Helm 也是 CNCF 的畢業(yè)項(xiàng)目。

圖片圖片

以下Helm中的概念

Helm Charts:預(yù)先配置yaml的模板,在這里叫Chart,用于描述 K8s 應(yīng)用程序的yaml和配置

Helm Client:用于與 Helm 交互并管理這些Chart版本的命令行界面

Chart 倉(cāng)庫(kù):管理Chart的倉(cāng)庫(kù),跟Maven的Nexus一個(gè)意思,比如在公司環(huán)境構(gòu)建上傳,在客戶的機(jī)房連接到這Chart 倉(cāng)庫(kù)下載Chart,并部署到k8s中。

Helm 示例

前置依賴

  • k8s 集群
  • Kubectl 客戶端
  • helm客戶端

Helm Charts 是預(yù)先配置的 K8s 資源包。Helm Chart 包含部署特定應(yīng)用程序或服務(wù)所需的所有信息,包括 K8s 清單、環(huán)境變量和其他配置

目錄名稱是Chart的名稱,如Helm 文檔所示,我們通過(guò)helm create helm-demo命令創(chuàng)建一個(gè)Chart,執(zhí)行完以后,默認(rèn)會(huì)生成一個(gè) nginx 的Chart,如下圖

圖片圖片

Chart.yaml

定義了當(dāng)前 chart版本,以及描述當(dāng)前chart用途,其中 name 參數(shù)表示 chart 名稱,后期上傳下載都會(huì)用此名稱

apiVersion: v2
name: helm-demo
description: A Helm chart for K8s

# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.16.0"

values.yaml

可變參數(shù),都是在此文件中定義,在yaml模板中引用,比如:image.repository,而引用則通過(guò).Values+變量的名進(jìn)行引用,如下圖

圖片圖片

_helpers.tpl

定義通用代碼塊,然后yaml 文件會(huì)通過(guò) include 引用

定義

{{- define "helm-demo.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}

引用

{{ include "helm-demo.fullname" . }}

templates

此目錄主要存放的是要部署的 yaml文件模板,同時(shí)也包含_helpers.tpl文件,模板會(huì)引用values.yaml、Chart.yaml定義的參數(shù),以及_helpers.tpl定義的通用代碼塊

圖片圖片

部署

helm package helm-demo

圖片圖片

以下命令,通過(guò) set指定部署 2 個(gè)副本pod,此參數(shù)在 values.yaml 中有定義

helm install helm-demo helm-demo-0.1.0.tgz --set replicaCount=2

圖片圖片

結(jié)果驗(yàn)證

可以看到部署了 2 個(gè)副本

kubectl get pods|grep helm

圖片圖片

主要差異

操作方法

Kustomize 依賴特定于目錄的kustomization.yaml文件來(lái)構(gòu)建各個(gè)資源并對(duì)其進(jìn)行更改。這些文件將補(bǔ)丁和覆蓋應(yīng)用到共享基文件夾中聲明的資源,以提供自動(dòng)化的多環(huán)境配置。

Helm 通過(guò)引用value.yaml文件作為變量源,使用模板生成有效的 K8s 配置。模板目錄托管 Helm Chart在部署期間用于創(chuàng)建資源的文件。

便捷性

從K8s 版本 1.14 開始,Kustomize 與 kubectl CLI 捆綁在一起,因此不需要掌握任何其他工具。Kustomize 支持聲明式部署,并對(duì)每個(gè)文件使用純 YAML,從而更容易使用。

Helm 為K8s包管理任務(wù)添加了額外的抽象層,從而加快了希望簡(jiǎn)化集群配置和發(fā)布自動(dòng)化的團(tuán)隊(duì)的學(xué)習(xí)曲線。Helm Chart 相對(duì)Kustomize復(fù)雜,不過(guò)功能更加強(qiáng)大。

打包

Kustomize 缺乏的打包功能,并且每個(gè)資源都必須在基本文件夾中聲明,并在覆蓋kustomization.yaml文件中單獨(dú)聲明變體。

而Helm將所有必需的K8s資源都打包到一個(gè)文件夾中,該文件夾可以根據(jù)需要重復(fù)使用。Helm 還允許設(shè)置應(yīng)用程序默認(rèn)值,并且使用values.yaml文件修改參數(shù),從而注入引用的 yaml 文件中。

原生 kubectl 集成

從 K8s 1.14 版開始,Kustomize 就預(yù)裝了 kubectl,Helm 并未與 K8s 預(yù)先集成,因此必須手動(dòng)安裝 Helm。

Kustomize 與 Helm - 何時(shí)使用

何時(shí)使用 Kustomize

Kustomize允許在不改變?cè)嘉募那闆r下進(jìn)行精確更改。因此可以有以下場(chǎng)景

  • 應(yīng)用配置的變體管理:當(dāng)你需要管理多個(gè)環(huán)境(例如開發(fā)、測(cè)試、生產(chǎn))中應(yīng)用的變體時(shí),Kustomize 是一個(gè)很好的選擇。它允許你為不同的環(huán)境創(chuàng)建不同的配置,并使用一套基礎(chǔ)配置來(lái)定義通用部分。
  • 持續(xù)集成和持續(xù)部署(CI/CD)流水線:Kustomize 可以與 CI/CD 工具集成,幫助你實(shí)現(xiàn)自動(dòng)化部署。通過(guò)在流水線中使用 Kustomize,你可以根據(jù)需要生成特定環(huán)境的配置,并將其應(yīng)用到集群中。

何時(shí)使用 Helm

Helm 將所有 K8s 對(duì)象封裝到一個(gè)包中,減少了與各個(gè)yaml 文件的交互。除此之外,大多數(shù)第三方供應(yīng)商還提供預(yù)構(gòu)建的 Helm 圖表,以簡(jiǎn)化將其產(chǎn)品部署到 K8s 中的過(guò)程。因此,Helm 通常是安裝現(xiàn)成解決方案(例如監(jiān)控、數(shù)據(jù)庫(kù)和消息中間件等)的首選

責(zé)任編輯:武曉燕 來(lái)源: 架構(gòu)成長(zhǎng)指南
相關(guān)推薦

2020-11-05 11:00:21

KubernetesKustomize開源

2023-03-10 22:14:49

KustomizeKubernetes

2025-04-29 10:00:00

Kubernete云原生Helm

2024-07-08 08:11:15

2021-04-14 18:54:20

Kubernetes開發(fā)工具開發(fā)

2022-02-28 10:22:08

前端管理工具

2013-10-21 10:01:04

編碼工具擴(kuò)展

2022-02-21 09:58:31

包管理器npmyarn

2024-04-10 11:50:28

2021-06-24 08:25:38

flux2GitOps 云原生

2024-11-26 07:37:22

2019-03-29 09:00:31

Kubernetes開發(fā)者工具

2021-10-15 08:27:14

Kubernetes 工具Mizu

2020-08-16 08:34:15

Helm圖表Kubernetes Kubernetes

2024-11-15 08:30:23

2019-09-02 13:57:07

Helm Chart工具Kubernetes

2021-02-05 07:48:06

Linux操作系統(tǒng)軟件

2022-05-04 11:10:58

Linuxdnf 命令

2022-05-07 11:08:50

Linuxapt 命令

2021-11-11 09:01:01

Helm Chart Kubernetes
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)