概要: ヘルム

1. はじめに

Helm は k8s 用のパッケージ管理ツールで、Linux システムで一般的に使用される apt、yum およびその他のパッケージ管理ツールに似ており、go 言語に基づいて開発されています。Helm を使用すると、k8s アプリケーションのデプロイメントを簡素化できます

2. 基本的な考え方

Helm の基本概念

  • チャート: アプリケーションの実行に必要なイメージ、依存関係、およびリソース定義を含む Helm パッケージ。また、Homebrew の式、APT の dpkg、または Yum の rpm ファイルに似た、Kubernetes クラスター内のサービス定義も含まれる場合があります。
  • リリース: Kubernetes クラスター上で実行される Chart のインスタンス。同じクラスター上に、Chart は何度でもインストールできます。インストールするたびに新しいリリースが作成されます。たとえば、MySQL チャートの場合、サーバー上で 2 つのデータベースを実行する場合は、チャートを 2 回インストールできます。各インストールでは、独自のリリース名を持つ独自のリリースが生成されます。
  • リポジトリ: チャートを公開および保存するためのリポジトリ。

3. 構造

チャートのインストールプロセス:

  1. Helm は、指定されたディレクトリまたは tgz ファイルからチャート構造情報を解析します。
  2. Helm は、指定された Chart 構造と Values 情報を gRPC 経由で Tiller に渡します
  3. Tiller はチャートと値に基づいてリリースを生成します
  4. Tiller は、実行のためにリリースを Kubernetes に送信します。


チャート更新プロセス:

  1. Helm は、指定されたディレクトリまたは tgz ファイルからチャート構造情報を解析します。
  2. Helm は、更新するリリースの名前、チャート構造、および値の情報を Tiller に渡します。
  3. Tiller はリリースを生成し、指定された名前でリリースの履歴を更新します
  4. Tiller は実行のために Release を Kubernetes に送信します

4. ヘルムをインストールする

Helm は主に Helm クライアントと Tiller サーバーの 2 つの部分で構成されており、Tiller は k8s クラスターにデプロイされます。

ps: Alibaba Cloud Container Service の kubernetes バージョンを使用する場合、helm サーバー (Tiller) はデフォルトでインストールされているため、helm クライアントをインストールするだけで済みます。

独自の環境に応じて、github アドレスから対応するインストール パッケージをダウンロードできます。

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

ダウンロード後、任意のディレクトリに解凍し、対応する PATH 環境変数を設定します。

デフォルトでは、helm は k8s クラスターを操作します。これには、kubectl コマンドのクラスター構成が必要です。ここで kubectl コマンドの構成を参照できます - ( k8s アプリケーション構成の詳細)。もちろん、--kubeconfig パラメーターを直接指定して、 Helm コマンドを使用して、k8s クラスター証明書のパスを指定します。

#これは、--kubeconfig パラメーターで k8s 証明書を指定して k8s クラスターを操作することです
#次のコマンドは、app-demo という名前のアプリケーションをデプロイすることです。helm パッケージは ./chart ディレクトリ/ 
alidata/server/helmにあります-v2.13.1/ helm --kubeconfig ./config/k8s.conf install app-demo ./chart

サーバーをインストールします。

helm init コマンドを使用して、ワンクリックでインストールします。

ps: チャート ウェアハウス (リポジトリ) については、helm コマンド helmserve でウェアハウス サービスを開始できますが、通常は各プロジェクトの独自のチャート パッケージがソース コードとともに git ウェアハウスに送信されるため、チャート ウェアハウスはここにあります必要ありません。

5、helm共通コマンド

Helm バージョン: Helm バージョンを表示する

Helm リポジトリの追加: チャート ウェアハウスを追加

  • Helm リポジトリに bitnami を追加 https://charts.bitnami.com/bitnami

Helm リポジトリ リスト: 追加されたウェアハウスをリストします。

Helm リポジトリ更新 bitnami: チャート ウェアハウスからローカルで利用可能なチャート情報を更新します

Helm リポジトリの更新: 参照リソースを更新します

helm list: 現在インストールされているチャートをリストします。

  • 例: helm list -n iks-ns-hubble-mimir

Helm install: チャートを Kubernetes にアップロード

  • 例: helm -n iks-ns-hubble-mimir install mimir4 ./ -f ./small-s3.yaml

