ヘルムチャートを作る0スタート|練習するエントリからヘルム

ファイル


ヘルムはヘルムが成熟マークされ、V2からV3に移行するユーザーを導く、今週の公式ブログを発表しました。:早ければ今年の6月として、アリ雲が正式に国内初のヘルムハブ中国ミラーステーションリリース-クラウドネイティブアプリのハブオープンクラウドネイティブアプリケーションセンターを


成長と降水量の3ヵ月後、ヘルムハブ中国のミラーサイトになりました、リアルタイムのすべてのコンテンツヘルムハブの全額の同期だけでなく、今日のようなGitLabや他の一般的なサードパーティのチャートのレポとして同期の選択は、ライン上の合計を持っています859のチャート、絶えず増加しています。


ファイル


奨励し、普及ヘルムチャート国内の使用を、クラウド時代に最大のエネルギーを再生するには、そのソフトウェアを作るために、波のクラウドネイティブのより良い手段に独自のアプリケーションをパッケージ化して配布するために、クラウドネイティブな方法を通じて、国内の開発者を支援するために、アリクラウドクラウドはヘルムチャートは、陪審のチョイス賞を獲得、42日後、33のヘルムチャートの最終的な選択をチョイス賞を獲得、初のネイティブアプリケーション開発コンテストを開催しました。すべての提出チャートは、裁判官の厳格なテストと評価を通過します。
image.gif

審査員ズチョイス賞

✅  受賞者:etcd-管理
✅のGitHubのIDを:shiguanghuxianは

管理-Go]をetcdすると、ローカルのファイルを管理するように簡単として(アリの雲の背景に類似)使いやすいインターフェイス、鍵管理と、etcd管理ツールを書かれた作品です。著作権管理は、読み取り専用および読み書き権限の間の単純な区別をサポートしています。

✅審査員のコメント

ファイル

etcd-管理の素敵なビジュアルインターフェイスを提供する単純なetcd管理ツール、オリジナリティあるコミュニティクラウドのオリジナルのコンセプトに近い、実用的な、良いです。
一方、両方のオプションを依存するデータベースが自動インストールを提供するために場所でもやるし、外部データベースをインポートするために、ユーザの経験に見ることができ、文書はまた、より包括的な書きました。

選択肢賞

ビューと実用的な観点の技術的な観点から、いくつかの判断を総合的に勘案した後、33点の作品が最終の収穫がある「最も人気のある賞は。」
ファイル
9月2日の10:00などのデータ

出場者の言葉

✅受賞者:Redisのオペレータ
のGitHub IDの✅:SataQiu

ネイティブクラウドは将来のです!このコンテストクラウドネイティブアプリケーションに参加するのは非常に満足して、裁判官の忍耐の指導のおかげで、私は雲の深いネイティブの理解を得たが、また、同様の競技や活動を整理するために願って、私が参加するのは非常に幸せです!

✅受賞者:ETCD-管理
✅GitHubののID:shiguanghuxian
のAppハブ中国駅に期待して、限られた言語能力はK8Sようなサービス、便利なアプリケーションのリリースと多くの企業や開発者のためのミドルウェアサービスの展開機能を提供展開と発展パターンのヘルム人気の見通しは確かに非常に良いだろう。

独自のアプリケーションのバージョン2.0を取得するための最初のエントリの残業、目標は、誰もがパッケージ化されたアプリケーションを学ぶために兜を知っていたことはありませんユーティリティを作ることで、他はヘルムのいくつかの手段を開発することを望んで、将来はいくつかのアプリケーションを開発する、多くのことを学びました便利なアプリケーション・デプロイメント・ツール。
✅受賞者:NVIDIA-GPU-輸出
のGitHubの✅ID:wikiios
のAppハブはより実用的ヘルムは、クラウドネイティブアプリケーションは、非常に魅力的な傾向である必要があります!
✅受賞者:ヒューゴ
のGitHubの✅ID:sunny0826

