【クラウドネイティブ】kubernetesアプリケーションパッケージ管理ツールHelm

 

 

  • ヘルムとは

  • ヘルムのインストール

  • 重要な概念

  • ヘルムの使用

1 はじめに

公式サイトアドレス:ヘルム

Helm は、Kubernetes アプリケーションを簡単に管理およびデプロイできるようにする Kubernetes アプリケーション パッケージ管理ツールです。Helm は、Chart と呼ばれる事前定義されたテンプレートを使用して、Kubernetes アプリケーションのデプロイと管理を簡素化します。チャートには、デプロイメント、サービス、ConfigMap、シークレットなど、アプリケーションの完全なデプロイメントとリソース要件を記述することができる一連の Kubernetes オブジェクト定義が含まれています。Helm を使用すると、Kubernetes アプリケーションを簡単にインストール、アップグレード、アンインストール、ロールバックできます。

同時に、Helm は、アプリケーションのデプロイメントをより適切に管理するのに役立つ、依存関係管理、グローバル変数、条件付きレンダリングなどの便利な機能も提供します。Helm には、Helm クライアント (helm) と Helm サーバー (Tiller) という 2 つの主要コンポーネントがあります。Helm クライアントはローカルで実行できますが、Tiller は Kubernetes クラスター内で実行され、Chart を Kubernetes オブジェクトに変換する役割を果たします。

2 インストール

ダウンロード アドレス:リリース · helm/helm · GitHub

Helm の各リリースでは、さまざまなオペレーティング システム用のバイナリ バージョンが提供されており、手動でダウンロードしてインストールできます。

  1. 必要なバージョンをダウンロードする

  2. 解凍( tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)

  3. 解凍したディレクトリでプログラムを見つけてhelm、必要なディレクトリに移動します ( mv linux-amd64/helm /usr/local/bin/helm)

  4. リポジトリの追加: Helm リポジトリの追加 bitnami https://charts.bitnami.com/bitnami

  5. インストールを確認します: helm help

3つの重要な概念

  • チャートはHelm パッケージを表します。これには、Kubernetes クラスター内でアプリケーション、ツール、またはサービスを実行するために必要なすべてのリソース定義が含まれています。これは、Homebrew 式、Apt dpkg、または Yum RPM に相当する Kubernetes と考えることができます。

  • リポジトリは、チャートを保存および共有するために使用される場所です。これは、Kubernetes パッケージ用であることを除けば、Perl のCPAN リポジトリ ネットワークや Fedora のパッケージ リポジトリに似ています。

  • Release は、Kubernetes クラスター内で実行されるチャートのインスタンスです。通常、チャートは同じクラスターに複数回インストールできます。インストールするたびに新しいリリースが作成されます。MySQL チャートを例にとると、クラスター内で 2 つのデータベースを実行する場合は、チャートを 2 回インストールできます。各データベースには独自のリリースリリース名があります

4 使用

4.1 チャートの検索

Helm には、2 つのソースからの検索に使用できる強力な検索コマンドが付属しています。

  • helm search hubArtifact HubからHelm チャートを検索してリストします。Artifact Hub にはさまざまなリポジトリが保存されています。

  • helm search repohelm repo addローカル Helm クライアントに追加した (使用した) リポジトリから検索します。このコマンドはローカル データに基づいて検索するため、インターネット接続は必要ありません。

4.2 インストール

helm installコマンドを使用して、新しい Helm パッケージをインストールします。最も簡単な使用方法では、指定したリリース名とインストールするチャートの名前という 2 つのパラメーターを渡すだけです。

[root@k8s-node1 ~]# helm install nginx bitnami/nginx
NAME: nginx
LAST DEPLOYED: Wed Apr  5 07:18:04 2023
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 13.2.34
APP VERSION: 1.23.4
​
** Please be patient while the chart is being deployed **
NGINX can be accessed through the following DNS name from within your cluster:
​
    nginx.kube-system.svc.cluster.local (port 80)
​
To access NGINX from outside the cluster, follow the steps below:
​
1. Get the NGINX URL by running these commands:
​
  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace kube-system -w nginx'
