[クラウド ネイティブ、k8s] Helm アプリケーション パッケージ マネージャーの概要

目次

1. なぜ Helm が必要なのでしょうか?

(1) Helm の概要

(2) Helm には 3 つの重要な概念があります。

(3) ヘルムの特徴

2. Helm V3 の変更点

(1) アーキテクチャの変更

(2) ネームスペースを自動作成する

3. Helm アプリケーション パッケージ マネージャーのデプロイメント

1. Helm クライアント ツールをデプロイする

2. Helm でよく使用されるコマンド

3.国内チャートウェアハウスの設定

4. チャートを使用して Nginx アプリケーションをデプロイする

5. チャートを使用して Tomcat アプリケーションをデプロイする

6. 変数を使用してテンプレートをレンダリングする


前提条件の構成: k8s ベース (kubernetes 数周)

 

1. なぜ Helm が必要なのでしょうか?

        Kubernetes にデプロイされたアプリケーション サービスは、デプロイメント、サービスなどを含む特定のリソースの説明で構成されます。各リソース オブジェクトは、独自のファイルに保存されるか、構成ファイルにまとめて書き込まれます。次に、kubectl apply –f Demon.yaml コマンドを使用してデプロイします。

 

ビジネス システムが 1 つまたは複数のサービスのみで構成されている場合は、上記の展開管理方法で十分です。

        複雑なビジネス システムの場合、上記と同様のリソース記述ファイルが多数存在します。たとえば、マイクロサービス アーキテクチャ アプリケーションには、アプリケーションを構成するサービスが 10 から数十も含まれる場合があります。アプリケーションを更新またはロールバックする必要がある場合、関連する多数のリソース オブジェクト ファイルを変更および維持する必要がある場合があり、アプリケーションを編成および管理するこの方法では不十分になります。

        さらに、公開されたアプリケーションのバージョンの管理と制御が欠如しているため、Kubernetes でのアプリケーションのメンテナンスと更新は多くの課題に直面しており、主に次の問題に直面しています。

これらのサービス全体をどのように管理するか

これらのリソース ファイルを効率的に再利用する方法

アプリケーションレベルのバージョン管理はサポートされていません

(1) Helm の概要

        Helm は Kubernetes パッケージ管理ツールで、yum/apt-get などの Linux のパッケージ マネージャーと同様に、Helm は以前にパッケージ化された yaml ファイルを kubernetes に簡単にデプロイできます。

(2) Helm には 3 つの重要な概念があります。

helm:主に Kubernetes アプリケーション チャートの作成、パッケージ化、公開、管理に使用されるコマンド ライン クライアント ツール。

チャート:アプリケーションの記述に使用されるディレクトリまたは圧縮パッケージ。k8s リソース オブジェクトの記述に使用される一連のファイルで構成されます。

リリース:チャートベースのデプロイメント エンティティ チャートが Helm によって実行されると、対応するリリースが生成され、実際に実行中のリソース オブジェクトが k8s に作成されます。

(3) ヘルムの特徴

        kubernetes 用に開発されたパッケージ マネージャー。各パッケージは Chart と呼ばれ、Chart はディレクトリです (通常、ディレクトリはパッケージ化され、簡単に送信できるように名前-バージョン.tar.gz 形式の 1 つのファイルに圧縮されます。およびストレージ)

        アプリケーション発行者は、Helm を使用してアプリケーションのパッケージ化、アプリケーションの依存関係の管理、アプリケーションのバージョンの管理、およびソフトウェア ウェアハウスへのアプリケーションの公開を行うことができます。

        Helm を使用すると、ユーザーは Kubernetes の Yaml 構文を理解してアプリケーション デプロイメント ファイルを作成する必要がなくなり、Helm を通じて必要なアプリケーションを Kubernetes にダウンロードしてインストールできるようになります。

Helm は、Kubernetes 上のアプリケーションのソフトウェアのデプロイ、削除、アップグレード、ロールバックのための強力な機能を提供します

2. Helm V3 の変更点

2019 年 11 月 13 日、Helm チームは Helm v3 の最初の安定バージョンをリリースしました。このバージョンの主な変更点は次のとおりです。

(1) アーキテクチャの変更

最も明らかな変更は Tiller の削除です。

 

1) リリース名は異なる名前空間で再利用可能

2) Chart を Docker ミラーウェアハウス Harbor にプッシュするサポート

3) JSONSchema を使用してグラフの値を検証する

4) その他

Helm CLI の個々の名前が変更され、他のパッケージ マネージャーと文言をより適切に調整できるようになりました。