このコンテストクラウドにネイティブアプリケーションに参加するには、興味深いチャートをたくさん見つけ、他の出場者との交流を強化するために多くのことを得ながら自分のスキルを表示するには、通常のマスターヘルムを作るだけではなく、恩恵を受けました。App Hubはyumの便利CentOSの上でインストールを使用してのようにすることができK8Sクラウドクラスターの展開ネイティブアプリケーションに近い将来に開発を続けて願っています!

......
image.gif

独自のヘルムチャートを作成する方法


我々は通常、多くの場合、そのような言葉、フォトショップのPC側で淘宝網、高地ドイツ語、アリペイと他のアプリケーションでAppleのApp Storeからダウンロードやインストールなどのアプリケーションの様々な異なるプラットフォーム上で日常生活の中で対処します、スチーム。様々なプラットフォーム上でこれらのアプリケーションは、ユーザーのために、それらのほとんどはインストールのみを使用することができますクリックする必要があります。


しかし、クラウド(Kubernetes)で、アプリケーションの展開は、多くの場合、それほど単純ではありません。あなたはクラウドにアプリケーションをデプロイする場合は、最初にそれがドッカーがミラーにパッケージ化、必要な環境を準備する必要があります。そして、ファイル(展開)にイメージを展開、アカウントのアプリケーションに必要なサービス(サービス)、(ServiceAccount)と権限(役割)を設定、名前空間(名前空間)、キー情報(シークレット)、耐久性に優れたストレージ( PersistentVolumes)およびその他のリソース。互いに関連YAML設定ファイルのシリーズを準備している、彼らはKubernetesのクラスタにデプロイされます。


しかし、アプリケーション開発者が公共の倉庫に保存されているこれらのドッカーの画像を入れて、ユーザーに必要なリソースのYAMLファイルを展開することができた場合でも、ユーザーはこれらのファイルを検索し、展開する一つずつを置くために独自のリソースを必要とします。ユーザーは、このような複数のコピー(レプリカ)を使用するなど、開発者が提供するデフォルトのリソースを、変更またはサービスポート(ポート)を変更したい場合、彼はそれをチェックする必要がある自分は、これらのリソースファイル、しないように言及したバージョンの変更領域を変更する必要があります開発者とユーザーが原因となりますどのくらいのトラブルやメンテナンス。見て最も原始的なKubernetes申請書は便利ではありません。

ヘルム与ヘルムチャート


この環境では、判明アプリケーションベースKubernetesパッケージ管理ツールのシリーズがあります。最も人気のある選択肢の一つであり、今日のヒーローヘルム、。


ファイル


アプリケーションリソースファイルに必要なフォーマットに従ってヘルムチャートの開発者は、いくつかの変数フィールド(私たちは前に述べたどのポートに、このような露出などは、どのように多くのコピー)をユーザーに公開(テンプレート化)道のテンプレートで締めくくります最後に、パッケージ化されたアプリケーションパッケージ、それは、統一されたリポジトリにダウンロードブラウズするユーザーのためのヘルムチャート、中央リポジトリです。


ユーザーの観点からは、ユーザーがアプリケーションのインストール、アンインストールを完了し、アップグレードするだけの簡単なコマンドラインを必要とします。インストール後の状態について、またできる  helm list 照会またはネイティブkubectlします。

$ helm install redis stable/redis
$ kubectl get pods
NAME                  READY       STATUS     RESTARTS           AGE
redis-master-0        1/1         Running    0                  63s
redis-slave-0-0       1/1         Running    0                  63s
redis-slave-1-0       1/1         Running    0                  13s
$ helm delete redis

クリエイティブヘルムチャート


だから、開発者の視点に立って、私たちは、ヘルムのアプリケーションパッケージを作成する方法をすべきですか?

準備


まず、私たちは鏡の展開のために準備する必要があります。この画像は、Javaプログラム、Pythonスクリプト、あるいは空のLinuxのミラーは、いくつかのコマンドを実行することができます。


ファイル


