如何为 kops 在 AWS 上安装的 k8s 做集群自动扩缩器?
Posted
技术标签:
【中文标题】如何为 kops 在 AWS 上安装的 k8s 做集群自动扩缩器?【英文标题】:How to do cluster autoscaler for k8s which installed by kops on AWS? 【发布时间】:2018-05-22 16:16:48 【问题描述】:按照本指南在 AWS 上创建集群自动扩缩器: https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler/cloudprovider/aws
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: cluster-autoscaler
namespace: kube-system
labels:
app: cluster-autoscaler
spec:
replicas: 1
selector:
matchLabels:
app: cluster-autoscaler
template:
metadata:
labels:
app: cluster-autoscaler
spec:
containers:
- image: gcr.io/google_containers/cluster-autoscaler:v0.6.0
name: cluster-autoscaler
resources:
limits:
cpu: 100m
memory: 300Mi
requests:
cpu: 100m
memory: 300Mi
command:
- ./cluster-autoscaler
- --v=4
- --stderrthreshold=info
- --cloud-provider=aws
- --skip-nodes-with-local-storage=false
- --nodes=2:4:k8s-worker-asg-1
env:
- name: AWS_REGION
value: us-east-1
volumeMounts:
- name: ssl-certs
mountPath: /etc/ssl/certs/ca-certificates.crt
readOnly: true
imagePullPolicy: "Always"
volumes:
- name: ssl-certs
hostPath:
path: "/etc/ssl/certs/ca-certificates.crt"
我已将 k8s-worker-asg-1
更改为由 kops
创建的当前 ASG 名称。
但是当运行 kubectl apply -f deployment.yaml
并检查 pod kubectl get pods -n=kube-system
时,返回:
NAME READY STATUS RESTARTS AGE
cluster-autoscaler-75ccf5b9c9-lhts8 0/1 CrashLoopBackOff 6 8m
我试图查看它的日志kubectl logs cluster-autoscaler-75ccf5b9c9-lhts8 -n=kube-system
,返回:
failed to open log file "/var/log/pods/8edc3073-dc0b-11e7-a6e5-06361ac15b44/cluster-autoscaler_4.log": open /var/log/pods/8edc3073-dc0b-11e7-a6e5-06361ac15b44/cluster-autoscaler_4.log: no such file or directory
我也尝试过描述吊舱kubectl describe cluster-autoscaler-75ccf5b9c9-lhts8 -n=kube-system
,返回:
the server doesn't have a resource type "cluster-autoscaler-75ccf5b9c9-lhts8"
那么如何调试这个问题呢?会是什么原因?它需要在 AWS 上存储吗?我还没有在 AWS 上创建任何存储。
顺便说一句,我还有一个问题。如果使用 kops
在 AWS 上创建 k8s 集群,则更改 maxSize
、minSize
为节点大小:
$ kops edit ig nodes
> maxSize: 2
> minSize: 2
$ kops update cluster $CLUSTER_FULL_NAME --yes
到目前为止,AWS 上的 Auto Scaling 组已经成为 Min:2
Max:4
。
是否需要再次运行此部署? https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler/cloudprovider/aws
kops 不能同时改变 ASG 和 k8s 集群吗?为什么还要将cluster-autoscaler
设置为kube-system
命名空间?
NAME READY STATUS RESTARTS AGE
cluster-autoscaler-75ccf5b9c9-lhts8 0/1 CrashLoopBackOff 6 8m
【问题讨论】:
在 describe 命令中,您缺少一个“po”。kubectl describe cluster-autoscaler-75ccf5b9c9-lhts8 -n=kube-system
变为 kubectl describe po cluster-autoscaler-75ccf5b9c9-lhts8 -n=kube-system
问题是cert
的名字和系统名字不一样!
【参考方案1】:
我已经从 K8s 存储库中尝试过这个官方解决方案。您还需要添加额外的 IAM 策略以访问 AWS Autoscaling 资源。
然后,修改https://github.com/kubernetes/kops/tree/master/addons/cluster-autoscaler 中的脚本,在您的 K8s 集群上安装 Cluster Autoscaler。请注意,您可能想要更改 AWS_REGION
和 GROUP_NAME
,并且可能要更改 MIN_NODES
和 MAX_NODES
。我为我工作。
spec:
api:
loadBalancer:
type: Public
authorization:
rbac:
additionalPolicies:
node: |
[
"Effect": "Allow",
"Action": [
"autoscaling:DescribeAutoScalingGroups",
"autoscaling:DescribeAutoScalingInstances",
"autoscaling:SetDesiredCapacity",
"autoscaling:TerminateInstanceInAutoScalingGroup"
],
"Resource": ["*"]
]
【讨论】:
以上是关于如何为 kops 在 AWS 上安装的 k8s 做集群自动扩缩器?的主要内容,如果未能解决你的问题,请参考以下文章