Slide 1

Slide 1 text

Kubernetes Sapporo for Beginners GKE上での開発・運用でハマったお話 ~ GKE + Argo Workflow ~

Slide 2

Slide 2 text

Kubernetes Sapporo for Beginners 自己紹介 松本 宏紀 ( まつもと ひろき ) ● Kubernetes Sapporo for Beginners主催者。 ● チーフ・アーキテクト ● オフショアラボ・チームリーダー ● デブサミ2019「Spring Bootでマイクロサービス作って苦労したお話」発表。 ● Google Cloud Next ‘19 in Tokyo 「大規模エンタープライズ システムをマイクロ サービスで刷新。その開発プロセス再定義まで 道のり」登壇 Twitter:@hirokimatsumo13

Slide 3

Slide 3 text

Kubernetes Sapporo for Beginners 今日のお話 GKEを使ってJob基盤を作ろうとして Managed Serviceな範囲でハマった

Slide 4

Slide 4 text

Kubernetes Sapporo for Beginners Argo Workflow https://github.com/argoproj/argo ● Argo Workflow Kubernetes上で動作するContainer NativeなWorkflow Engine。 Custom Resource = Workflowでワークフローを管理できる。 ● Argo CD GitOpsでCD(Continuous Delivery)するためのツール。 ● Argo Events イベント駆動での開発をするためのイベント管理ツール。 ● Argo Rollouts Blue Green Deployments、Canary Releaseするためのツール。

Slide 5

Slide 5 text

Kubernetes Sapporo for Beginners Argo Workflow

Slide 6

Slide 6 text

Kubernetes Sapporo for Beginners Argo Workflow

Slide 7

Slide 7 text

Kubernetes Sapporo for Beginners Customize Argo Workflow Web UIが辛い。 ● namespace毎に、Workflowをfilterしたい。 ● 日時の範囲で絞り込みを行いたい。 ● Workflowと各種イベントの発生を、追跡して見れるようにしたい。 ● ログはPodのログから取っているので、 Nodeの水平オートスケーラーを利用していると見れなくなってしま う。

Slide 8

Slide 8 text

Kubernetes Sapporo for Beginners Customize Argo Workflow Web UIが辛い。 ● namespace毎に、Workflowをfilterしたい。 ● 日時の範囲で絞り込みを行いたい。 ● Workflowと各種イベントの発生を、追跡して見れるようにしたい。 ● ログはPodのログから取っているので、 Nodeの水平オートスケーラーを利用していると見れなくなってしま う。 → 独自でUIを作成。(kubernetesのworkflow、podのAPIをcallして、UIを表示するように改良。 → ログ情報は、BigQueryにexportされたログを表示するように改良。

Slide 9

Slide 9 text

Kubernetes Sapporo for Beginners How to Use 負荷状況に合わせて、 Nodeを水平スケールアウト するようにしている。 Podの起動要求が多くなり、物理的 なリソースが足りなくなると、Node が追加される。

Slide 10

Slide 10 text

Kubernetes Sapporo for Beginners すごい。 Cloud Nativeっぽい。

Slide 11

Slide 11 text

Kubernetes Sapporo for Beginners 問題1 Javaで動作しているアプリケーションで、偶発的に下記エラーが発生する。 Caused by: java.io.IOException: Unexpected Error code 500 trying to get security access token from Compute Engine metadata for the default service account: GKE Metadata Server: Internal Server Error

Slide 12

Slide 12 text

Kubernetes Sapporo for Beginners 問題1 Master (Controle Plane)が火を吹いてた。 Managed Service

Slide 13

Slide 13 text

Kubernetes Sapporo for Beginners 解決方法 : 問題1 解決方法は、公開しておりません。 サポートさんに連絡してごにょごにょする。

Slide 14

Slide 14 text

Kubernetes Sapporo for Beginners 再発する 数週間後…Javaで動作しているアプリケーションで、偶発的に下記エラーが発生する。 Caused by: java.io.IOException: Unexpected Error code 500 trying to get security access token from Compute Engine metadata for the default service account: GKE Metadata Server: Internal Server Error

Slide 15

Slide 15 text

Kubernetes Sapporo for Beginners 問題2 各Nodeに存在するgke-metadata-serverが落ちる。 workflow-pod-xxx workflow-pod-yyy gke-metadata-server-xxx gke-metadata-server Workload Identityを有効にしている場合、 gke-metadata-serverを介して、K8Sの ServiceAccountからGCPの権限確認を行なっている。

Slide 16

Slide 16 text

Kubernetes Sapporo for Beginners 解決方法 : 問題2 解決方法は、公開しておりません。 サポートさんに連絡してごにょごにょする。

Slide 17

Slide 17 text

Kubernetes Sapporo for Beginners 再試行による担保で大体は救える。 ただ、ある程度の内部の動きの把握も必要。