1
k8s helm & helmc
Kubernetes meetup Tokyo #2
2
ABOUT MESoftware Engineer
I’m developing cloud services.
AYA IGARASHI
NTT Communications
@Ladicle
3
AGENDA
INTRODUCTION
01
02
03
今までの管理方法
04
HOW TO MANAGE MANIFESTS?
ABOUT K8S HELM & HELMC
WHICH IS BETTER?
HAPPY HELMING
どんなものか、違いは何か
どちらをどのような構成で使うべきか
まとめ
4
How to mange
Manifests?
5
BASH
MANAGEMENT of MANIFEST
				1	source	env.sh	
				2	printf	"cat	<<++EOSn%sn++EOSn"	"$(cat	*service.yaml	*deployment.yaml)"		
				3								|	sh	>	all-in-one.yaml	
環境ごとに変更したい値をbash変数としてManifestに埋め込み、	
実行したい環境の設定ファイルを読み込んでからシェル芸をしていた
今まで
1	apiVersion:	extensions/v1beta1	
2	kind:	Deployment	
3	metadata:	
4			name:	rabbitmq${SUFFIX}	
5	spec:	
6			replicas:	${REPLICA_NUMBER}	
7			template:	
8					metadata:	
9							labels:
04
02
rabbitmq-deployment.yaml	
labels以降は省略している
install-service-and-deployment.sh	
env.shの中で変数をexport
6
PROBLEMS
MANAGEMENT of MANIFEST
01 DUPLICATE DEFINITIONS
containersのenvフィールドに複数のファイルに共
通の環境変数が定義されているため、修正漏れが
発生する。(連想配列が使いたい….)
02 HARD TO READ
シンプルに構造的な変数を定義できないため設定
ファイルが読みづらい。
03 YAML LINT IS NOT ENOUGH
心の平穏のためmanifestをk8sへインストールする前
に試験を実施したかったが、YAML	 lintでは結果が
PASSEDであってもk8sで動かないことが多々あった。
PROBLEM
BASH
7
By
Helm
8
What is Helm?
ABOUT K8S HELM & HELMC
GolangのTemplate拡張ライブラリであるSprigの記法を使ってManifestファイルを
定義することができる。また、サブコマンドとして文法チェックを行う	
lintコマンドが提供されている。
K8Sのパッケージマネージャ
				1	#	Githubb上で公開されているnginxパッケージを検索	
				2	$	helmc	search	nginx	
				3	example-nginx	-	An	example	nginx	+	git-sync	application	
				4	nginx	-	Nginx	http	service	
				5	nginx-alpine	-	Nginx	http	service	
				6		
				7	#	Kubernetesへnginxをインストールする	
				8	$	helmc	install	nginx	
				9	--->	No	chart	named	"nginx"	in	your	workspace.	Fetching	now.	
			10	--->	Running	`kubectl	create	-f`	...	
			11	service	"nginx"	created	
			12	replicationcontroller	"nginx"	created	
			13	--->	Done
9
Diff
Helm Helmc
10
ALL
Different
HELM CLASSIC
KUBERNETES HELM
Oct	18,	2015にDEISによって作られた	
CLIでChartの作成/削除/更新ができる。	
ChartのバージョンはGitのSHAsで判定	
されている。
Nov	1,	2015にk8sへ取り込まれたクライア
ントサーバ型のツール。12FactorAppの思
想をもとにChart	+	Config	=	Release	という
構成をとっている。
What is Chart?
k8sのインスタンスを作成するために必要な	
テンプレート/値の集合体
11
02KUBERNETES
GITHUB
install
uninstall
NGINX
WORD
PRESS
MYSQL
HELMC
CHART FILES
publish, fetch
Create
using kubectl
Helm Classic
ABOUT K8S HELM & HELMC
12
02KUBERNETES
install chart
delete Release
TILLER
CHART FILES
Kubernetes Helm
ABOUT K8S HELM & HELMC
HELM
REST/JSONgRPC
STORAGE
NGINX
WORD
PRESS
MYSQL
Create
Chart files
contain
Chart packages
Package
Chart files
NGINX
CHART PACKAGE
get/update Release
TarBall
13
Which is
Better?
14
Which is better?
Kubernetes	HelmはまだバージョンAlpha-1がリリースされ
たばかりで動かないものが多いため。	
Which is better?
Now HELM CLASSIC
Helm	Classicはメンテナンスされなくなるため、ある程度安定してか
らは移った方がよい。ロードマップによるとBeta1にはChart.yamlの
フォーマットをFixするらしいのでその頃には移動してもよさそう	
ROAD	MAP:	https://github.com/kubernetes/helm/issues/694	
Feature KUBERNETES HELM
15
How to use
Helmc
16
How to use Helmc?
WHICH IS BETTER?
テンプレートと変数は見通しがよいようにディレクトリを新たに切っている。	
また、変数は環境ごとにファイルを分割し共通のデフォルト値は直接templateに定義している。
FILE STRUCTURE
Variable	file	format	
Helmcでは変数ファイルのフォーマットはJSON/
YAML/TOMLの中から選択できるが、k8s	HelmはTOML
のみのため、移行のしやすさからTOMLがおすすめ
deployments-generator.sh	
次ページで説明するCustomize	generatorから呼びだ
しているManifestの生成スクリプト
└──	rabbitmq	
				├──	Chart.yaml	
				├──	README.md	
				├──	deployemnts-generator.sh	
				├──	manifests	
				├──	templates	
				│			├──	service.yaml	
				│			└──	deployment.yaml	
				└──	variables	
								└──	lab1.toml.tpl	
								└──	lab2.toml.tpl
17
Custom Generator
WHICH IS BETTER?
deployments-generator.sh	(抜粋)	
(
				1	#	helm:generate	$HELM_GENERATE_DIR/deployemnts-generator.sh	
				2	apiVersion:	extensions/v1beta1	
				3	kind:	Deployment	
				1	echo	"deploymentType	=	"${type}""	>	$tempdir/values.toml	
				2		
				3	for	type	in	"age"	"hoge";	do	
				4					helmc	template	-d	$tempdir/values.toml		
				5											-o	manifests/${type}-deployment.yaml	$HELM_GENERATE_FILE	
				6	done	
deployment.yaml	(抜粋)	
templateコマンドを使ってManifestを生成すると各ファイル毎に実行しなければならないが、generateコ
マンドを使用すると以下のdeployment.yamlのように一行目にgeneratorが指定されているものをChartディ
レクトリの中から収集し、一括してManifestを生成することができる。(Jenkinsとの相性よし!)
18
More
Information
19
More Information
HAPPY HELMING
01
02
03
http://slack.kubernetes.io/
KUBERNETES SLACK #HELM CHANNEL
MEETING ON ZOOM
JAPANESE DOCUMENT
Contribution
まだまだ始まったばかりの面白いプロジェクト
小さなバグFIXば数日でRV, MGされる
手順は他のk8sプロジェクトと同じです
https://engineyard.zoom.us/j/
https://github.com/Ladicle/kubernetes-helm-jp-doc
20
HAPPY HELMING!
Thanks for watching
@ladicle

Kubernetes helm & helmc