JAWS-UG コンテナ支部 #14 　スライドと概要まとめ

# はじめに
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">今日はこれにきてます！<br>JAWS-UG コンテナ支部 #14 <a href="https://t.co/YJxWO7r9Zc">https://t.co/YJxWO7r9Zc</a> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@エンタメ系エンジニア (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1108314790378627074?ref_src=twsrc%5Etfw">March 20, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以下のイベントとなります。
[JAWS-UG コンテナ支部 #14 - connpass](https://jawsug-container.connpass.com/event/122013/)

スライドまとめと、自分が興味を引かれた部分を抜粋してます。
初めのLT２つの内容中心となります。
connpassで後日スライドがまとまって掲載されるようなので、そちら掲載されたら補填します

## catabira.com における Amazon EKS 活用事例Kubernetes による継続的デリバリ編
登壇者:[池内 孝啓@catabira(@iktakahiro)さん \| Twitter](https://twitter.com/iktakahiro)
資料:[catabira.com における Amazon EKS 活用事例Kubernetes による継続的デリバリ編 / eks-cd-usecase-at-catabira - Speaker Deck](https://speakerdeck.com/iktakahiro/eks-cd-usecase-at-catabira)

### コンテクスト紹介
ブロックチェーンシステムの監視、メトリクスのサービスをSaaSで提供
Golangを使用
### 概要
kubernetesは楽しい
CI/CDの考え方は変わらない
**EKSはproduction使用できるフェーズです**
### 技術スタック　AWS構成
ノード編成が特殊
イーサリアムクライアントの方がツラミがたくさん
なので他のノードとは切り分けて運用している
![image.png](https://qiita-image-store.s3.amazonaws.com/0/321850/2175b5f5-3884-6b00-af25-2212195e973b.png)

- ブロックチェーン　ノード運用問題
Parityというイーサリアムクライアントを使っている
同期に時間がかかる
ディスク容量を食う
稀にデータが壊れる
EC2とEBSでRDSっぽくなるよう運用しないといけない
辛い　スケールもよしなにしない

- PersistentVolume 
AZまたげないので(EBS) 耐障害性弱い

- Stateful SetsをLBの下に
スケールするが運用の負が解消するわけではない

- Amazon Managed BlockChain
イーサリアム対応待機
ノードの管理から解放されるかも

### k8sと継続的デリバリ
継続的出荷　改善イテレーション高速で回す
今までとこの概念は同じ
マニフェストファイルをどう管理運用していくかがk8s特有
#### CircleCIによるマニフェスト適用更新の課題
- 環境によってconfigMap変えたい　
- deploymentにも反映させたい  
**それ、Kustomizeでできる！！**

### Kustomizeとは
ymlの部分更新や結合をよしなにやってくれるコマンドツール
レプリカの数を環境で変えるだけとかなら生成できる

### EKS k8sのtips
- eksctl　  
EKSやノードグループの構築をよしなにやってくれるコマンドラインツール  
cloudformationは辛いぞ　こちら導入時にとりあえずおすすめ
- New Relic  
モニタリングに対応したマニフェストあり  
コンテナが期待数上がってるかの監視もできる
- CloudAWatch Logs  
コンテナログを保全する  
取り急ぎまずぶち込む  ログ監視はコンテナ運用で必須  
FluentedをDaemonSetとして駆動させるのも楽
- Virginia Region  
みんなgithubとかのソースがどのリージョンにあるかは気にしないのに  
どうしてそんなに気にするのか  
**レイテンシー問題がシビアでないならTokyoリージョンにないサービス試していこう**  
- WorkerはPrivate Subnetに配置しSSMを使う

## ECSとFargateを本番投入して得た悲喜交交
登壇者:[あー。(@masa2129)さん \| Twitter](https://twitter.com/masa2129)
資料:　[ECS Fargateを本番投入して得た悲喜交交 - Speaker Deck](https://speakerdeck.com/masaaania/ecs-fargatewoben-fan-tou-ru-sitede-tabei-xi-jiao-jiao)
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">頭をインミュータブルにするためにスキンヘッドにした登壇者、、、笑<a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@エンタメ系エンジニア (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1108319821601529856?ref_src=twsrc%5Etfw">March 20, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

掴みが最高です
### コンテクスト紹介
マイクロアーキでサーバサイドkotolinでやってる
###Fargate　ECSについて
+サーバレス EC2の管理しなくていい
-起動が遅い　sshで中に入れないので調査しづらい
#### ELBヘルスチェック kills EC2 task
- 現象  
ある日ECSコンテナ突然立ち上がらなくなった
- 原因  
タスクに対して複数コンテナを当てたら起動遅くなって、ヘルスチェックに引っかかったから殺された  
- 助け舟  
ヘルスチェックの猶予期間
- Datadogのすすめ  
ヘルスチェック失敗イベントを取得、アラート設定をするのがとても楽  
Fargateはssh接続できない
- 前提  
そもそもコンテナにsshすべきじゃない
ログとかメトリクスの収集は周辺サービスを使うべき

### メモリリークの原因調査で苦しむ
Remote JMXの調査は例外で詰む
ローカルで再現しようとするが無理、EC2で再現しない　つみそう、、、

- 助け舟  
救ってくれたのはSpring Boot Actuator  
heapdump取れる
- 原因  
Datadogとspring Webfluxが共謀してお漏らししていた
- 邪道  
**sshdをコンテナにインストールする**

### まとめ
- マイクロサービス　サーバレス 　コンテナ運用  
VMや物理サーバー運用してたやり方ツールが同じように価値を発揮できるとは限らない
- いろんなツールに助けてもらいながらシステムを作る
もはやログ収集メトリクス監視ツールの使用は必須

- いろいろ言ったけどFargate好きです

以下の内容に歓喜
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Amazon ECS でサイドカーを持つタスク定義をご利用のみなさまお待たせしました！タスク内のコンテナ間に依存関係を定義し、各コンテナの起動順や停止順をコントロールできるようになりました！<br><br>/ &quot;Amazon ECS Introduces Enhanced Container Dependency Management&quot; <a href="https://t.co/DYq5UmFkq6">https://t.co/DYq5UmFkq6</a><br><br>続く)</p>&mdash; ポジティブな Tori (@toricls) <a href="https://twitter.com/toricls/status/1103878572530229248?ref_src=twsrc%5Etfw">March 8, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

しかし今の対象**EC2**だけ、、
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">今回追加されたパラメーター dependsOn, startTimeout, stopTimeout を利用するためには ecs-agent v1.26.0 以降が必要で、現時点で対応している起動モードは &quot;EC2&quot; です。<br><br>ドキュメント再掲👇<br><br>Container Dependency<a href="https://t.co/nZCl1LHqSy">https://t.co/nZCl1LHqSy</a><br>Container Definition Timeout<a href="https://t.co/dyXIytD4vO">https://t.co/dyXIytD4vO</a></p>&mdash; ポジティブな Tori (@toricls) <a href="https://twitter.com/toricls/status/1103879686164164609?ref_src=twsrc%5Etfw">March 8, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


**kotlinなどJVM系言語とコンテナ運用相性悪くて、結構辛いらしい**
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">そもそもJVMとDockerコンテナは相性が悪いようです。JVMはDockerコンテナ間のリソースの分離に使っているcgroupを無視する、という記事が見つかりました。<a href="https://t.co/ekZT7f3Wwl">https://t.co/ekZT7f3Wwl</a></p>&mdash; billthelizard (@billthelizardx) <a href="https://twitter.com/billthelizardx/status/1108372863419965442?ref_src=twsrc%5Etfw">March 20, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

(技術選定としてjavaの知見が使えそうだったから選んだだけとのこと)

## frontend for microservices with containers
登壇者: @inductor 
資料:[frontend for microservices with containers - Speaker Deck](https://speakerdeck.com/inductor/frontend-for-microservices-with-containers)
## Engineering life with containers on AWS
登壇者:@tnir 
資料:[Engineering life with containers on AWS - Speaker Deck](https://speakerdeck.com/tnir/engineering-life-with-containers-on-aws)
## ETL処理をFargateを使って行う
登壇者:@HibinoHisashi 
資料:未掲載
### 要約
EC2での運用はつらみ
S3-input-pluginとfargateの相性良くない
次回はEKSで
##体当たりecs-cli w/ fargate!
登壇者:さわら(Hiroaki Ogasawara) さん
資料:[体当たりecs-cli w/ fargate! - Google スライド](https://docs.google.com/presentation/d/1DOoMWiseq0AmtiXH4RzD6C4rmfbUNsLrYWs8XrVT2zU/edit#slide=id.p)
##Fargateは何が嬉しいのか
登壇者：@shnagai さん
資料:[Fargateは何がうれしいのか/ fargate-whats-nice - Speaker Deck](https://speakerdeck.com/shoichiron/fargate-whats-nice)
### 要約
Fargateは運用フェイズで安定する　
EC2のRIより高い　リザーブドな購入待ち望んでいます
データプレーンとして認識した方が良い
##Fargate＋ECRでelastalertを構築
登壇者:やったん さん 
資料:[Fargate + ECR で elastalertを構築 - Speaker Deck](https://speakerdeck.com/mdps513/fargate-plus-ecr-de-elastalertwogou-zhu)
### 要約
ElasticSearchの監視にelastalert使ってる
dockerimage RESTAPIも用意されてる
SlackやSNSでの通知が用意
ただ、ルール設定が結構難しい　
## Fargate Blue/Green Deplpy
登壇者：@koarakko 
資料: 掲載なし
[AWS CodeDeploy による AWS Fargate と Amazon ECS でのBlue/Greenデプロイメントの実装 \| Amazon Web Services ブログ](https://aws.amazon.com/jp/blogs/news/use-aws-codedeploy-to-implement-blue-green-deployments-for-aws-fargate-and-amazon-ecs/)
### 要約
旧環境の退役をマネージドできる
戻すのが簡単なので結構おすすめ