在AWS上部署kubernetes

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在AWS上部署kubernetes相关的知识,希望对你有一定的参考价值。

参考技术A 主要参考文献:
https://github.com/kubernetes/kops/blob/master/docs/aws.md
https://kubernetes.io/docs/setup/custom-cloud/kops/
https://blog.csdn.net/cloudvtech/article/details/80539086
https://blog.csdn.net/qq_36348557/article/details/79795288
https://my.oschina.net/geekidentity/blog/1635540
https://jackiechen.org/2018/04/23/install-kubernetes-on-aws-with-kops/

说明:
在AWS上部署kuberntes 可以使用下面的两个工具?

两种方式对比:

服务器选择?

本文使用kops命令进行安装部署
官网文档:
https://kubernetes.io/docs/setup/custom-cloud/kops/

登陆时,可能是以centos这个用户进行登录,如何切换到root用户呢?

注意,我这里是将kubetl, kops命令部署到了/usr/local/bin目录下, 需要添加到环境变量PATH里;
根据自己的实际情况,更新export PATH的值

我们需要一个AWS账号 用于运行kops, 该用户需要具有以下的权限:

使用aws cli 来创建用户组、用户 以及 access key

请记录下这里生成的SecretAccessKey 和 AccessKeyID, 需要配置到客户端,
并且手动导入环境变量

Kops把K8s集群的配置存储在AWS的S3中,每一个集群的配置对应于一个S3文件,
所有我们创建一个S3的bucket用于存储集群的配置

下面开始创建kubernetes 集群

注意根据自己的需求,重新设置环境变量NAME的值

当前在使用 us-west-2的region可用的az是这三个

因此,从上面的几个选项中,选择一个可用的zones即可
我这里选择us-west-2a

注意

更新前:

在云上的K8s集群可以很方便的扩展,如果你的集群的计算资源都用的差不多了,你希望扩展你的集群的时候,有两种办法。

把maxSize和minSize都设置成需要的值,然后更新

使用rolling-update可以保证在更新的时候业务不会中断。

有人可能会问,我希望不用的时候能把集群暂停,这样就不会使用很多的AWS系统资源了,这要怎么办。
因为Auto Scaling Group的存在,如果直接stop对应的EC2实例,Auto Scaling Group会创建新的实例的取代,所以这个方法是不管用的。
其实办法很简单,只要把对应的Auto Scaling Group的数值设置为0就好了

同样可以在AWS中直接修改Master和Node所在的Auto Scaling Group,或者在Kops中修改

注意在Kops中修改,需要调用如下的命令来获得Master所在group的名字

在集群不需要的时候,可以用kops删除集群:

https://amazonaws-china.com/cn/iam/details/manage-permissions/

Kops has support for configuring authentication systems. This should not be used with kubernetes versions
before 1.8.5 because of a serious bug with apimachinery #55022 .

If you want to experiment with kopeio authentication, you can use
--authentication kopeio . However please be aware that kopeio authentication
has not yet been formally released, and thus there is not a lot of upstream
documentation.

Alternatively, you can add this block to your cluster:

For example:

If you want to turn on AWS IAM Authenticator, you can add this block
to your cluster running Kubernetes 1.10 or newer:

For example:

Once the cluster is up, or after you've performed a rolling update to an existing cluster with kops rolling-update cluster $CLUSTER_NAME --instance-group-roles=Master --force --yes , you will need to create the AWS IAM authenticator
config as a config map. (This can also be done when boostrapping a cluster using addons)
For more details on AWS IAM authenticator please visit kubernetes-sigs/aws-iam-authenticator

Example config:

Kubernetes AWS EKS 负载均衡器未配置

【中文标题】Kubernetes AWS EKS 负载均衡器未配置【英文标题】:Kubernetes AWS EKS load balancer not provisioning 【发布时间】:2021-03-28 22:58:42 【问题描述】:

了解 Kubernetes AWS EKS 的世界,很高兴获得支持。

我正在尝试部署节点应用程序。我在 EKS 上的 IAM 角色上附加了正确的 IAM 策略,我还在私有子网和公共子网上设置了正确的标签。

我的 Kubernetes yml 看起来像这样。

kind: Deployment
metadata:
  name: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
        - name: test
          image: test:latest
          ports:
            - containerPort: 3000
          imagePullPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
  name: test
spec:
  type: LoadBalancer
  selector:
    app: test
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

服务启动,但外部 ip 只是一直说挂起,并且没有配置负载均衡器。

谢谢

【问题讨论】:

【参考方案1】:

要解决此问题,您可以在 AWS EKS 集群控制平面日志下找到相关的故障日志。请参阅 AWS 的 this 文档,其中包含查看 AWS EKS 集群控制平面日志的步骤,以及启用控制平面日志的步骤。

如果您有可用的 AWS EKS 集群控制平面日志,则可以在 CloudWatch Logs Insights 中执行以下查询。有关执行 AWS CloudWatch Logs Insights 查询的信息,请参阅来自 AWS 的 this 文档。查询完成后,查看responseObject.reason字段的值,也可以展开消息查看详情。

fields @timestamp, @message, requestObject.kind, requestObject.metadata.name,requestObject.spec.type,responseObject.status,responseObject.message,responseObject.reason,requestObject.spec.selector.app
| filter requestObject.spec.type='LoadBalancer' 
| sort @timestamp desc

【讨论】:

【参考方案2】:

如果您使用的是 Mnikube

minikube tunnel

这会对你有所帮助。

此命令可以公开 LoadBalancer 类型的服务。

这是参考https://minikube.sigs.k8s.io/docs/commands/tunnel/。

【讨论】:

这个问题与 minikube 无关,甚至与本地开发无关。不是一个相关的答案。

以上是关于在AWS上部署kubernetes的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS 上部署 Django Rest Framework 和 React

使用 AWS Elastic Beanstalk 在 AWS 上部署 Spring Boot 应用程序

如何在中国区域的AWS beanstalk实例上部署美国区域的AWS beanstalk实例

如何使用 aws cli 在 Elastic Beanstalk 上上传和部署?

如何在 AWS elasticbeanstalk 上部署 symfony 3 项目

在AWS上部署kubernetes