​
    export SERVICE_PORT=$(kubectl get --namespace kube-system -o jsonpath="{.spec.ports[0].port}" services nginx)
    export SERVICE_IP=$(kubectl get svc --namespace kube-system nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://${SERVICE_IP}:${SERVICE_PORT}"

注:チャートのインストール時に、新しいリリースオブジェクトが作成されます。上記のリリースの名前は ですnginx(Helm に名前を生成させたい場合は、パブリッシュ名を削除して を使用します--generate-name。)

Helm のインストール シーケンス: Helm | Helm の使用


4.3 リストを見る

helm list次のコマンドを使用して、現在デプロイされているすべてのリリースを確認できます。

[root@k8s-node1 ~]# helm list
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
nginx   kube-system     1               2023-04-05 07:34:48.421708425 -0400 EDT deployed        nginx-13.2.34   1.23.4 

4.3 ステータスの表示

helm statusリリース ステータスを追跡したり、構成情報を再読み取りしたりするために使用できます。

[root@k8s-node1 ~]# helm status nginx
NAME: nginx
LAST DEPLOYED: Wed Apr  5 07:18:04 2023
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 13.2.34
APP VERSION: 1.23.4
​
** Please be patient while the chart is being deployed **
NGINX can be accessed through the following DNS name from within your cluster:
​
    nginx.kube-system.svc.cluster.local (port 80)
​
To access NGINX from outside the cluster, follow the steps below:
​
1. Get the NGINX URL by running these commands:
​
  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace kube-system -w nginx'
​
    export SERVICE_PORT=$(kubectl get --namespace kube-system -o jsonpath="{.spec.ports[0].port}" services nginx)
    export SERVICE_IP=$(kubectl get svc --namespace kube-system nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://${SERVICE_IP}:${SERVICE_PORT}"

4.4 アンインストール

[root@k8s-node1 ~]# helm uninstall nginx
release "nginx" uninstalled

5 カスタムチャートをインストールする

上記のインストール方法では、チャートのデフォルト構成オプションのみが使用されます。多くの場合、必要な構成を指定するためにチャートをカスタマイズする必要があります。

5.1 カスタマイズされたチャートを取得する

[root@k8s-node1 ~]# helm アプリを作成

注意: 当前目录中会出现一个 nginx-xxx.tgz 文件 这个文件就是 charts 的包。

5.2 チャートのディレクトリ構造の表示

app/
  Chart.yaml
  values.yaml
  charts/
  templates/
  ...
  • templates/ディレクトリにはテンプレート ファイルが含まれています。Helm がチャートを評価すると、すべてのファイルがtemplates/テンプレート レンダリング エンジン経由でディレクトリに送信されます。次に、テンプレートの結果が収集され、Kubernetes に送信されます。

  • values.yamlファイルはテンプレートにもインポートされます。このファイルには、チャートのデフォルト値が含まれています。これらの値は、ユーザーがhelm installまたはを実行するとhelm upgrade上書きされます。

  • Chart.yamlファイルにはチャートの説明が含まれています。テンプレートからアクセスできます。charts/ディレクトリには、他のチャート (サブチャートと呼ばれます)を含めることができます。

5.3 カスタムテンプレート

$ rm -rf mychart/templates/*
  • namespace.yaml を書き込む

apiVersion: v1
kind: Namespace
metadata:
  name: {
   
   { .Chart.Name }}
  namespace: {
   
   { .Values.namespace }}
  • デプロイメント.yml を作成する

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {
   
   { .Chart.Name}}
  namespace: {
   
   {.Values.namespace}}
  labels:
    app: {
   
   { .Chart.Name}}
spec:
  replicas: {
   
   { .Values.replicas }}
  template:
    metadata:
      name: {
   
   { .Chart.Name}}
      labels:
        app: {
   
   { .Chart.Name}}
    spec:
      containers:
        - name: {
   
   { .Chart.Name}}
          image: {
   
   { .Values.image}}
          imagePullPolicy: {
   
   {.Values.imagePullPolicy}}
          ports:
            - containerPort: {
   
   {.Values.containerPort}}
      restartPolicy: {
   
   { .Values.restartPolicy }}
  selector:
    matchLabels:
      app: {
   
   { .Chart.Name}}
  • service.yml を書く

apiVersion: v1
kind: Service
metadata:
  name: {
   
   {.Chart.Name}}
  namespace: {
   
   {.Values.namespace}}
spec:
  selector:
    app: {
   
   {.Chart.Name}}
  ports:
    - port: {
   
   {.Values.service.port}}
      targetPort: {
   
   {.Values.containerPort}}
  type: {
   
   { .Values.service.type }}
  • Chart.ymlを書く

apiVersion: v2
name: app
description: A Helm chart for Kubernetes
# 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"
  • value.yaml を書き込む

replicas: 1
namespace: app
image: nginx:1.19
imagePullPolicy: IfNotPresent
restartPolicy: Always
containerPort: 80
​
service:
  port: 80
  type: ClusterIP

5.4 エラーがないか確認する

$ helm lint アプリ

5.5 カスタムチャートのパッケージ化

$ helm パッケージ アプリ

5.6 インストールチャート

$ helm インストール アプリ myapp-1.tgz

おすすめ

転載: blog.csdn.net/weixin_53678904/article/details/132375509