我正在尝试在kubernetes上运行一个比特币节点。我的有状态集合如下:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: bitcoin-stateful
namespace: dev
spec:
serviceName: bitcoinrpc-dev-service
replicas: 1
selector:
matchLabels:
app: bitcoin-node
template:
metadata:
labels:
app: bitcoin-node
spec:
containers:
- name: bitcoin-node-mainnet
image: myimage:v0.13.2-addrindex
imagePullPolicy: Always
ports:
- containerPort: 8332
volumeMounts:
- name: bitcoin-chaindata
mountPath: /root/.bitcoin
livenessProbe:
exec:
command:
- bitcoin-cli
- getinfo
initialDelaySeconds: 60 #wait this period after staring fist time
periodSeconds: 15 # polling interval
timeoutSeconds: 15 # wish to receive response within this time period
readinessProbe:
exec:
command:
- bitcoin-cli
- getinfo
initialDelaySeconds: 60 #wait this period after staring fist time
periodSeconds: 15 # polling interval
timeoutSeconds: 15 # wish to receive response within this time period
command: ["/bin/bash"]
args: ["-c","service ntp start && \
bitcoind -printtoconsole -conf=/root/.bitcoin/bitcoin.conf -reindex-chainstate -datadir=/root/.bitcoin/ -daemon=0 -bind=0.0.0.0"]
由于比特币节点不支持任何http get请求,而只能满足发布请求,因此我尝试对bitcoin-cli
和liveness
使用readiness probe
命令
我的服务如下:
kind: Service
apiVersion: v1
metadata:
name: bitcoinrpc-dev-service
namespace: dev
spec:
selector:
app: bitcoin-node
ports:
- name: mainnet
protocol: TCP
port: 80
targetPort: 8332
当我描述豆荚时,它们运行正常,所有运行状况检查似乎都正常。
但是,我还使用具有以下配置的入口控制器:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: dev-ingress
namespace: dev
annotations:
kubernetes.io/ingress.class: "gce"
kubernetes.io/ingress.global-static-ip-name: "dev-ingress"
spec:
rules:
- host: bitcoin.something.net
http:
paths:
- path: /rpc
backend:
serviceName: bitcoinrpc-dev-service
servicePort: 80
L7负载平衡器的运行状况检查似乎失败。这些测试将通过以下方式自动配置。
但是,这些测试与“就绪”探针中配置的测试不同。我尝试删除入口并重新创建,但是它的行为仍然相同。
我有以下问题:
1. Should I modify/delete this health check manually?
2. Even if the health check is failing (wrongly configured), since the containers and ingress are up, does it mean that I should be able to access the service through http?
答案 0 :(得分:0)
缺少的是,您正在以exec命令的形式执行活动性和就绪性探针,因此您需要创建一个包含Exec准备性探针的Pod,以及一个其他包含Exec准备性探针的Pod,Here和Here的描述方法。
另一件事是通过所需的GCE L7负载平衡器控制器接收流量: 至少1个Kubernetes NodePort Service(这是Ingress的端点),因此您的服务配置不正确。因此,您将无法访问该服务。
默认后端(MIG在其中使用它来检查节点的运行状况)中的运行状况检查(图中)表示节点的运行状况检查不是容器。
答案 1 :(得分:0)
一种可能的解决方案是,您需要向返回 200
的应用程序添加一个基本的 http 路由器,这可以用作运行状况检查端点。
其他可能的选项包括: