在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 上上传和部署?