20
k8s helm & helmc Kubernetes meetup Tokyo #2

Kubernetes helm & helmc

Embed Size (px)

Citation preview

Page 1: Kubernetes helm & helmc

1

k8s helm & helmcKubernetes meetup Tokyo #2

Page 2: Kubernetes helm & helmc

2

ABOUT MESoftware Engineer

I’m developing cloud services.

AYA IGARASHINTT Communications

@Ladicle

Page 3: Kubernetes helm & helmc

3

AGENDA INTRODUCTION

01

02

03

今までの管理方法

04

HOW TO MANAGE MANIFESTS?

ABOUT K8S HELM & HELMC

WHICH IS BETTER?

HAPPY HELMING

どんなものか、違いは何か

どちらをどのような構成で使うべきか

まとめ

Page 4: Kubernetes helm & helmc

4

How to mange Manifests?

Page 5: Kubernetes helm & helmc

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

Page 6: Kubernetes helm & helmc

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

Page 7: Kubernetes helm & helmc

7

ByHelm

Page 8: Kubernetes helm & helmc

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

Page 9: Kubernetes helm & helmc

9

DiffHelm Helmc

Page 10: Kubernetes helm & 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のインスタンスを作成するために必要なテンプレート/値の集合体

Page 11: Kubernetes helm & helmc

11

02KUBERNETES

GITHUB

install

uninstall

NGINX

WORD PRESS

MYSQL

HELMC

CHART FILES

publish, fetch

Create

using kubectl

Helm ClassicABOUT K8S HELM & HELMC

Page 12: Kubernetes 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

Page 13: Kubernetes helm & helmc

13

Which isBetter?

Page 14: Kubernetes helm & helmc

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

Page 15: Kubernetes helm & helmc

15

How to useHelmc

Page 16: Kubernetes helm & helmc

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

Page 17: Kubernetes helm & helmc

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との相性よし!)

Page 18: Kubernetes helm & helmc

18

More Information

Page 19: Kubernetes helm & helmc

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

Page 20: Kubernetes helm & helmc

20

HAPPY HELMING!

Thanks for watching

@ladicle