AWS CodePipeline и развертывание на EKS - PullRequest
0 голосов
/ 14 сентября 2018

Я работаю над AWS CodePipeline для сборки и развертывания контейнеров в кластере EKS.

Похоже, AWS CodePipeline не поддерживает действие по развертыванию EKS «только ECS».Я попытался изучить другие варианты, такие как использование лямбда-функции, и нашел приведенный ниже пример запуска команд kubectl в лямбде

https://github.com/tmuskal/lambda-kubectl

Тем не менее, EKS использует aws-iam-authenticator для генерации токеновдля кубеконфиг.Не уверен, как это вписывается в лямбда-контекст, хотя.

Любые советы по теме будут высоко оценены.

Ответы [ 2 ]

0 голосов
/ 06 августа 2019

AWS не поддерживает действие по развертыванию EKS. Однако этого можно достичь с помощью конвейера кода и сборки кода, чтобы сделать его непрерывным сборкой и развертыванием для кластера EKS. Необходимо настроить некоторые роли и разрешения IAM с точки зрения разрешения codebuild запускать kubectl и развертывать на кластере eks.

  1. Необходимо создать роль, скажем, (kubernetes_deployment), которая имеет право разрешать EKS управлять кластерами от вашего имени.

    • Разрешение, прикрепленное к роли kubernetes_deployment

      AmazonEKSClusterPolicy

      AmazonEKSServicePolicy

      встроенная политика, как показано ниже

      {
        "Version": "2012-10-17",
        "Statement": [
         {
           "Sid": "VisualEditor0",
           "Effect": "Allow",
           "Action": "eks:DescribeCluster",
           "Resource": "*"
         }
       ]
      }
      
  2. Создайте кодовую сборку в вашем aws, обратитесь Обратитесь к этому для buildspec

    • убедитесь, что роль службы, используемая в codebuild, должна иметь sts: предположить разрешение для роли kubernetes_deployment, у которой есть доступ для управления кластером eks

         {
            "Version": "2012-10-17",
            "Statement": [
             {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": "arn:aws:iam:: 
                 <accountno>:role/kubernetes_deployment"
               }
             ]
            }
      
  3. Обновите доверительные отношения для роли kubernetes_deployment, чтобы разрешить использовать роль службы codebuild

     {
       "Version": "2012-10-17",
       "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
              "AWS": "arn:aws:iam::<account>:role/service-role/codebuild-service-role",
               "Service": "eks.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
        }
     ]
    }
    
  4. Сделать роль kubernetes_deployment авторизованной в кластере eks

    - rolearn: arn:aws:iam::<account>:role/kubernetes_deployment
      username: kubernetes_deployment
      groups:
       - system:masters
    
0 голосов
/ 28 октября 2018

Я использую Jenkins POD для развертывания.

Скриптовый скрипт:

pipeline {
  agent {
    kubernetes {
      label 'helm-pod'
      serviceAccount 'jenkins-helm'
      containerTemplate {
        name 'helm'
        image 'wardviaene/helm-s3'
        ttyEnabled true
        command 'cat'
      }
    }
  }
  stages {
    stage('Run helm') {
      steps {
        container('helm') {
            dir('my-app'){
                git url: 'git@github.com:myrepo/my-app.git', branch: 'master', credentialsId: 'CREDENTIAL_ID'
            }
        sh '''
          HELM_BUCKET=helm-repo-dev.my-app.k8s.local
          PACKAGE=myservichart
          NAME_OVERRIDE=my-app
          ENV_OVERRIDE_FILE_PATH=my-project/helm-service-override/app-app.prod.values.yaml
          export AWS_REGION=eu-west-2

          cp -r /home/helm/.helm ~
          helm repo add metaservichart s3://${HELM_BUCKET}/charts
          IS_DEPLOYED=$(helm list |grep -E "^${NAME_OVERRIDE}" |grep DEPLOYED |wc -l| tr -s " ")
          if [ ${IS_DEPLOYED} == 0 ] ; then
            helm install --name ${NAME_OVERRIDE} -f ${VALUE_OVERRIDE_FILE_PATH} metaservichart/${PACKAGE}
          else
            helm upgrade ${NAME_OVERRIDE} -f ${VALUE_OVERRIDE_FILE_PATH} metaservichart/${PACKAGE}
          fi
          echo "deployed!"
        '''
        }
      }
    }
  }
}

CREDENTIAL_ID: добавьте учетные данные github в Jenkins и скопируйте сгенерированный идентификатор.

ENV_OVERRIDE_FILE_PATH: файл свойств среды.

HELM_BUCKET: ведро helm s3

NAME_OVERRIDE: имя, которое будет передано управляющему

...