ここでは、golangの簡単な基礎を使用しています。環境変数を読み込むことにより、サービス  USERNAME 利用者によって定義された名前を取得して、ポート80をリッスンするように。任意のHTTPリクエストとリターンのために  Hello ${USERNAME}たとえば、あなたが設定されている場合  USERNAME=world(デフォルトのシーン)を、サービスが返されます  Hello world


その後、我々はパッケージ化するために、ミラーを使用しています。まずGolangコードがミラーの容積を減少させるために、その後、高山ミラーに基づいてコンパイルされたプログラムをコンパイルされます。


ファイル


ドッカーが良いイメージを構築した後、我々は、ドッカーハブまたはミラーアリクラウドコンテナ倉庫として、倉庫に画像をアップロードします。準備作業が完了した後、我々はヘルムチャートの作成を開始することができます。

彼が書き始めました


実行して  helm create my-hello-world、自動的に生成された空白のチャートヘルムを取得します。名前のチャートmy-hello-worldそれは私の-こんにちは世界のニーズの内側に、チャートを指摘し、フォルダに同じ名前のチャートの名前を生成する必要があります。あなたは私の-ハローワールドを変更する場合は、同じ変更を行う必要があります。 次のように今、私たちは、チャートフォルダのディレクトリを参照してください。

my-hello-world
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   └── service.yaml
└── values.yaml


ルートディレクトリにChart.yamlファイルでは、ユーザーが閲覧して検索するために、この情報はチャートの後に倉庫に置かれるなど、現在のチャートの名前、バージョン、についての基本的な情報を宣言します。例えば、我々は説明グラフ「私の最初のHello Worldヘルム・チャート」に入れることができます 。そこバージョンのアプリケーションパッケージの私達のバージョンであるチャートのバージョンであることを示す関連分野のChart.yamlでの2つのバージョンが、今ある;とのappversionは、アプリケーションのバージョンが実際に内部に使用されている指定しました。


テンプレートフォルダ内と、そのような展開とサービスとしてのアプリケーション展開の様々なタイプを、使用するために必要なYAMLファイルを保存します。私たちの現在のアプリケーションでは、私たちは、展開を必要とし、いくつかのアプリケーションは、その後、我々はフォルダ内deploymentA、deploymentBや他のテンプレートを置くことができ、複数の展開を必要とする、さまざまな成分を含んでいてもよいです。我々はなどserviceaccount、秘密、ボリュームを設定する必要がある場合は同様に、あなたはまた、内部の適切な設定ファイルを追加することができます。

apiVersion: apps/v1beta2
kind: Deployment
metadata:
 name: {{ template "my-hello-world.fullname" . }}
 labels:
{{ include "my-hello-world.labels" . | indent 4 }}
spec:
 replicas: {{ .Values.replicaCount }}
 selector:
   matchLabels:
     app.kubernetes.io/name: {{ include "my-hello-world.name" . }}
     app.kubernetes.io/instance: {{ .Release.Name }}
 template:
   metadata:
     labels:
       app.kubernetes.io/name: {{ include "my-hello-world.name" . }}
       app.kubernetes.io/instance: {{ .Release.Name }}
   spec:
     containers:
       - name: {{ .Chart.Name }}
         image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
         imagePullPolicy: {{ .Values.image.pullPolicy }}
         env:
           - name: USERNAME
             value: {{ .Values.Username }}
......


ヘルムチャートは、パッケージ・アプリケーションのために、展開やサービスだけでなく、他のリソースを統合するだけではなく。私たちは、より多くのは、注射フィールドをレンダリングするために使用することができ、deployment.yamlとservice.yamlファイルがKubernetesネイティブな構成と比較して、テンプレート/フォルダに配置されている参照してください。例えば、のdeployment.yamlでspec.replicas いることを用いて、  .Values.replicaCount 代わりに静的な値自体をKubernetes。このアプリケーションは、フィールドのコピーを実行する必要があり、あなたは別のアプリケーション・デプロイメント環境で異なる値を持つことができ、この値はにより注入されKubernetesの数を制御するために使用される  Values のオファー。

replicaCount: 1
image:
 repository: somefive/hello-world
 pullPolicy: IfNotPresent
