如何为 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 集群,则更改 maxSizeminSize 为节点大小:

$ 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_REGIONGROUP_NAME,并且可能要更改 MIN_NODESMAX_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 做集群自动扩缩器?的主要内容,如果未能解决你的问题,请参考以下文章

在AWS上部署kubernetes

AWS 上的 Kops 集群超时

如何为 ELB 实例安装外部 SSL?

如何为 AutoScale 实例使用 AWS 负载均衡器代理协议?

使用 grafana 访问远程 kubernetes 集群

遇到问题--k8s--kops--新增node无法加入k8s