Helm 検索リポジトリ Grafana: 検索チャート

Helm fetch grafana/mimir-distributed: チャートをローカルにダウンロード

 ダウンロードされたファイルは tgz ファイルなので、解凍する必要があります。

  • Gunzip mimir-distributed-4.3.0.tgz
  • tar -xvf mimir-distributed-4.3.0.tar

 ディレクトリを入力してください:

ここでのvalues.yamlはカスタマイズおよび変更でき、再インストール時にリポジトリの代わりにローカルチャートを使用するように指定できます。

ローカル チャート ディレクトリ: /data/weiwei/helm-ww/helm-mimir/mimir-distributed/mimir-distributed

6. 基本的な使い方

ここでは、helm の基本的な使い方を紹介するために、簡単な Web サイト アプリケーション チャート パッケージを作成する例を示します。

ps: docker イメージを作成するプロセスはここでは省略します。イメージの作成については、「Docker Basic Tutorial」を参照してください。

5.1. チャートパッケージの作成

例: helm create コマンドを使用して新しいチャート パッケージを作成する

helm create myapp: 現在のディレクトリに myapp チャート パッケージを作成します

作成が完了すると、取得されたディレクトリ構造は次のようになります。

myapp                                   - chart 包目录名
├── charts                              - 依赖的子包目录,里面可以包含多个依赖的chart包
├── Chart.yaml                          - chart定义,可以定义chart的名字,版本号信息。
├── templates                           - k8s配置模版目录, 我们编写的k8s配置都在这个目录, 除了NOTES.txt和下划线开头命名的文件,其他文件可以随意命名。
│   ├── deployment.yaml
│   ├── _helpers.tpl                    - 下划线开头的文件,helm视为公共库定义文件,主要用于定义通用的子模版、函数等,helm不会将这些公共库文件的渲染结果提交给k8s处理。
│   ├── ingress.yaml
│   ├── NOTES.txt                       - chart包的帮助信息文件,执行helm install命令安装成功后会输出这个文件的内容。
│   └── service.yaml
└── values.yaml                         - chart包的参数配置文件,模版可以引用这里参数。

mimir-distributed ディレクトリ内のファイルを比較できます。

k8s に Web サイト アプリケーションをデプロイするには、 deployment、service、および ingressの 3 つの構成ファイルを記述する必要があります。これらは、helm create コマンドによって作成されました。

5.2. k8s アプリケーションデプロイメント設定ファイルの書き込み

チャート パッケージ テンプレートの使用法を示すために、最初に3 つの構成ファイルdeployment、service、および ingressの内容をクリアし、k8s デプロイメント ファイルを書き換えます。

deployment.yaml 構成ファイルは次のように定義されます。

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: myapp           #deployment应用名
  labels:
    app: myapp          #deployment应用标签定义
spec:
  replicas: 1           #pod副本数
  selector:
    matchLabels:
      app: myapp          #pod选择器标签
  template:
    metadata:
      labels:
        app: myapp          #pod标签定义
    spec:
      containers:
        - name: myapp           #容器名
          image: xxxxxx:1.7.9    #镜像地址
          ports:
            - name: http
              containerPort: 80
              protocol: TCP

service.yaml は次のように定義されます。

apiVersion: v1
kind: Service
metadata:
  name: myapp-svc #服务名
spec:
  selector: #pod选择器定义
    app: myapp
  ports:
  - protocol: TCP 
    port: 80
    targetPort: 80

ingress.yaml は次のように定義されます。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress #ingress应用名
spec:
  rules:
    - host: www.xxxxx.com  #域名
      http:
        paths: 
          - path: /  
            backend: 
              serviceName: myapp-svc #服务名
              servicePort: 80

5.3. k8s アプリケーション展開設定ファイル内のパラメーターをチャート パッケージ パラメーターとして抽出します。

以上でk8sアプリケーションのデプロイ設定ファイルの準備は完了です。

上記の設定ファイル内のパラメータをチャート パッケージのパラメータとして抽出する必要があるのはなぜですか?

次の質問について考えてみましょう。