nameOverride: ""
fullnameOverride: ""
service:
 type: ClusterIP
 port: 80
......
Username: AppHub


ルートディレクトリには、私たちが見る  values.yaml デフォルトのパラメータは、インストール時に適用されていたファイルを。デフォルトでは  Values 、我々が見る  replicaCount: 1 デフォルトの展開状況によってアプリケーションのコピーを1つだけ注意してください。


私たちのアプリケーションを展開するためにミラーを使用するために、我々は中にdeployment.yaml参照  spec.template.spec.containers 年、image および  imagePullPolicy 使用している  Values 値を。


前記  image フィールドは、で構成さ  .Values.image.repository と  .Chart.AppVersion からなります。生徒たちは、フィールドを変更する必要があることを知っている必要があり、ここを参照してください:1はvalues.yaml内に配置されている  image.repository他はChart.yamlに位置しています  AppVersion私たちは、アプリケーションのドッキングウィンドウ、ミラーマッチアップを展開する私たちとそれらを必要とします。ここでは、中values.yaml  image.repository するセット  somefive/hello-worldにChart.yamlを入れて  AppVersionセット  1.0.0 することができます。


同様に、我々はまた、主要な構成でvalues.yamlサービスを展開したいservice.yaml以内に見ることができます。サービスは、内部Kubernetesクラスタにさらされ、デフォルトのポート80で生成されます。我々は、変更するこの部分は必要ありません。


こんにちは、世界のサービス展開が環境変数から読み込まれますので  USERNAME 、環境変数、我々は、この構成deployment.yamlに参加します。

- name: {{ .Chart.Name }}
  image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
  imagePullPolicy: {{ .Values.image.pullPolicy }}
  env:
  - name: USERNAME
    value: {{ .Values.Username }}


今私達のdeployment.yamlテンプレートがvalues.yamlからロードされた  Username フィールドなので、適切な、我々はまた、中values.yamlを追加します  Username: AppHub今、私たちのアプリケーションが起動さミラーリング環境変数に入れてvalues.yamlからユーザー名を読み込みます。

パッケージをチェックしてください


私たちのアプリケーションを準備した後、私たちは何の文法エラーの何でもありませんチャートのラフなチェックを行うためにヘルムの糸くずを使用することができます。問題がなければ、我々は我々のフォルダのコマンドヘルムパッケージを使用することができ、我々は私の-ハロー世界-0.1.0.tgzアプリケーションパッケージを取得することができます梱包後、パッケージグラフ。これは、我々がやったアプリケーションです。

$ helm lint --strict my-hello-world
1 chart(s) linted, 0 chart(s) failed
    [INFO] Chart.yaml: icon is recommended
$ helm package my-hello-world


我々は使用することができ  helm install 、それはちょうど良い業務アプリケーションパッケージを行い、その後、kubectlポッドで実行状態を見てインストールしようとするコマンドを。私たちは、この時間は、我々はローカルホストのアップを訪問してデプロイされたアプリケーションにアクセスすることができます、port-forwardコマンドによって、ローカルポートにポートマッピングをポッドすることができます。

$ helm install my-hello-world-chart-test my-hello-world-0.1.0.tgz
$ kubectl get pods
NAME                                          READY    STATUS     RESTARTS    AGE
my-hello-world-chart-test-65d6c7b4b6-ptk4x-0  1/1      Running    0           4m3s
$ kubectl port-forward my-hello-world-chart-test-65d6c7b4b6-ptk4x 8080:80
$ curl localhost:8080
Hello AppHub

引数のオーバーロード


一部の学生は不思議に思われるかもしれ、中values.yamlの露出を設定可能にする情報我々のアプリケーション開発者は、どのようにあなたがそれを使用してユーザアプリケーションを変更したいんが?答えは簡単で、ユーザーが唯一のインストール時にカバーしたいパラメータを設定するためのパラメータを設定する必要があります。


ただ、デフォルトのインストールパラメータを提供してチャートの設定値でのアプリケーション開発者は、ユーザーは、インストール時に独自の構成を指定することができます。同様に、ユーザーがデプロイされたアプリケーションの元の構成の変化を達成するためにアップグレードコマンドをインストールする代替手段を使用することができます。

