目次
3. Helm アプリケーション パッケージ マネージャーのデプロイメント
4. チャートを使用して Nginx アプリケーションをデプロイする
5. チャートを使用して Tomcat アプリケーションをデプロイする
前提条件の構成: 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