diff --git a/docs/EKS-cni-support.md b/docs/EKS-cni-support.md index b75b749b..e41f38f8 100644 --- a/docs/EKS-cni-support.md +++ b/docs/EKS-cni-support.md @@ -5,14 +5,60 @@ AWS EKS uses [CNI](https://github.com/aws/amazon-vpc-cni-k8s) networking plugin One fatal issue that can occur is that you run out of IP addresses in your eks cluster. (Generally happens due to error configs where pods keep scheduling). You can monitor the `awscni` using kube-promethus with : -``` -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + - (import 'kube-prometheus/kube-prometheus-aws-eks-cni.libsonnet') + - { - _config+:: { - # ... config here - } - }; +[embedmd]:# (../examples/eks-cni-example.jsonnet) +```jsonnet +local kp = (import 'kube-prometheus/kube-prometheus-eks.libsonnet') + { + local service = kp.core.v1.service, + local servicePort = kp.core.v1.service.mixin.spec.portsType, + _config+:: { + namespace: 'monitoring', + }, + prometheus+: { + AwsEksCniMetricService: + service.new('aws-node', { 'k8s-app' : 'aws-node' } , servicePort.newNamed('cni-metrics-port', 61678, 61678)) + + service.mixin.metadata.withNamespace('kube-system') + + service.mixin.metadata.withLabels({ 'k8s-app': 'aws-node' }) + + service.mixin.spec.withClusterIp('None'), + serviceMonitorAwsEksCNI: + { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'ServiceMonitor', + metadata: { + name: 'awsekscni', + namespace: kp.namespace, + labels: { + 'k8s-app': 'eks-cni', + }, + }, + spec: { + jobLabel: 'k8s-app', + selector: { + matchLabels: { + 'k8s-app': 'aws-node', + }, + }, + namespaceSelector: { + matchNames: [ + 'kube-system', + ], + }, + endpoints: [ + { + port: 'cni-metrics-port', + interval: '30s', + path: '/metrics', + }, + ], + }, + }, + }, +}; + +{ ['00namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } + +{ ['0prometheus-operator-' + name]: kp.prometheusOperator[name] for name in std.objectFields(kp.prometheusOperator) } + +{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } + +{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } + +{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } ``` After you have the required yaml file please run diff --git a/examples/eks-cni-example.jsonnet b/examples/eks-cni-example.jsonnet new file mode 100644 index 00000000..62c9170c --- /dev/null +++ b/examples/eks-cni-example.jsonnet @@ -0,0 +1,55 @@ +local kp = (import 'kube-prometheus/kube-prometheus-eks.libsonnet') + { + local service = kp.core.v1.service, + local servicePort = kp.core.v1.service.mixin.spec.portsType, + _config+:: { + namespace: 'monitoring', + }, + prometheus+: { + AwsEksCniMetricService: + service.new('aws-node', { 'k8s-app' : 'aws-node' } , servicePort.newNamed('cni-metrics-port', 61678, 61678)) + + service.mixin.metadata.withNamespace('kube-system') + + service.mixin.metadata.withLabels({ 'k8s-app': 'aws-node' }) + + service.mixin.spec.withClusterIp('None'), + serviceMonitorAwsEksCNI: + { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'ServiceMonitor', + metadata: { + name: 'awsekscni', + namespace: kp.namespace, + labels: { + 'k8s-app': 'eks-cni', + }, + }, + spec: { + jobLabel: 'k8s-app', + selector: { + matchLabels: { + 'k8s-app': 'aws-node', + }, + }, + namespaceSelector: { + matchNames: [ + 'kube-system', + ], + }, + endpoints: [ + { + port: 'cni-metrics-port', + interval: '30s', + path: '/metrics', + }, + ], + }, + }, + }, +}; + +{ ['00namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } + +{ ['0prometheus-operator-' + name]: kp.prometheusOperator[name] for name in std.objectFields(kp.prometheusOperator) } + +{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } + +{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } + +{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } + +{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } + +{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } + +{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } diff --git a/jsonnet/kube-prometheus/kube-prometheus-aws-eks-cni.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-aws-eks-cni.libsonnet deleted file mode 100644 index aa749534..00000000 --- a/jsonnet/kube-prometheus/kube-prometheus-aws-eks-cni.libsonnet +++ /dev/null @@ -1,45 +0,0 @@ -local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet'; -local service = k.core.v1.service; -local servicePort = k.core.v1.service.mixin.spec.portsType; - -{ - prometheus+: { - AwsEksCniMetricService: - service.new('aws-node', { 'k8s-app' : 'aws-node' } , servicePort.newNamed('cni-metrics-port', 61678, 61678)) + - service.mixin.metadata.withNamespace('kube-system') + - service.mixin.metadata.withLabels({ 'k8s-app': 'aws-node' }) + - service.mixin.spec.withClusterIp('None'), - serviceMonitorAwsEksCNI: - { - apiVersion: 'monitoring.coreos.com/v1', - kind: 'ServiceMonitor', - metadata: { - name: 'awsekscni', - namespace: 'monitoring', - labels: { - 'k8s-app': 'eks-cni', - }, - }, - spec: { - jobLabel: 'k8s-app', - selector: { - matchLabels: { - 'k8s-app': 'aws-node', - }, - }, - namespaceSelector: { - matchNames: [ - 'kube-system', - ], - }, - endpoints: [ - { - port: 'cni-metrics-port', - interval: '30s', - path: '/metrics', - }, - ], - }, - }, - }, -}