707 Views
December 14, 21
スライド概要
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み
定期的なKubernetesクラスタバージョンアップを安全に実現するために取り組んだ内容をお話します。
Kubernetesクラスタ構築とE2Eテストの自動化を行い、Admission Webhookを利用し後方互換を保ちながらバージョンアップをした事例などクラスタ運用戦略を交えてご紹介します。
スピーカー:川合 拓央
LIFULL HOME'Sを運営する株式会社LIFULLのアカウントです。 LIFULLが主催するエンジニア向けイベント「Ltech」等で公開されたスライド等をこちらで共有しております。
2021.12.15 Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み Kubernetesクラスタバージョンアップを支える技術 株式会社LIFULL 川合拓央 Copyright© LIFULL All Rights Reserved.
Kubernetesクラスタバージョンアップを支える技術 バージョンアップは大変で不安 ・互換性のない変更が含まれていて不具合が発生する可能性がある ・バージョンアップの手順にミスがあり不具合が発生する可能性がある ・切り戻しが可能か、手順は用意されているか ・確認作業に一定のコストが割かれる Copyright© LIFULL All Rights Reserved.
Kubernetesクラスタバージョンアップを支える技術 LIFULLのクラスタ運 用方針 LB 0 100 アプリケーション特徴 ・マルチテナンシー v1.19 v1.21 ・ステートレスなアプリケーション ・多重起動を許容する冪等性をもったjob ・initial-loadを実装したアプリケーション Cluster Migration InPlaceアップグレードは切り戻しの複雑さが 増すのと検証のしにくさから行わない Copyright© LIFULL All Rights Reserved. weigthed recordによるクラスタへのルーティングによって移行を実現する
Kubernetesクラスタバージョンアップを支える技術
クラスタ構築の
export AUTOMATION_DOCUMENT_NAME=$(aws cloudformation describe-stacks
--stack-name $STACK_NAME --region $AWS_REGION --query
自動化
'Stacks[].Outputs[?OutputKey==`DocumentName`].OutputValue' --output text)
[ "$(aws sts get-caller-identity | jq -r .Account)" = "$ACCOUNT_ID" ] && \
aws ssm start-automation-execution \
--document-name ${AUTOMATION_DOCUMENT_NAME} \
目指したのは手作業の排除
--parameters \
"AccountId=${ACCOUNT_ID}, \
AwsRegion=${AWS_REGION}, \
DnsZone=${DNS_ZONE}, \
例えば新メンバーがチームに参加し知
MasterZones=${MASTER_ZONES}, \
MasterSize=${MASTER_SIZE}, \
識の差があったとしてもクラスタ構築が
MaxNode=${MAX_NODE}, \
MinNode=${MIN_NODE}, \
完了する
NodeSize=${NODE_SIZE}, \
MaxSpotNode=${MAX_SPOT_NODE}, \
MinSpotNode=${MIN_SPOT_NODE}, \
SpotNodeSizes='${SPOT_NODE_SIZES}', \
...
Copyright© LIFULL All Rights Reserved.
Kubernetesクラスタバージョンアップを支える技術 クラスタ構築の自動化 構築されるクラスタの状態 ・IstioやPrometheusなどのソフトウェアの設定も同一 ・Spinnakerによるデプロイパイプラインも設定され稼働しているクラスタと同じ内容のデプロイ が実行される 指定したBranchの内容を元にクラスタを構築 Copyright© LIFULL All Rights Reserved.
Kubernetesクラスタバージョンアップを支える技術 クラスタの動作確認 ・Auditlogが記録されていることを検証 ・Cluster Autoscalerが稼働することを検証 ・GracefulShutdownが動作することを検証 ・Istio Ingressgatewayが疎通しクラスタ外からアクセス可能なことを検証 ・Prometheusのすべてのscrapeターゲットがscrape可能であることを検証 ・SpinnakerのすべてのPipelineが実行に成功していることを検証 他にも多数 Copyright© LIFULL All Rights Reserved.
Kubernetesクラスタバージョンアップを支える技術 E2Eテストで動作確 認の自動化 1. 前述の確認項目についてのテストケース を実装しSonobuoyのPluginとして実行 2. Conformanceテストの実行 過去にVPC DHCP Options Setの設定差分に よってexternalTrafficPolicy: localの挙動が環境 によって異なる現象に遭遇した。設定に依存 する不具合を検知する目的で実行する Copyright© LIFULL All Rights Reserved.
Kubernetesクラスタバージョンアップを支える技術 E2Eテストで検知したバージョンアップ時の問題 kOpsバージョンアップに伴いaws-iam-authenticatorが機能しなくなったのを検知 KubeApiServerのmount pathを変更した影響 Readiness Probeが失敗するようになったアプリケーションの検知 Istio1.10によりeth0からloへの転送がされなくなった影響 Conformanceテストの結果からHPAが動作しないことを検知 Deprecated API対応の変更忘れによりmetrics-serverの起動に失敗した影響 Copyright© LIFULL All Rights Reserved.
Kubernetesクラスタバージョンアップを支える技術 Admission Webhook Istioバージョンアップ 当時稼働していたIstioはv1.5.10 v2 xDS APIはv1.8以降で利用できない v1.7はv2/v3の両方をサポート EnvoyFilter v2 xDS EnvoyFilter v3 xDS EnvoyFilter v3 xDS EnvoyFilter v2 xDS Istio 1.5.10 Copyright© LIFULL All Rights Reserved. Istio 1.7
Kubernetesクラスタバージョンアップを支える技術 Admission Webhook Istioバージョンアップ Istio v1.5.10 から Istio v1.10.2まで一気にアップデートを行った API HTTP handler Authentication Authorization Mutating Admission EnvoyFilter v2 xDS Webhook Copyright© LIFULL All Rights Reserved. EnvoyFilter v3 xDS
Kubernetesクラスタバージョンアップを支える技術 クラスタ定期構築の 自動化 E2Eテストの自動実行 加えた変更による動作不良を検知 v1.21 v1.21 v1.21 常にクラスタ構築が成功することの保証 緊急時のリスク回避 xg3xhh … 4cfcfdc Copyright© LIFULL All Rights Reserved. os52cv os52cv 4cfcfdc 4cfcfdc
Kubernetesクラスタバージョンアップを支える技術 Kubernetesクラスタバージョンアップを支える技術 1 クラスタ構築の自動化で誰でもクラスタ構築が可能 2 構築したクラスタの確認作業をE2Eにより自動化 3 Admission Webhookをクラスタ移行に活用 4 クラスタ定期構築の自動化で健全性を保証 Copyright© LIFULL All Rights Reserved.
Copyright© LIFULL All Rights Reserved.