Можно ли создать шаблон Cloudfromation для развертывания в AWS EKS?
Я имею в виду, что у меня есть приложение, которое уже докеризовано, могу ли я предоставить шаблон облачной информации для его развертывания в кластере EKS моего клиента?
4 ответа
Я использую Cloudformation в течение некоторого времени, однако никогда не использовал его для развертывания артефактов Kubernetes (и до сих пор не слышал ни о ком другом). Я думаю, что есть способ сделать это (см. Блог AWS), но даже это решение, похоже, основано на Helm.
Я определенно рекомендую использовать диаграммы Helm для вашего варианта использования. Диаграммы Helm просты и удобны в использовании, особенно если вы уже знаете объекты Kubernetes, которые хотите развернуть.
Вы можете использовать расширения AWS Quick start для развертывания полезной нагрузки в EKS:
Прежде чем вы сможете использовать новые типы, активируйте их в вспомогательном шаблоне.
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
- Пространство имен
- название