当我尝试通过kubernetes部署运行我的elasticsearch容器时,我的elasticsearch pod会在一段时间后失败,而当使用docker-compose或Dockerfile直接作为docker容器运行时,它运行得非常好。
NAME READY STATUS RESTARTS AGE
es-764bd45bb6-w4ckn 0/1 Error 4 3m
下面是kubectl describe pod
的结果
Name: es-764bd45bb6-w4ckn
Namespace: default
Node: administrator-thinkpad-l480/<node_ip>
Start Time: Thu, 30 Aug 2018 16:38:08 +0530
Labels: io.kompose.service=es
pod-template-hash=3206801662
Annotations: <none>
Status: Running
IP: 10.32.0.8
Controlled By: ReplicaSet/es-764bd45bb6
Containers:
es:
Container ID: docker://9be2f7d6eb5d7793908852423716152b8cefa22ee2bb06fbbe69faee6f6aa3c3
Image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
Image ID: docker-pullable://docker.elastic.co/elasticsearch/elasticsearch@sha256:9ae20c753f18e27d1dd167b8675ba95de20b1f1ae5999aae5077fa2daf38919e
Port: 9200/TCP
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 78
Started: Thu, 30 Aug 2018 16:42:56 +0530
Finished: Thu, 30 Aug 2018 16:43:07 +0530
Ready: False
Restart Count: 5
Environment:
ELASTICSEARCH_ADVERTISED_HOST_NAME: es
ES_JAVA_OPTS: -Xms2g -Xmx2g
ES_HEAP_SIZE: 2GB
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-nhb9z (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
default-token-nhb9z:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-nhb9z
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 6m default-scheduler Successfully assigned default/es-764bd45bb6-w4ckn to administrator-thinkpad-l480
Normal Pulled 3m (x5 over 6m) kubelet, administrator-thinkpad-l480 Container image "docker.elastic.co/elasticsearch/elasticsearch:6.2.4" already present on machine
Normal Created 3m (x5 over 6m) kubelet, administrator-thinkpad-l480 Created container
Normal Started 3m (x5 over 6m) kubelet, administrator-thinkpad-l480 Started container
Warning BackOff 1m (x15 over 5m) kubelet, administrator-thinkpad-l480 Back-off restarting failed container
下面是我的ElasticSearch部署.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.1.0 (36652f6)
creationTimestamp: null
labels:
io.kompose.service: es
name: es
spec:
replicas: 1
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
io.kompose.service: es
spec:
containers:
- env:
- name: ELASTICSEARCH_ADVERTISED_HOST_NAME
value: es
- name: ES_JAVA_OPTS
value: -Xms2g -Xmx2g
- name: ES_HEAP_SIZE
value: 2GB
image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
name: es
ports:
- containerPort: 9200
resources: {}
restartPolicy: Always
status: {}
当我尝试使用kubectl logs -f es-764bd45bb6-w4ckn
获取日志时,我得到
Error from server: Get https://<slave node ip>:10250/containerLogs/default/es-764bd45bb6-w4ckn/es?previous=true: dial tcp <slave node ip>:10250: i/o timeout
此问题的原因和解决方案可能是什么?
4条答案
按热度按时间svmlkihl1#
我遇到了同样的问题,这个问题可能有几个原因。在我的情况下,jar文件丢失。@Lakshya已经回答了这个问题,我想添加您可以采取的步骤来解决它。
1.获取pod状态,命令-kubectl get pod
1.描述pod以便进一步查看-**kubectl describe pod“pod-name”**输出的最后几行提供事件以及部署失败的位置
1.获取日志以了解更多详细信息-kubectl记录“pod-name”
1.获取容器日志-kubectl logs“pod名称”-c“容器名称”从describe pod命令的输出中获取容器名称
如果容器已启动,则可以使用kubectl exec -it命令进一步分析容器
希望对社区成员在未来的问题上有所帮助。
bvk5enib2#
我找到了使用
docker logs
作为es容器的日志,发现由于vm.max_map_count
设置为非常低的值,es没有启动。我使用sysctl -w vm.max_map_count=262144
将vm.max_map_count
更改为所需的值,之后pod启动。wecizke33#
可能配置不正确,但有效,读取Pod日志并找到错误消息。修复配置并重新部署应用程序
bejyjqdl4#
在我的例子中,我只是运行
kubectl run ubuntu --image=ubuntu
得到类似的错误,kubectl logs
是空的我猜原因是ubuntu镜像没有命令会自动关机,所以解决办法是:
输出k8s Ubuntu配置文件yaml
在命令make container命令中使用dont container poweroff(例如,添加“sleep infinity”,以下是工作配置yaml