Skip to content

Commit

Permalink
cherry-pick #2251, #2226, #2187, #2201, #1794 (#2252)
Browse files Browse the repository at this point in the history
  • Loading branch information
jdn5126 authored Feb 7, 2023
1 parent d5b3e78 commit 2471076
Show file tree
Hide file tree
Showing 11 changed files with 142 additions and 253 deletions.
11 changes: 7 additions & 4 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
name: VPC CNI Release

on: [push, workflow_dispatch]
on:
release:
types: [published]

permissions:
contents: read
Expand All @@ -11,17 +13,18 @@ env:

jobs:
release:
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
- name: Checkout latest commit in the PR
uses: actions/checkout@v3
with:
ref: "refs/tags/{{ github.event.release.tag_name }}"
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: "1.19"
- name: Attach release artifacts
run: make release
- name: Generate CNI YAML
run: make generate-cni-yaml
- name: Create eks-charts PR
run: make ekscharts-sync-release
- name: Create sample manifests PR
Expand Down
15 changes: 7 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ METRICS_IMAGE = amazon/cni-metrics-helper
METRICS_IMAGE_NAME = $(METRICS_IMAGE)$(IMAGE_ARCH_SUFFIX):$(VERSION)
METRICS_IMAGE_DIST = $(DESTDIR)/$(subst /,_,$(METRICS_IMAGE_NAME)).tar.gz
REPO_FULL_NAME=aws/amazon-vpc-cni-k8s
HELM_CHART_NAME ?= "aws-vpc-cni"
HELM_CHART_NAMES ?= "aws-vpc-cni" "cni-metrics-helper"
# TEST_IMAGE is the testing environment container image.
TEST_IMAGE = amazon-k8s-cni-test
TEST_IMAGE_NAME = $(TEST_IMAGE)$(IMAGE_ARCH_SUFFIX):$(VERSION)
Expand Down Expand Up @@ -341,19 +341,18 @@ generate-limits: ## Generate limit file go code
go run $(VENDOR_OVERRIDE_FLAG) scripts/gen_vpc_ip_limits.go

ekscharts-sync:
${MAKEFILE_PATH}/scripts/sync-to-eks-charts.sh -b ${HELM_CHART_NAME} -r ${REPO_FULL_NAME}
for HELM_CHART_NAME in $(HELM_CHART_NAMES) ; do \
${MAKEFILE_PATH}/scripts/sync-to-eks-charts.sh -b $$HELM_CHART_NAME -r ${REPO_FULL_NAME} ; \
done

ekscharts-sync-release:
${MAKEFILE_PATH}/scripts/sync-to-eks-charts.sh -b ${HELM_CHART_NAME} -r ${REPO_FULL_NAME} -n -y

upload-resources-to-github:
${MAKEFILE_PATH}/scripts/upload-resources-to-github.sh
for HELM_CHART_NAME in $(HELM_CHART_NAMES) ; do \
${MAKEFILE_PATH}/scripts/sync-to-eks-charts.sh -b $$HELM_CHART_NAME -r ${REPO_FULL_NAME} -n -y ; \
done

generate-cni-yaml:
${MAKEFILE_PATH}/scripts/generate-cni-yaml.sh

release: generate-cni-yaml upload-resources-to-github

config-folder-sync:
${MAKEFILE_PATH}/scripts/sync-to-config-folder.sh

Expand Down
1 change: 0 additions & 1 deletion charts/aws-vpc-cni/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,6 @@ WARNING: Substitute YOUR_HELM_RELEASE_NAME_HERE with the name of your helm relea
set -euo pipefail
# don't import the crd. Helm cant manage the lifecycle of it anyway.
for kind in daemonSet clusterRole clusterRoleBinding serviceAccount; do
echo "setting annotations and labels on $kind/aws-node"
kubectl -n kube-system annotate --overwrite $kind aws-node meta.helm.sh/release-name=YOUR_HELM_RELEASE_NAME_HERE
Expand Down
4 changes: 2 additions & 2 deletions charts/aws-vpc-cni/templates/daemonset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ spec:
- mountPath: /host/etc/cni/net.d
name: cni-net-dir
{{- if .Values.cniConfig.enabled }}
# the dockerfile copies the baked in config to this location, lets overwrite it with ours
# the entrypoint.sh script will then copy our config to /host/etc/cni/net.d on boot
# The dockerfile copies the baked in config to this location, so overwrite it with ours.
# The entrypoint process will then copy our config to /host/etc/cni/net.d on boot.
- name: cni-config
mountPath: /app/10-aws.conflist
subPath: 10-aws.conflist
Expand Down
34 changes: 15 additions & 19 deletions charts/cni-metrics-helper/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
apiVersion: v2
name: cni-metrics-helper
description: A Helm chart for Kubernetes

# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.16

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
appVersion: v1.12.2
description: A Helm chart for the AWS VPC CNI Metrics Helper
icon: https://raw.githubusercontent.com/aws/eks-charts/master/docs/logo/aws.png
home: https://github.com/aws/amazon-vpc-cni-k8s
sources:
- https://github.com/aws/amazon-vpc-cni-k8s
keywords:
- eks
- cni
- networking
- vpc
maintainers:
- name: Jayanth Varavani
url: https://github.com/jayanthvn
email: [email protected]
engine: gotpl
81 changes: 81 additions & 0 deletions charts/cni-metrics-helper/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# CNI METRICS HELPER

This chart provides a Kubernetes deployment for the Amazon VPC CNI Metrics Helper, which is used to collect metrics for the Amazon VPC CNI plugin for Kubernetes.

## Prerequisites

- Kubernetes 1.11+ running on AWS
- Helm 3.0+

## Installing the Chart

First add the EKS repository to Helm:

```shell
helm repo add eks https://aws.github.io/eks-charts
```

To install the chart with the release name `cni-metrics-helper` and default configuration:

```shell
$ helm install cni-metrics-helper --namespace kube-system eks/cni-metrics-helper
```

To install manually, clone the Amazon VPC CNI for Kubernetes repository to your local machine:

```shell
$ git clone https://github.com/aws/amazon-vpc-cni-k8s.git
```

Use the helm install command to install the chart into your Kubernetes cluster:

```shell
$ helm install cni-metrics-helper --namespace kube-system ./charts/cni-metrics-helper
```

To uninstall:

```shell
$ helm uninstall cni-metrics-helper --namespace kube-system
```

## Configuration

The following table lists the configurable parameters for this chart and their default values.

| Parameter | Description | Default |
|------------------------------|---------------------------------------------------------------|--------------------|
| fullnameOverride | Override the fullname of the chart | cni-metrics-helper |
| image.region | ECR repository region to use. Should match your cluster | us-west-2 |
| image.tag | Image tag | v1.12.2 |
| image.account | ECR repository account number | 602401143452 |
| image.domain | ECR repository domain | amazonaws.com |
| env.USE_CLOUDWATCH | Whether to export CNI metrics to CloudWatch | true |
| env.AWS_CLUSTER_ID | ID of the cluster to use when exporting metrics to CloudWatch | default |
| env.AWS_VPC_K8S_CNI_LOGLEVEL | Log verbosity level (ie. FATAL, ERROR, WARN, INFO, DEBUG) | INFO |
| serviceAccount.name | The name of the ServiceAccount to use | nil |
| serviceAccount.create | Specifies whether a ServiceAccount should be created | true |
| serviceAccount.annotations | Specifies the annotations for ServiceAccount | {} |

Specify each parameter using the `--set key=value[,key=value]` argument to `helm install` or provide a YAML file containing the values for the above parameters:

```shell
$ helm install cni-metrics-handler --namespace kube-system eks/cni-metrics-handler --values values.yaml
```

Manual install:
```shell
$ helm install cni-metrics-helper --namespace kube-system ./charts/cni-metrics-helper --values values.yaml
```

## Resources

| Parameter | Description | Default |
|---------------------------|------------------------------------------------|---------|
| resources | Resources for the pods. | `{}` |

For example, to set a CPU limit of 200m and a memory limit of 256Mi for the cni-metrics-helper pods, you can use the following command:

```shell
$ helm install cni-metrics-helper ./charts/cni-metrics-helper --namespace kube-system --set resources.limits.cpu=200m,resources.limits.memory=256Mi
```
3 changes: 3 additions & 0 deletions charts/cni-metrics-helper/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ image:
env:
USE_CLOUDWATCH: "true"
AWS_CLUSTER_ID: ""
AWS_VPC_K8S_CNI_LOGLEVEL: "INFO"

fullnameOverride: "cni-metrics-helper"

Expand All @@ -24,3 +25,5 @@ serviceAccount:
name:
annotations: {}
# eks.amazonaws.com/role-arn: arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME

resources: {}
41 changes: 6 additions & 35 deletions scripts/generate-cni-yaml.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,18 @@ set -euo pipefail
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"

PLATFORM=$(uname | tr '[:upper:]' '[:lower:]')
HELM_VERSION="3.6.3"
HELM_VERSION="3.11.0"
NAMESPACE="kube-system"

