こんにちは。SREの今井(id:hayajo_77)です。
現在ご提供しているmackerel-container-agentはKubernetesに対応しています。 Amazon EKSでももちろん利用できますが、先日のre:Inventで発表されたAmazon EKS on AWS Fargate(以降EKS on Fargate)では動作しません。
そこでEKS on Fargateに対応したmackerel-container-agentのアルファ版を公開しました。
- mackerel/mackerel-container-agent:v0.3.0-alpha
- mackerel/mackerel-container-agent:v0.3.0-plugins-alpha(プラグイン同梱)
こちらのDockerイメージをPodのサイドカーとしてデプロイしていただくことで従来のKubernetesと同様にPodを監視できます。
アルファ版としてのご提供となりますが、EKS on Fargateのご利用を検討されている場合はぜひお試しください。
EKS on Fargateでmackerel-container-agentを利用する
EKS on Fargateにmackerel-container-agentをデプロイするには、マニフェストに次の環境変数の定義が必要になります。
MACKEREL_APIKEY
- MackerelオーガニゼーションのAPIキー
MACKEREL_CONTAINER_PLATFORM
- "eks_fargate" (固定文字列)
MACKEREL_KUBERNETES_NODE_NAME
- Podが動作するノードの名前(設定する値は下記のマニフェスト例を参照してください)
MACKEREL_KUBERNETES_NAMESPACE
- PodのNamespace(設定する値は下記のマニフェスト例を参照してください)
MACKEREL_KUBERNETES_POD_NAME
- Podの名前(設定する値は下記のマニフェスト例を参照してください)
またKubernetesのRole Based Access Control(RBAC)の設定も必要となります。 mackerel-container-agentが下記のリソースを参照できるようにEKSクラスタでClusterRole, ClusterRoleBinding, ServiceAccountを設定してください。
nodes/proxy
(get)nodes/stats
(get)nodes/spec
(get)
以下はRedisとそれを監視するmackerel-container-agentサイドカーを定義したDeploymentのマニフェスト例です。 (FargateプロファイルでSelectorsに"default" Namespaceを指定していることを想定しています)
このマニフェストではMACKEREL_APIKEYをSecretsから取得するように定義しています。 事前につぎのコマンドを実行するなどしてSecretを作成してください(暗号化に関してはここでは触れません)。
kubectl create secret generic mackerel-container-agent -n default --from-literal "apikey=${MACKEREL_APIKEY}"
マニフェスト例(RBAC含む)です。
--- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: mackerel-container-agent rules: - apiGroups: [""] resources: - nodes/proxy - nodes/spec - nodes/stats verbs: - get --- apiVersion: v1 kind: ServiceAccount metadata: name: mackerel-container-agent namespace: default --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: mackerel-container-agent roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: mackerel-container-agent subjects: - kind: ServiceAccount name: mackerel-container-agent namespace: default --- apiVersion: v1 kind: ConfigMap metadata: name: mackerel-container-agent namespace: default data: mackerel-container-agent.yaml: | plugin: metrics: redis: command: mackerel-plugin-redis -port=6379 -timeout=5 -metric-key-prefix=redis6379 --- apiVersion: apps/v1 kind: Deployment metadata: name: eks-fargate-mackerel-container-agent namespace: default spec: replicas: 1 selector: matchLabels: app: redis strategy: {} template: metadata: labels: app: redis spec: serviceAccountName: mackerel-container-agent containers: - name: redis image: "redis:latest" imagePullPolicy: Always resources: limits: memory: 64Mi cpu: 100m - name: mackerel-container-agent image: "mackerel/mackerel-container-agent:v0.3.0-plugins-alpha" imagePullPolicy: Always volumeMounts: - name: mackerel-container-agent mountPath: "/etc/mackerel" env: - name: MACKEREL_APIKEY valueFrom: secretKeyRef: name: mackerel-container-agent key: apikey - name: MACKEREL_CONTAINER_PLATFORM value: "eks_fargate" - name: MACKEREL_KUBERNETES_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: MACKEREL_KUBERNETES_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: MACKEREL_KUBERNETES_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: MACKEREL_ROLES value: "eks-fargate:mackerel-container-agent" - name: MACKEREL_AGENT_CONFIG value: "/etc/mackerel/mackerel-container-agent.yaml" resources: limits: memory: 64Mi cpu: 100m volumes: - name: mackerel-container-agent configMap: name: mackerel-container-agent
利用に関する注意事項
- アルファ版としての提供となります。予告なく仕様を変更する場合があります。
- 従来のKubernetes同様、1つのPodに対して1マイクロホストがMackerelに登録されます。有料プランの場合は課金が発生しますのでご注意ください。詳しくはFAQ・ホスト数の計算方法についてをご覧ください。