[英]redisinsights with persistent volume in kubernetes
我有以下.yaml
文件來在 kubernetes 中安裝redisinsights
,並支持持久性。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: redisinsight-storage-class
provisioner: 'kubernetes.io/gce-pd'
parameters:
type: 'pd-standard'
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redisinsight-volume-claim
spec:
storageClassName: redisinsight-storage-class
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: redisinsight #deployment name
labels:
app: redisinsight #deployment label
spec:
replicas: 1 #a single replica pod
selector:
matchLabels:
app: redisinsight #which pods is the deployment managing, as defined by the pod template
template: #pod template
metadata:
labels:
app: redisinsight #label for pod/s
spec:
initContainers:
- name: change-data-dir-ownership
image: alpine:3.6
command:
- chmod
- -R
- '777'
- /db
volumeMounts:
- name: redisinsight
mountPath: /db
containers:
- name: redisinsight #Container name (DNS_LABEL, unique)
image: redislabs/redisinsight:1.6.1 #repo/image
imagePullPolicy: Always #Always pull image
volumeMounts:
- name: redisinsight #Pod volumes to mount into the container's filesystem. Cannot be updated.
mountPath: /db
ports:
- containerPort: 8001 #exposed conainer port and protocol
protocol: TCP
volumes:
- name: redisinsight
persistentVolumeClaim:
claimName: redisinsight-volume-claim
---
apiVersion: v1
kind: Service
metadata:
name: redisinsight
spec:
ports:
- port: 8001
name: redisinsight
type: LoadBalancer
selector:
app: redisinsight
但是,它無法啟動並給出錯誤:
INFO 2020-07-03 06:30:08,117 redisinsight_startup Registered SIGTERM handler
ERROR 2020-07-03 06:30:08,131 redisinsight_startup Error in main()
Traceback (most recent call last):
File "./startup.py", line 477, in main
ValueError: invalid literal for int() with base 10: 'tcp://10.69.9.111:8001'
Traceback (most recent call last):
File "./startup.py", line 495, in <module>
File "./startup.py", line 477, in main
ValueError: invalid literal for int() with base 10: 'tcp://10.69.9.111:8001'
但是相同的 docker 映像,當通過 docker 在本地運行時:
docker run -v redisinsight:/db -p 8001:8001 redislabs/redisinsight
工作正常。 我究竟做錯了什么?
感覺就像 redisinsights 試圖將端口讀取為 int 但不知何故得到一個字符串並且感到困惑。 但我無法理解本地 docker 運行如何正常工作。
更新:
RedisInsight 的kubernetes 文檔最近更新了。 它清楚地描述了如何創建帶有和不帶有服務的 RedisInsight k8s 部署。
IT 還解釋了當已經存在名為“redisinsight”的服務時該怎么做:
注意 - 如果部署將由名為“redisinsight”的服務公開,請設置 REDISINSIGHT_HOST 和 REDISINSIGHT_PORT 環境變量以覆蓋服務創建的環境變量。
問題在於服務的名稱。
從文檔中提到,RedisInsight 有一個環境變量REDISINSIGHT_PORT
可以配置 RedisInsight 可以運行的端口。
當您在 Kubernetes 中創建服務時,所有匹配該服務的 pod 都會獲取一個環境變量<SERVICE_NAME>_PORT=<SERVICE_IP>:<SERVICE_PORT>
。
因此,當您嘗試創建名為redisinsight
的上述服務時,Kubernetes 會傳遞服務環境變量REDISINSIGHT_PORT=<SERVICE_IP>:SERVICE_PORT
。 但是端口環境變量( REDISINSIGHT_PORT
)被記錄為端口號而不是端點,當在 Pod 上運行的 redisinsight 嘗試使用環境變量作為端口號時,這會使 Pod 崩潰。
因此,將服務的名稱更改為不同的名稱,而不是redisinsight
,它應該可以工作。
這是一個快速部署和服務文件:
部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: redisinsight #deployment name
labels:
app: redisinsight #deployment label
spec:
replicas: 1 #a single replica pod
selector:
matchLabels:
app: redisinsight #which pods is the deployment managing, as defined by the pod template
template: #pod template
metadata:
labels:
app: redisinsight #label for pod/s
spec:
containers:
- name: redisinsight #Container name (DNS_LABEL, unique)
image: redislabs/redisinsight:1.6.3 #repo/image
imagePullPolicy: IfNotPresent
volumeMounts:
- name: db #Pod volumes to mount into the container's filesystem. Cannot be updated.
mountPath: /db
ports:
- containerPort: 8001 #exposed conainer port and protocol
protocol: TCP
volumes:
- name: db
emptyDir: {} # node-ephemeral volume https://kubernetes.io/docs/concepts/storage/volumes/#emptydir
服務:
apiVersion: v1
kind: Service
metadata:
name: redisinsight-http # name should not be redisinsight
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8001
selector:
app: redisinsight
請注意服務的名稱。
redisinsight pod的日志:
INFO 2020-09-02 11:46:20,689 redisinsight_startup Registered SIGTERM handler
INFO 2020-09-02 11:46:20,689 redisinsight_startup Starting webserver...
INFO 2020-09-02 11:46:20,689 redisinsight_startup Visit http://0.0.0.0:8001 in your web browser. Press CTRL-C to exit.
還有服務端點(來自 minikube):
$ minikube service list
|----------------------|------------------------------------|--------------|-------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|----------------------|------------------------------------|--------------|-------------------------|
| default | kubernetes | No node port |
| default | redisinsight-http | 80 | http://172.17.0.2:30860 |
| kube-system | ingress-nginx-controller-admission | No node port |
| kube-system | kube-dns | No node port |
| kubernetes-dashboard | dashboard-metrics-scraper | No node port |
| kubernetes-dashboard | kubernetes-dashboard | No node port |
|----------------------|------------------------------------|--------------|-------------------------|
順便說一句,如果您根本不想創建服務(這與問題無關),您可以進行端口轉發:
kubectl port-forward <redisinsight-pod-name> 8001:8001
問題與服務有關,因為它干擾了pod
導致它崩潰。
正如我們在 Redis 文檔中所讀到的 在Kubernetes 上安裝 RedisInsight
- 成功應用部署並完成部署后,訪問 RedisInsight。 這可以通過將部署公開為 K8s 服務或使用端口轉發來實現,如下例所示:
kubectl port-forward deployment/redisinsight 8001
打開瀏覽器並指向 http://localhost:8001
或者在您的情況下使用 GCP 的服務可能如下所示:
apiVersion: v1
kind: Service
metadata:
name: redisinsight
spec:
ports:
- protocol: TCP
port: 8001
targetPort: 8001
name: redisinsight
type: LoadBalancer
selector:
app: redisinsight
服務收到外部 IP 后,您可以使用它訪問 Redis。
crou@cloudshell:~ $ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.8.0.1 <none> 443/TCP 9d
redisinsight LoadBalancer 10.8.7.0 34.67.171.112 8001:31456/TCP 92s
通過http://34.67.171.112:8001/在我的示例中。
它也發生在我身上。 如果有人錯過評論中的對話,這里是解決方案。
先部署 redisinsight pod,等到它運行成功。
部署服務。
我認為這是一個錯誤,它並沒有真正起作用,因為 pod 隨時可能死亡。 這有點違背使用 Kubernetes 的原因。
有人在這里報告了這個問題https://forum.redislabs.com/t/redisinsight-fails-to-launch-in-kubernetes/652/2
根據當前文檔的建議,在 k8s 中運行 redisinsight 存在幾個問題。 我將在下面列出它們:
總結 Redisinsight 是一個很好的工具。 但目前運行它的洞察力 kubernetes 集群絕對是一場噩夢,而且它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.