Можно ли создать шаблон Cloudfromation для развертывания в AWS EKS?

Я имею в виду, что у меня есть приложение, которое уже докеризовано, могу ли я предоставить шаблон облачной информации для его развертывания в кластере EKS моего клиента?

4 ответа

Я использую Cloudformation в течение некоторого времени, однако никогда не использовал его для развертывания артефактов Kubernetes (и до сих пор не слышал ни о ком другом). Я думаю, что есть способ сделать это (см. Блог AWS), но даже это решение, похоже, основано на Helm.

Я определенно рекомендую использовать диаграммы Helm для вашего варианта использования. Диаграммы Helm просты и удобны в использовании, особенно если вы уже знаете объекты Kubernetes, которые хотите развернуть.

Вы можете использовать расширения AWS Quick start для развертывания полезной нагрузки в EKS:

-AWSQS::Kubernetes::Ресурс

-AWSQS::Kubernetes::Helm

Прежде чем вы сможете использовать новые типы, активируйте их в вспомогательном шаблоне.

      EKSHelmExtension:
  Type: AWS::CloudFormation::TypeActivation
  Properties: 
    AutoUpdate: false
    ExecutionRoleArn: !GetAtt DeployClusterRole.Arn
    PublicTypeArn: !Sub "arn:aws:cloudformation:${AWS::Region}::type/resource/408988dff9e863704bcc72e7e13f8d645cee8311/AWSQS-Kubernetes-Helm"

EKSResourceExtension:
  Type: AWS::CloudFormation::TypeActivation
  Properties: 
    AutoUpdate: false
    ExecutionRoleArn: !GetAtt DeployClusterRole.Arn
    PublicTypeArn: !Sub "arn:aws:cloudformation:${AWS::Region}::type/resource/408988dff9e863704bcc72e7e13f8d645cee8311/AWSQS-Kubernetes-Resource"

Затем в основном шаблоне используйте новые типы следующим образом:

      Resources:
 ExampleCm:
   Type: "AWSQS::Kubernetes::Resource"
   Properties:
     ClusterName: my-eks-cluster-name
     Namespace: default
     Manifest: | 
       apiVersion: v1
       kind: ConfigMap
       metadata:
         name: example-cm
       data:
         example_key: example_value

Шлем:

      Resources:
  KubeStateMetrics:
    Type: "AWSQS::Kubernetes::Helm"
    Properties:
      ClusterID: my-cluster-name
      Name: kube-state-metrics
      Namespace: kube-state-metrics
      Repository: https://prometheus-community.github.io/helm-charts
      Chart: prometheus-community/kube-state-metrics
      ValueYaml: |
        prometheus:
          monitor:
            enabled: true

Вы можете использовать cdk8s.io. Вот несколько примеров: https://github.com/awslabs/cdk8s/tree/master/examples

Разверните кластер Amazon EKS с помощью Краткого руководства по модульной и масштабируемой архитектуре Amazon EKS. После развертывания кластера Amazon EKS на вкладке "Выходы" обратите внимание на следующие выходы.

  • HelmLambdaArn
  • KubeClusterName
  • KubeConfigPath
  • KubeGetLambdaArn

Приведенный ниже шаблон устанавливает диаграмму WordPress Helm так же, как если бы вы вошли в кластер Kubernetes и выполнили следующую команду.

helm install стабильный / wordpress

В следующем разделе шаблона показано, как Helm используется для развертывания WordPress. Он также создает имя хоста балансировщика нагрузки, чтобы вы могли получить доступ к сайту WordPress.

Resources:
  HelmExample:
    Type: "Custom::Helm"
    Version: '1.0'
    Description: 'This deploys the Helm Chart to deploy wordpress in to the EKS Cluster.'
    Properties:
      ServiceToken: !Ref HelmLambdaArn
      KubeConfigPath: !Ref KubeConfigPath
      KubeConfigKmsContext: !Ref KubeConfigKmsContext
      KubeClusterName: !Ref KubeClusterName
      Namespace: !Ref Namespace
      Chart: stable/wordpress
      Name: !Ref Name
      Values:
        wordpressUsername: !Ref wordpressUsername
        wordpressPassword: !Ref wordpressPassword
  WPElbHostName:
    DependsOn: HelmExample
    Type: "Custom::KubeGet"
    Version: '1.0'
    Properties:
     ServiceToken: !Ref KubeGetLambdaArn
     KubeConfigPath: !Ref KubeConfigPath
     KubeConfigKmsContext: !Ref KubeConfigKmsContext
     Namespace: !Ref Namespace
     Name: !Sub 'service/${Name}-wordpress'
     JsonPath: '{.status.loadBalancer.ingress[0].hostname}'

Измените диаграмму управления, чтобы она соответствовала вашему приложению, и измените шаблон облачной информации со значениями, полученными ранее из выходных данных. Вот параметры, которые вам нужно будет указать при развертывании шаблона облачной информации:

  • HelmLambdaArn
  • KubeClusterName
  • KubeConfigPath
  • KubeGetLambdaArn
  • Пространство имен
  • название
Другие вопросы по тегам