云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

域名注册_设置服务器_试用

小七 141 0

EKS星团地形形成

[这个博客将极大地帮助EKS集群管理员解决在建立集群时遇到的一些问题,因为他们已经拥有了他们希望集群交互的AWS资源。以及那些正在为安装后自动化(或工作流)而挣扎的人,这些自动化(或工作流)需要以受控的方式构建到他们的Terraform工作流中。]注:"Terraform"在本文档中将同时用作名词(Terraform,大写T)和动词(Terraform,small T)。当我们开始为我们的旗舰产品Freshdesk向Kubernetes进军的那一刻,我们最优先考虑的一件事就是自动化那些可以从一开始就自动化的东西。显然,Terraform给了我们自动化基础设施的能力。因此,要在Kubernetes上运行任何应用程序,我们需要一个Kubernetes集群,我们选择使用EKS(AWS弹性Kubernetes服务),因为它为我们提供了一个受管理的控制平面。作为Kubernetes的新手意味着我们需要使用诸如实例类型、安全组、IAM角色、引导脚本、子网、AMI等的更改进行迭代,并且为了更快地做到这一点,我们需要使用Terraform将其自动化。在我们继续之前,有几件事需要知道:Freshdesk是一个大型产品,我们无法将锁、库存和桶从AWS OpsWorks上运行的现有基础设施转移到Kubernetes。所以我们采取了一种更交错的方式来移动,因此我们知道在某个时刻我们将同时运行OpsWorks和Kubernetes的工作负载。这导致我们对Terraform模板进行建模,以重用一些已经创建的资源,如VPC、IAM角色等。作为EKS(或Kubernetes)的新手,我们想了解Terraform提供的资源及其属性,以创建EKS集群。这使得我们首先直接使用Terraform提供的EKS特定资源,然后将它们分解成模块(或使用第三方模块)。因此,下面的章节详细描述了实现这一目标的途径。一开始我们开始构建EKS集群设置,目的是让集群运行起来,并使用自管理的自动调整节点组、安全组和角色来满足我们的需要。因此,EKS Terraform模板的1.0版本包含了所有内容。下面是第一个Terraform模板的注释。注意我们是如何把所有的东西都塞进一个大的主.tf文件。当我们刚开始工作时,我们必须:使用我们已经拥有的专有网络使用前缀创建子网没有公共访问的EKS集群跨越多个子网和多个az的自动调整组为创建专用链接创建NLB定期检查API服务器上的任何IP更改并更新NLB的目标组的lambda为了使Kubernetes集群能够进一步用于我们的目的,我们必须利用这个模板的输出,并对其进行进一步的工作。这是它是如何淘出来的。集群自动标度器我们需要启动Cluster Autoscaler组件,否则我们将不得不手动扩展。我们从一个模板文件(Cluster)创建了Cluster Autoscaler YAML_自动缩放器.yml.tpl)使用Terraform的模板文件数据源填充占位符,如下所示:数据"模板文件""群集自动缩放"{template="${file"("群集_自动缩放器.yml.tpl")}"变量={工作节点最小大小="${变量节点最小大小}"工作节点最大大小="${变量节点最大大小}"worker_node_asg_name="${aws_自动缩放_group.fd_eks_nodes_asg组.name}"aws_地区="${可变区域}"}}查看原始01_集群_自动缩放器.tf由GitHub托管然后使用该数据源创建实际的集群_自动缩放器.yml文件。资源"本地文件""群集自动缩放器"{filename="群集_自动缩放器.yml"内容="${data.template_文件.群集_自动缩放渲染}"}查看原始02_群集自动缩放器_本地.tf由GitHub托管安装程序脚本我们的工作状态有一些需要我们去创造的。创建集群后需要执行以下步骤:禁用SNAT;添加Prometheus注释以获取AWS CNI度量。安装脚本实际上还不止这些:它还将terraform(计划和应用),并为kubernetescli(kubectl)访问设置环境。#!/垃圾桶/垃圾桶#要求#从它所在的目录运行它#编辑并填充所需的值地形.tfvarsTFPWD=$(pwd)函数print\u log(){echo-e"$(日期+'[%F%T%Z]')$*"}函数run_terraform(){土状地形图#下面的命令将要求您确认地形应用}函数设置_kubectl(){推送$TFPWDmkdir-p$HOME/.kube地形输出kubeconfig>$HOME/.kube/config#下载kubectlkubectl_url=$(地形输出kubectl_url)curl-o kubectl${kubectl\u url}chmod+x库贝克特#设置主纸盒mkdir-p$HOME/binmv kubectl$家/银行/库贝克特#设置aws iam验证器aws_iam_authenticator_url=$(地形输出aws_iam_authenticator_url)curl-o aws iam authenticator${aws\uiam_authenticator_url}chmod+x aws iam验证器mv aws iam authenticator$主页/bin/aws iam authenticator#设置路径echo'export PATH=$HOME/bin:$PATH'>>~/.bashrc来源~/.bashrc#运行kubectl测试命令kubectl获取svc邻苯二胺}函数设置节点(){推送$TFPWD#再次使用aws auth config map的terraform输出terraform输出config_map_aws_auth>$HOME/aws auth-厘米山药#使用kubectl涂抹yamlkubectl应用-f$HOME/aws认证-厘米山药超时10 kubectl get nodes--监视邻苯二胺}函数设置\u roles(){推送$TFPWDterraform输出集群_roles_yml>cluster_角色.ymlkubectl apply-f集群_角色.yml邻苯二胺}函数disable\u snat(){cd$TFPWD#使用kubectl应用补丁,这是为了在工作节点上禁用snatkubectl补丁守护进程集aws node-n kube system-p'{"spec":{"template":{"spec":{"containers":[{"name":"aws node","env":"[{"name":"aws_VPC_K8S_CNI_EXTERNALSNAT","value":"true"}]}}}}}res=美元?如果[[$res>0]];则echo"AWS节点守护程序未修补"其他的echo"AWS节点已修补-禁用SNAT"金融机构超时10 kubectl get nodes--监视}函数add_prometheus_annotation_eks_cni(){cd$TFPWDkubectl—命名空间kube系统修补程序守护程序aws node—修补程序{"spec":{"template":{"metadata":{"annotations":{"普罗米修斯.io/刮擦":"真","普罗米修斯.io/路径":"/metrics","普罗米修斯.io/端口":"61678"}}}}}"res=美元?如果[[$res>0]];则echo"没有为普罗米修斯添加注释"其他的echo"AWS节点已修补-为普罗米修斯添加注释"金融机构}打印日志"运行地形"run_地形打印日志"设置kubectl"设置\u kubectl打印日志"设置节点"