運用編2019-03-31by@wapa5pow前々回のEKS構築、前回のECSからEKSへ移行でEKSでのサービスの構築は終わったのあで、構築したEKSの運用で役立つ情報を紹介したいと思います。Kubernetesダッシュボードの利用GKEではKubernetesダッシュボード相当のものがGKEのWebコンソール上でみれるので特に必要ないのですが、EKSはWebコンソール上からではノードやポッドの状態がぜんぜんわからないのでKubernetesダッシュボードを導入するといいと思います。(Dashboard)にどのようにすればダッシュボードがEKSで利用できるか手順があります。この通りにするとダッシュボードがデプロイされブラウザで確認することができます。ダッシュボードにアクセスすると以下のようなページがみれます。使うのはポッドを選んでから、右上のログを押すとポッドが出力しているログを見ることができるのでデバッグに役立ちます。その左にあるEXECボタンを使うとポッドのシェルに入ってデバッグすることができます。kubectlコマンドでもできますが、クリックするだけで手軽にデバッグできるので便利です。他のユーザもkubectlが使えるようにする今回の記事のように設定しただけだと、他のチームメンバーがkubectlコマンドをインストールし実行しても、権限がないためEKSクラスタにアクセスすることはできません。Clusterを参照すればできます。これだといちいちIAMユーザを追加しなければならず大変なのでグループにユーザを追加するなど他のやり方を探したのですが見つかりませんでした。podでまずポッドの確認ができます。wideオプションでどのノードで動いているかも確認できます。logsはポッドの出力ログを見るときに使います。基本的にコンテナが起動したあとのログの確認のために使います。-fみたいにして出力を待つことができます。execはコンテナに接続してデバッグできます。deleteでポッドを削除できます。Deploymentが定義されている場合は自動でポッドが復旧します。ときどき調子の悪いポッドがあったときに削除して再起動すると治ることがある場合はこのコマンドで削除してやるといいです。port-forwardを使えばアクセスできます。以下を実行すればローカルの3306ポートにアクセスするとポッドの3306ポートにポートフォーワードされMySQLがデバッグできます。3306:3306Helmを使うHelmはKubernetesのパッケージマネージャです。Kubernetes上でMySQLを動かしたいと思ったときに、Helmを利用しないと自分でServiceやDeploymentのYAMLを書いてkubectlでデプロイしなければならず非常に手間です。Helmを使うとチャートとよばれるあらかじめ設定されたYAMLをhelmコマンドでインストールできその結果簡単にMySQLがKubernetes上で動かすことができます。実際のMySQLのチャートや、他のチャートを見てみるとイメージがつくかもしれません。Helmを参考にすればいいかなと思います。helm-rbac.yamlで適用します。kube-systemTillerをインストールします。tillerインストールの確認をします。以下のようにClientもServerもバージョンがでれば完了です。Logsにログを集約することができます。CloudWatchのHelmチャートを使います。こちらのHelmレポジトリはkube2iamを使って権限制御できるのでFluentd用のkube2iam設定をします。あたらしいk8s-fluentdというロールをAWSコンソールから作ってCloudWatchFullAccessのポリシーをアタッチして作成します。前回の記事でやったようにロールの信頼関係もワーカーノードのものを設定しておきます。Helm用の設定ファイルを以下のように作成します。</source>image.tagを指定しているのはHelmのチャートだと以下のようなエンコードのエラーが出たので最新のタグにして合わせて設定ファイルも変えています。stacktrace以下のコマンドでKubernetesに反映します。Logsにkubernetesというロググループができていれば正しく設定できています。Logsはそのままだとポッドごとにファイルが別れてログストリームに出力されているので、ログストリームをクリックしても1つのポッドの出力しか確認できません。Insightsでクエリ構文を使うことにより特定のデプロイメントの目的のログが取り出しやすくなります。以下のようなクエリを発行することによりkubernetes.var.log.containers.backend-*の@logStreamと2019-04-24T07:00:00.000+09:00〜2019-04-24T08:00:00.000+09:00の@timestampのフィルタに合致したバックエンドのログが10件出力できます。...を使ったりHelmを使ったりしてデプロイしますがいちいちやると手間なのでCircleCIを使ってdevelopブランチにコミットがプッシュされるたびにKubernetsにデプロイされるように設定します。CircleCIはビルドのたびに$CIRCLE_SHA1というハッシュが付与されるのでイメージをビルドしてタグを$CIRCLE_SHA1でつけておきます。AWSの設定をCircleCI上にしてから、抜粋ですが以下のようにするといいかなと思います。...にすきなKubernetesのファイルを反映させてください(ファイルのイメージのタグをsedかなにかで$CIRCLE_SHA1とあらかじめ置換しておいてください)。この置換がいまいちな場合はHelmのチャートにするのも手です。Nodesの手順でノードは追加できますがnode-labelsをつけるには、CloudFormationのBootstrapArgumentsに以下のように記載します。HelmにあるようにHelmで入れることができます。これだと開発用・本番用など複数のクラスタに入れたときに区別できなくて困るので、ここにあるようにIAMを設定してEKSのクラスタ名をとれるようにする必要があります。まとめEKSでの運用に役立つ情報を紹介しました。あると思うので気づいたら追記していきます。blogHomeAboutTool。