2017-06-15 57 views
0

我在Google GKE上運行k8s集羣,其中運行Redis和ElasticSearch的statefulsets。 因此,每隔一段時間,豆莢都會處於完成狀態,因此它們不再運行,取決於它的服務將失敗。 這些豆莢也永遠不會自行重新啓動,簡單的kubectl delete pod x將解決問題,但我希望我的豆莢自行治癒。 我正在運行最新版本1.6.4,我不知道爲什麼它們不像任何其他常規Pod那樣拾取並重新啓動。也許我錯過了一些明顯的東西。Kubernetes statefulset以完成狀態結束

編輯:我也注意到吊艙得到一個終止信號,並正確關閉,所以我想知道從哪裏來。我不手動關閉和我遇到同樣用ElasticSearch

這是我statefulset資源聲明:

--- 
apiVersion: apps/v1beta1 
kind: StatefulSet 
metadata: 
    name: redis 
spec: 
    serviceName: "redis" 
    replicas: 1 
    template: 
    metadata: 
     labels: 
     app: redis 
    spec: 
     containers: 
     - name: redis 
     image: redis:3.2-alpine 
     ports: 
      - name: redis-server 
      containerPort: 6379 
     volumeMounts: 
     - name: redis-storage 
      mountPath: /data 
    volumeClaimTemplates: 
    - metadata: 
     name: redis-storage 
     annotations: 
     volume.alpha.kubernetes.io/storage-class: anything 
    spec: 
     accessModes: [ "ReadWriteOnce" ] 
     resources: 
     requests: 
      storage: 10Gi 
+0

你可以檢查restartPolicy的屬性:務必將statefulset的?默認值是永遠,但要確保... –

+0

是的我檢查了重啓策略是'Always' – Niels

回答

0

我使用相同的配置,你,但除去在volumeClaimTemplates註釋,因爲我想這對minikube:

$ cat sc.yaml 
--- 
apiVersion: apps/v1beta1 
kind: StatefulSet 
metadata: 
    name: redis 
spec: 
    serviceName: "redis" 
    replicas: 1 
    template: 
    metadata: 
     labels: 
     app: redis 
    spec: 
     containers: 
     - name: redis 
     image: redis:3.2-alpine 
     ports: 
      - name: redis-server 
      containerPort: 6379 
     volumeMounts: 
     - name: redis-storage 
      mountPath: /data 
    volumeClaimTemplates: 
    - metadata: 
     name: redis-storage 
    spec: 
     accessModes: [ "ReadWriteOnce" ] 
     resources: 
     requests: 
      storage: 10Gi 

現在試圖來模擬redis失敗的情況下,所以execing進入吊艙和殺害Redis的服務器進程:

$ k exec -it redis-0 sh 
/data # kill 1 
/data # $ 

看到該進程死掉,我可以看到STATUS已更改爲Completed後:

$ k get pods                             
NAME  READY  STATUS  RESTARTS AGE 
redis-0 0/1  Completed 1   38s 

過了一段時間,我得到了redis和運行:

$ k get pods 
NAME  READY  STATUS RESTARTS AGE 
redis-0 1/1  Running 2   52s 

但是不久之後,我可以看到它啓動吊艙,您能看到發生這種情況時觸發的事件嗎?當將音量重新連接到音頻盒時,是否有問題?

1

檢查您運行的docker的版本以及在此期間docker守護程序是否重新啓動。

如果docker守護程序已重新啓動,則所有容器都將被終止(除非您在1.12中使用新的「實時恢復」功能)。在某些碼頭版本中,碼頭工人可能會錯誤地報告在此情況下終止的所有容器的「退出碼0」。有關更多詳細信息,請參閱https://github.com/docker/docker/issues/31262

來源:https://stackoverflow.com/a/43051371/5331893