$ helm install my-app my-hello-world-0.1.0.tgz --set Username="Cloud Native"
$ helm install my-super-app my-hello-world-0.1.0.tgz -f my-values.yaml
$ helm upgrade my-super-app my-hello-world-0.1.0.tgz -f my-new-values.yaml

メッセージを変更します


私たちは、チャートのコマンド操作をインストールした後、出力画面が表示されますのでご注意します:

NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods -l "app=my-hello-world,release=my-hello-world-chart-test2" -o jsonpath="{.items[0].metadata.name}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl port-forward $POD_NAME 8080:80


ここでのチャートによるコメントである  templates/NOTES.txt オファーが。私たちは、元NOTESで、書かれたことに注意して  "app={{ template "my-hello-world.name" . }},release={{ .Release.Name }}" 設定し、私たちのdeployment.yamlで書かれて同じではありません。我々はそれを変更することができ"app.kubernetes.io/name={{ template "my-hello-world.name" . }},app.kubernetes.io/instance={{ .Release.Name }}"、されvalues.yamlうversion に更新します  0.1.1そして、チャート(実行を再パッケージ化  helm package)。新しい私-ハロー世界-0.1.1.tgzを取得した後、既存のチャート(実行をアップグレードする  helm upgrade my-hello-world-chart-test2 my-hello-world-0.1.1.tgz --set Username="New Chart")、あなたは後NOTESの更新を見ることができます。

NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods -l "app.kubernetes.io/name=my-hello-world,app.kubernetes.io/instance=my-hello-world-chart-test2" -o jsonpath="{.items[0].metadata.name}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl port-forward $POD_NAME 8080:80

アプリケーション共有


ファイル


それでは、どのアプリケーションを完了し、他の人がそれを共有するには?ChartMuseumのヘルム公式発表では、独自のチャート・ウェアハウスを作成することが可能なチャート・ウェアハウスを構築するための方法を提供します。しかし、自己維持自体で倉庫決して小さなコストでなく、ユーザーのためのすべての開発者が自分の倉庫であれば、彼はリストを取得するために、それに対応する倉庫への参加に必要なアプリケーションを持っている必要があり、アプリケーションの普及を助長されていませんそして、共有します。


ファイル


また、開発者がアプリケーションをアップロードするためのチャネルを提供しながら、オープンクラウドネイティブアプリケーションセンタークラウドネイティブのApp Hubは、様々なアプリケーションを同期します。


私たちのネイティブオープンクラウドアプリケーションセンターでは、2つのチャンネルからのアプリケーション。一方、我々は定期的によく知られている外国のヘルム倉庫の数からチャートリソースを同期させる、同期の過程において、ドッカーチャートのミラー内側部分は、ユーザの利便性、(例えばgcr.io又はquay.io鏡像用)の交換を同期させるために使用されますアクセスは、使用しています。一方で、我々は、プル要求の形で自分のアプリケーションを提出する開発者の受け入れに関する公式ライブラリとしてヘルム。提出されたアプリケーションが正常に短期的には、クラウドネイティブアプリケーションセンターに同期、およびその他の公式アプリケーションは、他のユーザーのために一緒に表示されます。


私はより多くの人々に利益をもたらす、あなたが参加を願って、とてもオープンなクラウドアプリケーションセンターより豊かなネイティブ!


ファイル

著者について

清華大学の陰とコンテナサービスのACK曇ったクラウド技術とネイティブアプリケーション開発における主に関与アリクラウドプラットフォームコンテナのインターンシップでカーネギーメロン大学のコンピュータサイエンスの大学院生、。



Fanger魏コードスキャンは、ネイティブ雲の愛好家は、高度な戦闘技術動向を議論8000で、小さなアシスタントを追加するには!


ポジション- -市会社:グループ暗号に
ファイル

おすすめ

転載: www.cnblogs.com/alisystemsoftware/p/11526406.html