MAKEFILEPATH=$SCRIPTPATH/../Makefile
VERSION=$(make -s -f $MAKEFILEPATH version)
BUILD_DIR=$SCRIPTPATH/../build/cni-rel-yamls/$VERSION

REGIONS_FILE=$SCRIPTPATH/../charts/regions.json
INDV_RESOURCES_DIR=$BUILD_DIR/individual-resources
CNI_TAR_RESOURCES_FILE=$BUILD_DIR/cni_individual-resources.tar
METRICS_TAR_RESOURCES_FILE=$BUILD_DIR/cni_metrics_individual-resources.tar
CNI_RESOURCES_YAML=$BUILD_DIR/aws-k8s-cni
METRICS_RESOURCES_YAML=$BUILD_DIR/cni-metrics-helper

mkdir -p $INDV_RESOURCES_DIR

mkdir -p $BUILD_DIR

USAGE=$(cat << 'EOM'
Usage: generate-cni-yaml [-n <K8s_NAMESPACE>]
Expand Down Expand Up @@ -80,8 +76,8 @@ jq -c '.[]' $REGIONS_FILE | while read i; do
--set image.domain=$ecrDomain \
--namespace $NAMESPACE \
$SCRIPTPATH/../charts/aws-vpc-cni > $NEW_CNI_RESOURCES_YAML
cat $NEW_CNI_RESOURCES_YAML | grep -v 'helm.sh\|app.kubernetes.io/managed-by: Helm' > $BUILD_DIR/helm_annotations_removed.yaml
mv $BUILD_DIR/helm_annotations_removed.yaml $NEW_CNI_RESOURCES_YAML
# Remove 'managed-by: Helm' annotation
sed -i '/helm.sh\|app.kubernetes.io\/managed-by: Helm/d' $NEW_CNI_RESOURCES_YAML

$BUILD_DIR/helm template cni-metrics-helper \
--set image.region=$ecrRegion,\
Expand All @@ -90,37 +86,12 @@ jq -c '.[]' $REGIONS_FILE | while read i; do
--set image.tag=$VERSION,\
--namespace $NAMESPACE \
$SCRIPTPATH/../charts/cni-metrics-helper > $NEW_METRICS_RESOURCES_YAML
cat $NEW_METRICS_RESOURCES_YAML | grep -v 'helm.sh\|app.kubernetes.io/managed-by: Helm' > $BUILD_DIR/helm_annotations_removed.yaml
mv $BUILD_DIR/helm_annotations_removed.yaml $NEW_METRICS_RESOURCES_YAML
# Remove 'managed-by: Helm' annotation
sed -i '/helm.sh\|app.kubernetes.io\/managed-by: Helm/d' $NEW_METRICS_RESOURCES_YAML
done

$BUILD_DIR/helm template --include-crds \
--namespace $NAMESPACE \
--output-dir $INDV_RESOURCES_DIR/ \
$SCRIPTPATH/../charts/aws-vpc-cni/

for i in $INDV_RESOURCES_DIR/aws-vpc-cni/templates/*; do
cat $i | grep -v 'helm.sh\|app.kubernetes.io/managed-by: Helm' > $BUILD_DIR/helm_annotations_removed.yaml
mv $BUILD_DIR/helm_annotations_removed.yaml $i
done

$BUILD_DIR/helm template \
--namespace $NAMESPACE \
--output-dir $INDV_RESOURCES_DIR/ \
$SCRIPTPATH/../charts/cni-metrics-helper/

for i in $INDV_RESOURCES_DIR/cni-metrics-helper/templates/*; do
cat $i | grep -v 'helm.sh\|app.kubernetes.io/managed-by: Helm' > $BUILD_DIR/helm_annotations_removed.yaml
mv $BUILD_DIR/helm_annotations_removed.yaml $i
done


cd $INDV_RESOURCES_DIR/aws-vpc-cni/ && tar cvf $CNI_TAR_RESOURCES_FILE templates/*
cd $INDV_RESOURCES_DIR/cni-metrics-helper/ && tar cvf $METRICS_TAR_RESOURCES_FILE templates/*
cd $SCRIPTPATH

echo "Generated aws-vpc-cni and cni-metrics-helper manifest resources files in:"
echo " - $CNI_RESOURCES_YAML"
echo " - $METRICS_RESOURCES_YAML"
echo " - $CNI_TAR_RESOURCES_FILE"
echo " - $METRICS_TAR_RESOURCES_FILE"
Loading

0 comments on commit 2471076

Please sign in to comment.