即使没有失败,PostStart钩子似乎也不起作用

时间:2017-12-14 10:33:54

标签: kubernetes

我有一个运行cassandra容器的pod。我想在容器启动后创建一个密钥空间。我尝试使用postStart钩子。由于某种原因,它不会失败,但键空间不会被创建。但我尝试在readinessProbe中使用相同的命令作为黑客,它工作正常。有人可以帮我理解我的配置有什么问题。提前致谢

apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-cass-volume-1
  labels:
    type: local
    app: test
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /tmp/data/cass-volume-1
---
apiVersion: v1
kind: Service
metadata:
  name: test-cassandra
  labels:
    app: test
spec:
  ports:
    - port: 9042
  selector:
    app: test
    tier: cass
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cass-pv-claim
  labels:
    app: test
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: test-cassandra
  labels:
    app: test
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: test
        tier: cass
    spec:
      containers:
      - image: cassandra:latest
        name: cassandra
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9042
          name: cass-port
        volumeMounts:
        - name: cass-persistent-storage
          mountPath: /var/lib/cassandra
        readinessProbe:
          exec:
            command: ["cqlsh", "-e", "CREATE KEYSPACE IF NOT EXISTS     test1234 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;"]
          initialDelaySeconds: 30
          periodSeconds: 30
          timeoutSeconds: 10
          failureThreshold: 5
        lifecycle:
          postStart:
            exec:
              command: ["/bin/bash", "-c", "until echo $'CREATE KEYSPACE IF NOT EXISTS test908 WITH replication = {\'class\': \'SimpleStrategy\', \'replication_factor\': \'1\'}  AND durable_writes = true;' | cqlsh ; do echo boo; sleep 2; done"]
      volumes:
      - name: cass-persistent-storage
        persistentVolumeClaim:
          claimName: cass-pv-claim

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,即postStart挂钩命令没有执行。在经历了这个尝试过的readinessProbe技巧之后,它也对我有用。问题是,我正在执行curl命令,同一服务应该回复该命令。即使其postStart挂钩应用程序还需要几秒钟的时间来回复。在执行curl命令之前添加sleep命令可以解决我的问题。