【问题标题】:AWS CodePipeline and deployingto EKSAWS CodePipeline 和部署到 EKS
【发布时间】:2019-08-06 15:08:38
【问题描述】:

我正在开发 AWS CodePipeline,用于构建容器并将其部署到 EKS 集群。

AWS CodePipeline 似乎不支持对 EKS“仅 ECS”的部署操作。我尝试探索其他选项,例如使用 lambda 函数,我找到了以下在 lambda 中运行 kubectl 命令的示例

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

不过,EKS 使用 aws-iam-authenticator 来为 kubeconfig 生成令牌。不过,不确定这将如何适应 lambda 上下文。

任何关于主题的建议都将受到高度赞赏。

【问题讨论】:

    标签: aws-codepipeline aws-codebuild amazon-eks


    【解决方案1】:

    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 中创建代码构建参考 Refer this for buildspec

      • 确保代码构建中使用的服务角色应该具有 sts:assume 对有权管理 eks 集群的 kubernetes_deployment 角色的权限

           {
              "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
      

    【讨论】:

      【解决方案2】:

      我正在使用 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:在 Jenkins 中添加 github credendtails 并复制生成的 id。

      ENV_OVERRIDE_FILE_PATH:环境特定的属性文件。

      HELM_BUCKET:掌舵 s3 桶

      NAME_OVERRIDE:要传递给 helm 的名称

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-07
        • 1970-01-01
        • 2020-06-18
        • 2016-09-05
        • 2016-09-20
        • 1970-01-01
        • 2020-08-23
        • 2023-03-10
        相关资源
        最近更新 更多