helm delete の名前が `helm uninstall に変更されました

「helm Inspection」は「helm show」に名前変更されました

「helm fetch」は「helm pull」に名前変更されました

ただし、上記の古いコマンドは引き続き使用できます。

チャート リポジトリをローカルに一時的に構築するために使用される helmserve コマンドは削除されました。

(2) ネームスペースを自動作成する

        Helm 2 は、存在しない名前空間にディストリビューションを作成するときに名前空間を作成しました。Helm 3 は他の Kubernetes オブジェクトの動作に従い、名前空間が存在しない場合はエラーを返します。

requirements.yaml は不要になり、依存関係は chart.yaml で直接定義されます。

3. Helm アプリケーション パッケージ マネージャーのデプロイメント

1. Helm クライアント ツールをデプロイする

Helm クライアントのダウンロード アドレス: Releases · helm/helm · GitHub

ソース コード パッケージを解凍し、/usr/bin/ ディレクトリに移動します。

[root@k8s-master ~]# wget https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz

[root@k8s-master ~]# tar xf helm-v3.5.2-linux-amd64.tar.gz

[root@k8s-master ~]# cd linux-amd64/

[root@k8s-master linux-amd64]# ls

[root@k8s-master linux-amd64]# mv helm /usr/bin/

[root@k8s-master ~]# helm #helm コマンドが利用可能かどうかを確認する

 

2. Helm でよく使用されるコマンド

注文

説明する

作成する

グラフを作成して名前を指定する

依存

チャートの依存関係を管理する

得る

リリースをダウンロードします。利用可能なサブコマンド: all、hook、manifest、notes、values

歴史

リリース履歴を取得する

インストール

チャートをインストールする

リスト

リリースのリスト

パッケージ

チャート ディレクトリをチャート アーカイブ ファイルにパックする

引く

リモート リポジトリからチャートをダウンロードし、ローカルに抽出します# helm pullsteady/mysql --untar

リポジトリ

チャート リポジトリの追加、一覧表示、削除、更新、インデックス付けを行います。利用可能なサブコマンド: add、index、list、remove、update

ロールバック

以前のバージョンからのロールバック

検索

キーワードに基づいてグラフを検索します。利用可能なサブコマンド: Hub、repo

見せる

チャートの詳細を表示します。利用可能なサブコマンド: all、chart、readme、values

状態

名前付きバージョンのステータスを表示する

テンプレート

ローカルレンダリングテンプレート

アンインストール

リリースをアンインストールする

アップグレード

リリースを更新する

バージョン

Helm クライアントのバージョンを確認する

3.国内チャートウェアハウスの設定

Microsoft ウェアハウス ( Index of /kubernetes/charts/ ) を強くお勧めします。基本的に、公式 Web サイト上のすべてのチャートはここで入手できます。

Alibaba Cloud Warehouse ( https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )

公式ウェアハウス ( Kubeapps | Home ) 公式チャートウェアハウスは中国では少し使いにくいです。

チャートリポジトリの追加

[root@k8s-master ~]# Helm リポジトリは安定した http://mirror.azure.cn/kubernetes/charts を追加します

[root@k8s-master ~]# helm リポジトリ追加 aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

[root@k8s-master ~]# helm リポジトリ更新

構成されたグラフ リポジトリを表示する

[root@k8s-master ~]# Helm リポジトリ リスト

 

リポジトリを削除します。

[root@k8s-master ~]# helm リポジトリを削除して aliyun

[root@k8s-master ~]# Helm リポジトリ リスト

 

4. チャートを使用して Nginx アプリケーションをデプロイする

1)チャートを作成する

[root@k8s-master ~]# helm create nginx

 

[root@k8s-master ~]# ツリー nginx/

詳細な説明:

nginx/

§── charts #他のパッケージの charts ファイルに依存します

§── Chart.yaml # IP アドレス、バージョン情報などを含むチャートの説明ファイル。

§── templates # k8s テンプレートファイルを格納するディレクトリ

│ §──deployment.yaml #k8s デプロイメントリソースの yaml テンプレートを作成する

│ §── _helpers.tpl #アンダースコアで始まるファイルは他のテンプレートから参照可能

│ §── hpa.yaml #サービスリソースの設定 CPUメモリ

│ §── ingress.yaml # サービスドメイン名にアクセスするための Ingress 設定

│ §──NOTES.txt #Description ファイル、helm インストール後にユーザーに表示される内容

│ §── serviceaccount.yaml

│ §── service.yaml #kubernetes サービス yaml テンプレート

│ └── テスト

│ └── test-connection.yaml

━──values.yaml #テンプレートファイルに使用する変数

 

2) values.yaml のサービス タイプを NodePort に変更します。

[root@k8s-master ~]# cd nginx/

[root@k8s-master nginx]# vim value.yaml

 

3)チャート タスクをインストールします (コマンドの最後のドットに注意してください)

[root@k8s-master nginx]# helm install -f value.yaml

4)リリースを見る

[root@k8s-master nginx]# helm ls #または helm list

 

5)リリースの削除

[root@k8s-master nginx]# helm delete nginx

6)ポッドのステータスを確認する

[root@k8s-master nginx]# kubectl ポッドを取得

[root@k8s-master nginx]# kubectl get pod -o Wide

7) SVC ステータスを確認する

[root@k8s-master nginx]# kubectl get svc

 

192.168.100.132:30281 にアクセスしてください

5. チャートを使用して Tomcat アプリケーションをデプロイする

[root@k8s-master ~]# helm create tomcat

Tomcatの作成

[root@k8s-master ~]# cd tomcat/

deployment.yamlファイルとservice.yamlファイルを変更する

[root@k8s-master tomcat]# vim templates/deployment.yaml

[root@k8s-master tomcat]# vim templates/service.yaml

 

リリースの作成

[root@k8s-master tomcat]# helm install tomcat 。

 

リリースを見る

[root@k8s-master tomcat]# helm ls

 

ポッドと SVC を表示する

[root@k8s-master tomcat]# kubectl get pod

[root@k8s-master tomcat]# kubectl get pod -o wide

[root@k8s-master tomcat]# kubectl get svc

 

テストページを用意する

[root@k8s-master tomcat]# kubectl exec -it tomcat-67df6cd4d6-s7qxl /bin/bash

root@tomcat-67df6cd4d6-s7qxl:/usr/local/tomcat# mkdir webapps/ROOT

root@tomcat-67df6cd4d6-s7qxl:/usr/local/tomcat# echo "helm test1" > webapps/ROOT/index.jsp

[root@k8s-master tomcat]# kubectl exec -it tomcat-67df6cd4d6-tkp95 /bin/bash

root@tomcat-67df6cd4d6-tkp95:/usr/local/tomcat# mkdir webapps/ROOT

root@tomcat-67df6cd4d6-tkp95:/usr/local/tomcat# echo "helm test2" > webapps/ROOT/index.jsp

 

アクセステスト:

192.168.100.132:32092 にアクセスしてください

192.168.100.133:32092 にアクセスしてください

 

消去

[root@k8s-master tomcat]# helm delete tomcat

[root@k8s-master tomcat]# helm ls

 

アップグレード(yamlファイル変更後に再適用)

[root@k8s-master tomcat]# helm install tomcat 。

[root@k8s-master tomcat]# helm ls

[root@k8s-master tomcat]# kubectl get pod

 

[root@k8s-master tomcat]# vim templates/deployment.yaml

 

[root@k8s-master tomcat]# helm upgrade tomcat 。

[root@k8s-master tomcat]# kubectl get pod

[root@k8s-master tomcat]# helm ls

 

ロールバック

[root@k8s-master tomcat]# helm rollback tomcat 1

[root@k8s-master tomcat]# helm ls

[root@k8s-master tomcat]# kubectl get pod

 

6. 変数を使用してテンプレートをレンダリングする

テンプレートが正常かどうかをテストする

[root@k8s-master tomcat]# helm install --dry-run tomcat 。

 

value.yaml ファイルで変数を定義する

[root@k8s-master tomcat]# cat value.yaml

 

[root@k8s-master tomcat]# cat templates/deployment.yaml

[root@k8s-master tomcat]# cat templates/service.yaml

 

deployment.yaml ファイルservice.yamlファイル内の変数は、事前に定義され、values.yaml で参照される値です。

Release.Name は、helm インストール後の名前を表します。

[root@k8s-master tomcat]# helm delete tomcat

テンプレート ディレクトリ内の冗長なファイルをすべて削除し、2 つのテスト ファイルのみを残します。

[root@k8s-master tomcat]# ls テンプレート/

[root@k8s-master tomcat]# helm install -f value.yaml

[root@k8s-master tomcat]# helm ls

 

公開ステータスの表示

[root@k8s-master tomcat]# Helm status tomcat

[root@k8s-master tomcat]# kubectl get pod

 

ポッドの詳細を表示する

[root@k8s-master tomcat]# kubectl 説明ポッド tomcat-dp-67df6cd4d6-78pxc

 

おすすめ

転載: blog.csdn.net/2302_77582029/article/details/132360012