兜
-
ヘルムとは
-
ヘルムのインストール
-
重要な概念
-
ヘルムの使用
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 の各リリースでは、さまざまなオペレーティング システム用のバイナリ バージョンが提供されており、手動でダウンロードしてインストールできます。
-
必要なバージョンをダウンロードする
-
解凍(
tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
) -
解凍したディレクトリでプログラムを見つけて
helm
、必要なディレクトリに移動します (mv linux-amd64/helm /usr/local/bin/helm
) -
リポジトリの追加: Helm リポジトリの追加 bitnami https://charts.bitnami.com/bitnami
-
インストールを確認します:
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 hub
Artifact HubからHelm チャートを検索してリストします。Artifact Hub にはさまざまなリポジトリが保存されています。 -
helm search repo
helm 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