なになれスマートフォン用の表示で見るなになれIT系のことを記録していきます。Autoscaler(HPA)を使用することで、CPUやメモリの使用状況に応じてPodをスケールアウトすることができます。HPAではカスタムメトリクスを使うことで、CPUやメモリ以外のメトリクスを活用できます。AWSでは、CloudWatchのメトリクスが利用できるHPA向けのadapterを用意しています。github.comSQSのメッセージ数に応じてPodをスケールアウトすることができます。AWSのブログでこのadapterに関する記事が公開されていたので、この内容に沿ってadapterを試してみました。aws.amazon.com環境準備adapterを利用するための環境を準備します。EKSのクラスタを作るeksctlを利用して、EKSでKubernetesの環境を作ります。t3.smallEKSのNodeに権限を付与するNodeからはCloudWatchやSQSにアクセスするため、IAMの設定が必要です。eksctlで作成したNodeのIAMロールにAdministratorAccessというAWS管理ポリシーを付与します。※デモ用に管理者権限のポリシーを付与していますが、実際には適切なポリシーを適用すべきですadapterをデプロイするCloudWatchのadapterをデプロイします。https://raw.githubusercontent.com/awslabs/k8s-cloudwatch-adapter/master/deploy/adapter.yamlこれでHPAでCloudWatchのメトリクスを利用できるようになります。動作確認をするSQSを利用するサンプルアプリケーションをデプロイして、adapterの動作確認をします。SQSをセットアップする動作確認に利用するサンプルプログラムではhelloworldというqueue名のSQSを利用しますので、このSQSのリソースを作成します。helloworldSQSからメッセージを受信するサンプルプログラムを実行する定期的にSQSからメッセージを受信するサンプルプログラムをデプロイします。https://raw.githubusercontent.com/awslabs/k8s-cloudwatch-adapter/master/samples/sqs/deploy/consumer-deployment.yamlHPAをセットアップするHPAで利用するメトリクスを定義します。5分ごとにSQSのメッセージ数をカウントするメトリクスを設定しています。https://raw.githubusercontent.com/awslabs/k8s-cloudwatch-adapter/master/samples/sqs/deploy/externalmetric.yamlHPAを作成します。SQSのメッセージ数が30個を超えるごとにメッセージを受信するPodをスケールアウトします。https://raw.githubusercontent.com/awslabs/k8s-cloudwatch-adapter/master/samples/sqs/deploy/hpa.yamlSQSにメッセージを送信するサンプルプログラムを実行するSQSからメッセージを送信するサンプルプログラムをデプロイします。一度に20000個のメッセージを送信します。https://raw.githubusercontent.com/awslabs/k8s-cloudwatch-adapter/master/samples/sqs/deploy/producer-deployment.yaml結果を確認する5分ほど経過した後にHPAの状況を確認します。13mPod数が最大の10個まで増えています。まとめKubernetesからCloudWatchのメトリクスを活用して、Podのスケールアウトができました。今回のようにAWSのサービスとKubernetesを連携するための拡張機能の開発が進められています。日々このような情報を収集していく必要がありそうです。Goclient-goとはKubernetesのAPIを実行するためのgoのモジュールです。github.comKubernetesの拡張にも使われてます。Deckこれ以降は実際に使ってみた内容です。筆者はgo初心者であるため初歩的なセットアップからつまずきながら進めました。GitHubclient-goのリポジトリに使用例があります。clusterを動かしてみます。client-goをインストールする環境の前提としてmacOSを利用しています。goをインストールします。Language$GOPATHの配下に作業ディレクトリを配置する必要があるので以下のようにしました。Directory]/go/src/github.com/hi1280/out-of-cluster-client-configurationclient-goのインストールについてはこちらに書いてあります。modulesというモジュール管理の仕組みを使うことになったようなので、それに基づいてセットアップします。modulesの項にある通りに以下のコマンドを実行します。initgo.modというファイルが作成されます。k8s.io/client-go@masterコードを書く使用例をほぼコピーしました。podの数と該当のpodがあるかどうかを出力するプログラムです。pod名は適宜自身の環境に合わせて変更する必要があります。windows}clientsetオブジェクトを生成することで、KubernetesのAPIを実行できることが分かります。buildして実行します。found応用して作ったものclient-goを使ってkubernetes向けのCLIツールを作りました。擬似的なpatchを適用することでdeploymentの更新を実行します。tagは変えたくないけど、imageを更新したいという場合の使用を想定しています。github.comと、作ってみたものの同様のものが公式のkubectlで既に実装済みでした。dev.classmethod.jpやり方もほぼ一緒なので、kubectlのバージョンさえ上げれば、kubernetesクラスタのバージョンはあまり気にしなくて良さそうです。まとめclient-goを使うことで、KubernetesのAPIをプログラムから扱うことができました。client-goのドキュメントはあまりないので、APIのリファレンスを見ながら、それっぽいAPIを呼び出すというコーディングが必要になるかと思います。https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/Kubernetes向けのツールはOSSになっているものが多いので、それらを参考にすると良いかもしれません。Fargateローンチ記念!EKS祭りだワッショイの参加レポートです。EKSやそのベースとなるKubernetesについての発表が数多く行われたイベントです。自分は業務でEKSを運用しているので、業務に役立つことを知りたいと思い、参加しました。参加した結果、EKS、Kubernetesの運用について色々見直したいという思いになりました。自分が気になった内容を重点的に紹介・感想を書いていきます。今こそ振り返るEKSの基礎t.coEKSの基礎とはeksctlが何をやっているかを知ることがメインの内容でした。eksctlを使うといい感じに環境が作れるので、eksctl自体が何をやっているかを意識しなくなるというのはそのとおりで。発表の中で、eksctlが何をやっているのかという解説の中では知らないことが多々ありました。タグ付けとか、IAMロールの作成とか、VPCの作成などです。これらの要素について、こと細かに解説が行われました。今だとマネージド型のノードグループが作れるようになっていることも知りました。発表を通して、自分が触り始めた時より、EKSはより便利になっていると感じました。EKSを学ぶ上でEKSのアドベントカレンダーが役立つとのことです。実践的な内容が多いとのことです。qiita.comEKSが半額になったことですし、AWSのコンソールからEKSの環境を作ってみようと思いました。コンテナうまみつらみ〜Kubernetes初心者がEKSと格闘した1年を振り返る〜t.co2019年4月からEKSを使った開発を始めて、そこから得られた知見を紹介するという発表でした。本番稼動後に求められる非機能要件を満たすための対策が実体験に基づいて、自分の環境も見直さなければと思わせる内容でした。以下の内容が参考になりました。Podへのリソース割り当ては、Limitを設定せずに性能評価をした上で設定するカスタムメトリクスなどを使い、Pod自体をスケールアウトさせる工夫をすることで同時実行数を上げるPodの死活監視はsidecarが含まれることで難しくなる自分の環境では、envoyを使うようなサービス間の連携といったものはないです。マイクロサービス化が進むと今後必要になってくるものだと思うので、今回の話のようなツライ問題を知れて参考になりました。Kubernetesをめぐる冒険t.coKubernetesのバージョンが1.5の時から本番運用してきての運用の大変さとそれにどう対処してきたかの発表でした。Kubernetesクラスタのアップデートなどにより、Kubernetesクラスタを作る機会が頻繁にあるので、その運用を改善するためのノウハウが紹介されました。helmfileを活用しつつ、ほぼ数回のコマンドで必要な管理系のサービスが入ったKubernetesクラスタを作れているとのことでした。自分はまだKubernetesクラスタのアップデート作業を経験していないので、この発表内容を参考に対応したいと思いました。自分の環境だと何回もkubectlやデプロイ用のコマンドを実行しないと環境が作れないという状態なので、賢く運用している実践例として参考になりました。ArgoというGitOpsのための構成について紹介がありました。自分もゆくゆくはGitOpsに対応していく必要があると思っていたので気になりました。www.weave.worksOSSから理解するEKSとそのエコシステムについてt.coKubernetesのコントローラによる拡張によってAWSとKubernetesがどのように統合されているか様々な要素を紹介する発表でした。AWSのKubernetes環境が様々なOSSで支えられていることを知り、このようなOSSを自分でも調べてみたいと思いました。そのほかの発表そのほか以下の発表がありました。Deckどれも興味深い内容ばかりでした。まとめ個人的にEKS、Kubernetesの運用についての話はどれも興味深い内容で参考にしたいと思いました。EKS、Kubernetesをもっとやっていかないとという気持ちになりました。参加レポートTweet広告を非表示にするもっと読むコメントを書く次のページプロフィールid:hi1280日々で得たIT技術を記録していきます。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。