GCP Kubernetes工作负载“没有最低可用性”

时间:2018-11-23 19:34:22

标签: docker kubernetes google-cloud-platform google-kubernetes-engine bitcoind

背景:我正在尝试在Google Cloud Platform上建立一个Bitcoin Core regtest吊舱。我从https://gist.github.com/zquestz/0007d1ede543478d44556280fdf238c9借来了一些代码,对其进行了编辑,以便代替使用Bitcoin ABC(不同的客户端实现),而使用Bitcoin Core,并将RPC用户名和密码都更改为“ test”。我还为docker-entrypoint.sh脚本添加了一些命令参数,以转发到我正在运行的节点的守护程序bitcoind。尝试部署以下三个YAML文件时,“工作量”中的仪表板显示比特币的可用性最低。确保Pod正确部署很重要,因此我可以将RPC命令发送到负载均衡器。以下附件是我正在使用的YAML文件。我对Kubernetes不太熟悉,并且我正在做一个有关可伸缩性的研究项目,该项目需要针对此pod运行RPC命令。询问相关的日志,我将在单独的pastebins中提供它们。现在,我仍在集群上运行三台计算机,因为我仍在进行设置。该区域为us-east1-d,机器类型为n1-standard-2。

问题:给出以下这些文件,是什么导致GCP Kubernetes Engine响应“没有最低可用性”,又该如何解决?


bitcoin-deployment.sh

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  namespace: default
  labels:
    service: bitcoin
  name: bitcoin
spec:
  strategy:
    type: Recreate
  replicas: 1
  template:
    metadata:
      labels:
        service: bitcoin
    spec:
      containers:
      - env:
        - name: BITCOIN_RPC_USER
          valueFrom:
            secretKeyRef:
              name: test
              key: test
        - name: BITCOIN_RPC_PASSWORD
          valueFrom:
            secretKeyRef:
              name: test
              key: test
        image: ruimarinho/bitcoin-core:0.17.0
        name: bitcoin
        ports:
        - containerPort: 18443
          protocol: TCP
        volumeMounts:
          - mountPath: /data
            name: bitcoin-data
        resources:
          requests:
            memory: "1.5Gi"
        command: ["./entrypoint.sh"]
        args: ["-server", "-daemon", "-regtest", "-rpcbind=127.0.0.1", "-rpcallowip=0.0.0.0/0", "-rpcport=18443", "-rpcuser=test", "-rpcpassport=test"]
      restartPolicy: Always
      volumes:
        - name: bitcoin-data
          gcePersistentDisk:
            pdName: disk-bitcoincore-1
            fsType: ext4

bitcoin-secrets.yml

apiVersion: v1
kind: Secret
metadata:
  name: bitcoin
type: Opaque
data:
  rpcuser: dGVzdAo=
  rpcpass: dGVzdAo=

bitcoin-srv.yml

apiVersion: v1
kind: Service
metadata:
  name: bitcoin
  namespace: default
spec:
  ports:
    - port: 18443
      targetPort: 18443
  selector:
    service: bitcoin
  type: LoadBalancer
  externalTrafficPolicy: Local

4 个答案:

答案 0 :(得分:0)

我已经多次遇到这个问题。我使用的解决方案:

  1. 等等。 Google Cloud在您试图启动的区域/区域中没有足够的可用资源。在某些情况下,这需要一个小时到一整天。
  2. 选择其他地区/区域。

一个例子是本月初。我无法在us-west1-a中启动新资源。我认为刚刚切换到us-east4-c。一切都开始了。

我真的不知道为什么这会在Google的掩盖下发生。在过去的三个月中,我亲自经历了三次此问题,并且在StackOverflow上也多次遇到此问题。真正的答案可能很简单,那就是Google Cloud的增长确实比其基础架构快。对于Google来说,这是一件好事,因为我知道他们正在投资用于云的主要新资源。就个人而言,我真的很喜欢使用他们的云。

答案 1 :(得分:0)

您提到的错误消息不是直接指向缺货;而是集群中更多的资源不可用。您可以在将另一个节点添加到集群等之后再试一次。此外,此troubleshooting guide建议您的节点是否有足够的资源,但是仍然没有最低可用性消息,请检查节点是否具有SchedulingDisabled或Cordoned状态:在这种情况下,他们不接受新的广告连播。

答案 2 :(得分:0)

失败的原因可能很多:

  1. 资源不足
  2. 生动性探针失败
  3. 准备就绪探针失败

答案 3 :(得分:0)

我在GKE中遇到此错误。 原因是pod由于名称不匹配而无法找到configmap。因此,请确保Pod可以发现所有资源。