kubernetes helm & helmc
TRANSCRIPT
1
k8s helm & helmcKubernetes meetup Tokyo #2
2
ABOUT MESoftware Engineer
I’m developing cloud services.
AYA IGARASHINTT 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
BASHMANAGEMENT of MANIFEST
1sourceenv.sh2printf"cat<<++EOS\n%s\n++EOS\n""$(cat*service.yaml*deployment.yaml)"\3|sh>all-in-one.yaml
環境ごとに変更したい値をbash変数としてManifestに埋め込み、実行したい環境の設定ファイルを読み込んでからシェル芸をしていた
今まで
1apiVersion:extensions/v1beta12kind:Deployment3metadata:4name:rabbitmq${SUFFIX}5spec:6replicas:${REPLICA_NUMBER}7template:8metadata:9labels:
04
02rabbitmq-deployment.yamllabels以降は省略している
install-service-and-deployment.shenv.shの中で変数をexport
6
PROBLEMSMANAGEMENT of MANIFEST
01 DUPLICATE DEFINITIONScontainersのenvフィールドに複数のファイルに共通の環境変数が定義されているため、修正漏れが発生する。(連想配列が使いたい….)
02 HARD TO READシンプルに構造的な変数を定義できないため設定ファイルが読みづらい。
03 YAML LINT IS NOT ENOUGH心の平穏のためmanifestをk8sへインストールする前に試験を実施したかったが、YAML lintでは結果がPASSEDであってもk8sで動かないことが多々あった。
PROBLEM BASH
7
ByHelm
8
What is Helm?ABOUT K8S HELM & HELMC
GolangのTemplate拡張ライブラリであるSprigの記法を使ってManifestファイルを定義することができる。また、サブコマンドとして文法チェックを行うlintコマンドが提供されている。
K8Sのパッケージマネージャ
1#Githubb上で公開されているnginxパッケージを検索2$helmcsearchnginx3example-nginx-Anexamplenginx+git-syncapplication4nginx-Nginxhttpservice5nginx-alpine-Nginxhttpservice67#Kubernetesへnginxをインストールする8$helmcinstallnginx9--->Nochartnamed"nginx"inyourworkspace.Fetchingnow.10--->Running`kubectlcreate-f`...11service"nginx"created12replicationcontroller"nginx"created13--->Done
9
DiffHelm Helmc
10
ALLDifferent
HELM CLASSIC
KUBERNETES HELM
Oct18,2015にDEISによって作られたCLIでChartの作成/削除/更新ができる。ChartのバージョンはGitのSHAsで判定されている。
Nov1,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 ClassicABOUT K8S HELM & HELMC
12
02KUBERNETES
install chart
delete Release
TILLER
CHART FILES
Kubernetes HelmABOUT K8S HELM & HELMC
HELM REST/JSONgRPC
STORAGENGINX
WORD PRESS
MYSQL
Create Chart files
contain Chart packages
Package Chart files
NGINX CHART PACKAGE
get/update Release
TarBall
13
Which isBetter?
14
Which is better?
KubernetesHelmはまだバージョンAlpha-1がリリースされたばかりで動かないものが多いため。
Which is better?
Now HELM CLASSIC
HelmClassicはメンテナンスされなくなるため、ある程度安定してからは移った方がよい。ロードマップによるとBeta1にはChart.yamlのフォーマットをFixするらしいのでその頃には移動してもよさそう
ROADMAP:https://github.com/kubernetes/helm/issues/694
Feature KUBERNETES HELM
15
How to useHelmc
16
How to use Helmc?WHICH IS BETTER?
テンプレートと変数は見通しがよいようにディレクトリを新たに切っている。
また、変数は環境ごとにファイルを分割し共通のデフォルト値は直接templateに定義している。
FILE STRUCTURE
VariablefileformatHelmcでは変数ファイルのフォーマットはJSON/YAML/TOMLの中から選択できるが、k8sHelmはTOMLのみのため、移行のしやすさからTOMLがおすすめ
deployments-generator.sh次ページで説明するCustomizegeneratorから呼びだしているManifestの生成スクリプト
└──rabbitmq├──Chart.yaml├──README.md├──deployemnts-generator.sh├──manifests├──templates│├──service.yaml│└──deployment.yaml└──variables└──lab1.toml.tpl└──lab2.toml.tpl
17
Custom GeneratorWHICH IS BETTER?
deployments-generator.sh(抜粋)(
1#helm:generate$HELM_GENERATE_DIR/deployemnts-generator.sh2apiVersion:extensions/v1beta13kind:Deployment
1echo"deploymentType=\"${type}\"">$tempdir/values.toml23fortypein"age""hoge";do4helmctemplate-d$tempdir/values.toml\5-omanifests/${type}-deployment.yaml$HELM_GENERATE_FILE6done
deployment.yaml(抜粋)
templateコマンドを使ってManifestを生成すると各ファイル毎に実行しなければならないが、generateコマンドを使用すると以下のdeployment.yamlのように一行目にgeneratorが指定されているものをChartディレクトリの中から収集し、一括してManifestを生成することができる。(Jenkinsとの相性よし!)
18
More Information
19
More InformationHAPPY 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