【问题标题】:OpenShift 3 Origins Persistent Volume IssueOpenShift 3 Origins 持久卷问题
【发布时间】:2016-05-10 00:30:21
【问题描述】:

在尝试使用持久卷时,我们的 openshift aws 部署存在问题。

这些是尝试部署 mysql-persistent 实例时出现的一些错误。

-无法为 pod "mysql-4-uizxn_persistent-test" 挂载卷:云提供商不支持卷 - 同步 pod 时出错,跳过:云提供商不支持卷

我们在每个节点 node-config.yaml 上添加了以下内容

kubeletArguments:
  cloud-provider:
    - "aws"
  cloud-config:
    - "/etc/aws/aws.conf"

并将以下内容添加到我们的 master-config.yaml

kubernetesMasterConfig:
  apiServerArguments:
    cloud-provider:
      - "aws"
    cloud-config:
      - "/etc/aws/aws.conf"
  controllerArguments:
    cloud-provider:
      - "aws"
    cloud-config:
      - "/etc/aws/aws.conf"

不确定我们是否只是遗漏了什么,或者是否存在已知问题/解决方法。

还有一个问题是 openshift 或 kubernetes 如何知道配置文件已更改?

还只是为了给您一些背景信息,我们使用 openshift-ansible 来部署我们的环境。

【问题讨论】:

  • 看起来我在重新启动节点或主节点时收到此错误 [start_node.go:76] 无法初始化云提供商“aws”:错误列出 AWS 实例:NoCredentialProviders:没有有效的提供商链

标签: kubernetes openshift-origin


【解决方案1】:

文档说明导出环境变量的方式有点不准确。它们需要添加到 systemd 单元文件引用的环境中,或者需要授予节点适当的 IAM 权限。

要在环境中为节点配置凭据,请将以下内容添加到 /etc/sysconfig/origin-node(假设 Origin 1.1):

AWS_ACCESS_KEY_ID=<key id>
AWS_SECRET_ACCESS_KEY=<secret key>

或者,可以为节点分配具有适当权限的 IAM 角色。以下 cloudformation 资源 sn-p 为节点创建具有适当权限的角色:

"NodeIAMRole": {
  "Type": "AWS::IAM::Role",
  "Properties": {
    "AssumeRolePolicyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": { "Service": [ "ec2.amazonaws.com" ] },
          "Action": [ "sts:AssumeRole" ]
        }
      ]
    },
    "Policies": [
      {
        "PolicyName": "demo-node-1",
        "PolicyDocument": {
          "Version" : "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": "ec2:Describe*",
              "Resource": "*"
            }
          ]
        }
      },
      {
        "PolicyName": "demo-node-2",
        "PolicyDocument": {
          "Version" : "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": "ec2:AttachVolume",
              "Resource": "*"
            }
          ]
        }
      },
      {
        "PolicyName": "demo-node-3",
        "PolicyDocument": {
          "Version" : "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": "ec2:DetachVolume",
              "Resource": "*"
            }
          ]
        }
      }
    ]
  }
}

【讨论】:

    【解决方案2】:

    OpenShift 的 AWS 提供商似乎无法与 AWS API 通信。

    根据https://docs.openshift.org/latest/install_config/configuring_aws.html,您应该使用您的 AWS 凭证导出这些变量:

    export AWS_ACCESS_KEY_ID=<key id> export AWS_SECRET_ACCESS_KEY=<secret key>

    AWS 文档 here 中介绍了 AWS 凭证的创建

    【讨论】:

      【解决方案3】:

      您是否在 IAM 控制台的管理员组中设置和配置了您的用户?已经有一段时间了,但我想我在 AWS 上试验 OSE 时遇到了同样的问题,最终解决了这个问题。

      https://console.aws.amazon.com/iam/home#home

      我将我的用户添加到管理员组(不记得是否必须先创建该组,然后将我的用户添加到其中)。然后我附上了两个政策:

         EC2FullAccess and AdministratorAccess
      

      另外,请确保导出您的密钥对并重新启动主节点服务:

          export AWS_ACCESS_KEY_ID=<key id>  
          export AWS_SECRET_ACCESS_KEY=<secret key>  
      

      【讨论】:

      • 我确保导出了我的 aws 密钥,并且还附加了 PowerUser 策略。也许该政策行不通。
      【解决方案4】:

      @stran58

      如果您如上所述导出 AWS 凭证,通过 systemctl 启动主服务并收到该错误,那么尝试像这样设置 AWS 凭证怎么样:

      systemctl set-environment AWS_SECRET_ACCESS_KEY=xxx
      systemctl set-environment AWS_ACCESS_KEY_ID=xxx

      希望对您有所帮助。

      【讨论】:

      • 如果这不是答案,请将其添加为评论
      猜你喜欢
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多