チャート パッケージを作成した後、そのチャート パッケージの汎用性が高い場合、ドメイン名をどのように変更すればよいでしょうか? ミラーアドレスを変更しますか? アプリケーションのデプロイメントの名前を変更しますか? 複数の環境をデプロイします (例: 開発環境とテスト環境は異なるアプリケーション名でデプロイされます)

5.2 で定義された k8s 設定ファイルはテンプレートと呼ぶことができず、すべて固定設定です。(ここで言うテンプレートとは、フロントエンド開発をする際に皆さんが普段使っているテンプレート技術に近いものです。概念です)

構成内のパラメーターを抽出しテンプレート変数を挿入し、テンプレート式によって構成ファイルをテンプレート ファイルに変換し、helm は実行時にパラメーターに従ってテンプレート ファイルを最終構成ファイルに動的にレンダリングします。

次に、デプロイメント、サービス、イングレスの3 つの構成ファイルをテンプレート ファイルに変換します。

ps: { { }} 2 つの中括弧で囲まれた内容はテンプレート式であり、具体的な意味は後で説明しますので、ここでは無視してください。

deployment.yaml 構成テンプレートは次のとおりです。

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: {
   
   { .Release.Name }}  #deployment应用名
  labels:
    app: {
   
   { .Release.Name }}          #deployment应用标签定义
spec:
  replicas: {
   
   { .Values.replicas}}           #pod副本数
  selector:
    matchLabels:
      app: {
   
   { .Release.Name }}          #pod选择器标签
  template:
    metadata:
      labels:
        app: {
   
   { .Release.Name }}          #pod标签定义
    spec:
      containers:
        - name: {
   
   { .Release.Name }}           #容器名
          image: {
   
   { .Values.image }}:{
   
   { .Values.imageTag }}    #镜像地址
          ports:
            - name: http
              containerPort: 80
              protocol: TCP

service.yaml は次のように定義されます。

apiVersion: v1
kind: Service
metadata:
  name: {
   
   { .Release.Name }}-svc #服务名
spec:
  selector: #pod选择器定义
    app: {
   
   { .Release.Name }}
  ports:
  - protocol: TCP 
    port: 80
    targetPort: 80

ingress.yaml は次のように定義されます。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {
   
   { .Release.Name }}-ingress #ingress应用名
spec:
  rules:
    - host: {
   
   { .Values.host }}  #域名
      http:
        paths: 
          - path: /  
            backend: 
              serviceName: {
   
   { .Release.Name }}-svc #服务名
              servicePort: 80

Values.yaml チャート パッケージ パラメーターの定義:

#域名
host: www.XXX.com
 
#镜像参数
image: XXXXXXXXXXXXXXXXXX
imageTag: 1.7.9
 
#pod 副本数
replicas:1

5.4. Helm コマンドを使用したアプリケーションのインストール/更新

アプリをインストールします。

#コマンド形式: Helm インストール チャート パッケージ ディレクトリ

$ helm install ./myapp

コマンド経由でパラメータを挿入する

#コマンド形式: helm install --set key=value chart package directory 

#–set パラメーターは複数のパラメーターを指定でき、その値は、values.yaml で定義された値をオーバーライドし、オブジェクト タイプ データを使用できます。 (ドット) 属性名を区切る、例: --set apiAppResources.requests.cpu=1
$ helm install --set replicas=2 --set host=www.xxxx.com ./myapp

アプリを更新します:

コマンド形式: Helm upgrade release name chart package directory

$ helm upgrade myapp ./myapp

--set パラメータを指定することもできます

$ helm upgrade --setplicas=2 --set host=www.xxxx.com myapp ./myapp

デフォルトでは、リリース名が存在しない場合、アップグレードは失敗します。リリースが存在しない場合は -i パラメータを追加してインストールし、存在する場合は更新できます。install コマンドと uprade コマンドを組み合わせます。

$ helm upgrade -i --setplicas=2 --set host=www.xxxx.com myapp ./myapp


ソース:

[クラウド ネイティブ] Helm 共通コマンド (チャートのインストール、アップグレード、ロールバック、アンインストールなど)

https://www.cnblogs.com/lyc94620/p/10945430.html

Helm の導入と使用_helm 開発ツール_Wang Xiaodong 857 のブログ-CSDN ブログ

おすすめ

転載: blog.csdn.net/w2009211777/article/details/130262940