标签: kubernetes-statefulset

为什么有状态集?一个无状态的Pod不能使用持久卷吗?

我是Kubernetes的新手,可能会被推测,所以请原谅我,如果我对术语的使用不太正确的话.我希望我的问题的意图是明确的.

我试图围绕有状态集合.它们的使用与使用持久卷的"无状态"Pod有何不同?也就是说,假设一个"正常"的Pod可能声称持久存储,我错过了哪些显而易见的东西需要这个新的构造(有序的启动/停止等)?

kubernetes kubernetes-statefulset

53
推荐指数
1
解决办法
7620
查看次数

Kubernetes - pod 具有未绑定的即时 PersistentVolumeClaims

我正在使用 mysql Kubernetes statefulset,我将 PV 映射到主机目录(CentOS 8 VM)但得到“pod has unbound直接 PersistentVolumeClaims”

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-container
spec:
  serviceName: mysql
  replicas: 1 
  selector:
    matchLabels:
      app: mysql-container
  template:
    metadata:
      labels:
        app: mysql-container
    spec:
      containers:
      - name: mysql-container
        image: mysql:dev
        imagePullPolicy: "IfNotPresent"
        envFrom:
          - secretRef:
             name: prod-secrets
        ports:
        - containerPort: 3306
         # container (pod) path
        volumeMounts:
          - name: mysql-persistent-storage
            mountPath: /var/lib/mysql


      volumes:
        - name: mysql-persistent-storage
          persistentVolumeClaim:
           claimName: mysql-pvc
 volumeClaimTemplates:
    - metadata:
        name: data
      spec:

        storageClassName: localstorage
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-statefulset kubernetes-pod

15
推荐指数
2
解决办法
3万
查看次数

StatefulSets 中并行 podManagementPolicy 相对于 OrderedReady podManagementPolicy 有哪些优缺点?

我最近将 StatefulSet 中的 podManagementPolicy 字段从默认(OrderedReady)更新为 Parallel。

  • 它显着减少了放大和缩小时间。
  • 到目前为止,我还没有看到这一变化的任何缺点,但我担心是否会出现任何可能给我带来问题的情况?

我想知道我是否会遇到任何问题?

cloud kubernetes microservices kubernetes-statefulset kubernetes-pod

11
推荐指数
2
解决办法
8905
查看次数

如何在kubernetes中使用statefulset设置pvc?

在 GKE 上,我将有状态集资源设置为

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
spec:
  serviceName: "redis"
  selector:
    matchLabels:
      app: redis
  updateStrategy:
    type: RollingUpdate
  replicas: 3
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis
        resources:
          limits:
            memory: 2Gi
        ports:
          - containerPort: 6379
        volumeMounts:
          - name: redis-data
            mountPath: /usr/share/redis
      volumes:
        - name: redis-data
          persistentVolumeClaim:
            claimName: redis-data-pvc
Run Code Online (Sandbox Code Playgroud)

想要使用 PVC 所以创建了这个。(这一步是在statefulset部署之前完成的)

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
Run Code Online (Sandbox Code Playgroud)

当检查kubernetes中的资源时

kubectl get pvc
NAME …
Run Code Online (Sandbox Code Playgroud)

kubernetes google-kubernetes-engine persistent-volumes kubernetes-pvc kubernetes-statefulset

10
推荐指数
1
解决办法
2万
查看次数

如何在 kubernetes 上设置基本的rabbitmq

我需要在 kubernetes 集群上设置一个基本的 rabbit mq 实例(没有集群设置),而没有持久性或安全性要求。

我需要的:

单个rabbit mq pod作为有状态集运行,副本数= 1,并通过特定的url(amgp端口和管理接口端口)从集群内部和外部访问它

我不需要的东西:

  • 坚持
  • 安全
  • 集群设置

到目前为止,我发现的舵图都是通过集群、持久性等解决生产设置的,但我不需要这些东西,因为我将仅使用实例进行测试

这是我到目前为止:

apiVersion: v1
kind: Service
metadata:
  name: rs-rmq-mgt
spec:
  selector:
    app: rs-rmq
  ports:
  - protocol: TCP
    port: 1337
    targetPort: 15672
  type: NodePort
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rs-rmq
spec:
  selector:
    matchLabels:
      app: rs-rmq
  serviceName: "rs-rmq"
  replicas: 1
  template:
    metadata:
      labels:
        app: rs-rmq
    spec:
      containers:
      - name: rs-rmq
        image: rabbitmq:management
        ports:
        - containerPort: 25672
        - containerPort: 5672
        - containerPort: 4369
        - containerPort: 15672
Run Code Online (Sandbox Code Playgroud)

rabbitmq kubernetes kubernetes-ingress kubernetes-statefulset

9
推荐指数
1
解决办法
1万
查看次数

为什么我在运行 Docker Desktop 时收到“0/1 个节点可用”?

我正在使用 Kubernetes 运行 Docker Desktop。

我可以通过 ssh 连接到该节点,并且该节点上正在运行其他 pod。

但是,当我将 StatefulSet 应用于集群时,我得到:

0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.
Run Code Online (Sandbox Code Playgroud)

状态集在这里:

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#components

kubectl get no
NAME             STATUS   ROLES           AGE    VERSION
docker-desktop   Ready    control-plane   6d2h   v1.24.1
Run Code Online (Sandbox Code Playgroud)

docker kubernetes kubernetes-statefulset

8
推荐指数
1
解决办法
3万
查看次数

0/1 个节点可用:1 个 pod 具有未绑定的立即 PersistentVolumeClaims

正如文档所述:

对于 StatefulSet 中定义的每个 VolumeClaimTemplate 条目,每个 Pod 都会收到一个 PersistentVolumeClaim。在上面的 nginx 示例中,每个 Pod 都会收到一个具有 my-storage-class 的 StorageClass 和 1 Gib 预配置存储的 PersistentVolume。如果未指定 StorageClass,则将使用默认 StorageClass。当 Pod 被(重新)调度到节点上时,其 volumeMount 会挂载与其 PersistentVolume Claims 关联的 PersistentVolume。请注意,删除 Pod 或 StatefulSet 时,与 Pod 的 PersistentVolume Claim 关联的 PersistentVolume 不会被删除。这必须手动完成。

我感兴趣的部分是:If no StorageClassis specified, then the default StorageClass will be used

我创建了一个 StatefulSet,如下所示:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: ches
  name: ches
spec:
  serviceName: ches
  replicas: 1
  selector:
    matchLabels:
      app: ches
  template:
    metadata:
      labels:
        app: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-statefulset

8
推荐指数
2
解决办法
5万
查看次数

Pod具有未绑定的PersistentVolumeClaims,但卷声明已绑定

我想在virtualbox的kubernetes中创建一个statefulset elasticsearch。我没有使用云提供商,所以我为我的statefulset的两个副本创建了两个持久卷本地:

pv0:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv-elk-0
  namespace: elk
  labels:
    type: local
spec:
  storageClassName: gp2
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data/pv0"
Run Code Online (Sandbox Code Playgroud)

pv1:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv-elk-1
  namespace: elk
  labels:
    type: local
spec:
  storageClassName: gp2
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data/pv1"
Run Code Online (Sandbox Code Playgroud)

状态集:

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: elasticsearch-logging
  namespace: elk
  labels:
    k8s-app: elasticsearch-logging
    version: v5.6.2
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  serviceName: elasticsearch-logging
  replicas: 2
  selector:
    matchLabels:
      k8s-app: elasticsearch-logging …
Run Code Online (Sandbox Code Playgroud)

kubernetes persistent-volumes kubernetes-statefulset

7
推荐指数
1
解决办法
2万
查看次数

使用新的 PersistentVolume 重新创建由 StatefulSet 管理的 Pod

有时,我需要对 StatefulSet 中的所有 Pod 进行滚动替换,以便所有 PV 也从头开始重新创建。这样做的原因是摆脱所有使用旧版本加密密钥的底层硬盘驱动器。此操作不应与常规滚动升级相混淆,为此我仍然希望卷能够在 Pod 终止后继续存在。到目前为止,我认为最好的例程如下:

  1. 删除PV。
  2. 删除 PVC。
  3. 删除 Pod。
  4. 等待所有删除完成。
  5. 手动重新创建在步骤 2 中删除的 PVC。
  6. 等待新 Pod 完成 StatefulSet 中其他 Pod 的数据流传输。
  7. 对于下一个 Pod,从步骤 1. 开始重复。

我对第 5 步不满意。我希望 StatefulSet 为我重新创建 PVC,但不幸的是它没有。我必须自己做,否则 Pod 创建失败并出现以下错误:

Warning  FailedScheduling   3s (x15 over 15m)  default-scheduler   persistentvolumeclaim "foo-bar-0" not found
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

kubernetes kubernetes-statefulset

6
推荐指数
2
解决办法
7031
查看次数

按主机名动态路由到特定 StateFulSet POD

我有一个有 2 个副本的 StatefulSet。我想创建一个端点,以便能够访问该副本的任何一个,并传递主机名 ID,并且如果我将其扩展到更多副本,则需要可以访问新的 Pod。

我可以像这样创建一个 Ingress:

apiVersion: voyager.appscode.com/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: default
spec:
  rules:
  - host: appscode.example.com
    http:
      paths:
      - path: /0
        backend:
          hostNames:
          - web-0
          serviceName: nginx-set
          servicePort: '80'
      - path: /1
        backend:
          hostNames:
          - web-1
          serviceName: nginx-set
          servicePort: '80'

Run Code Online (Sandbox Code Playgroud)

这样,GETonappscode.example.com/0将被路由到web-0pod。但是,我怎样才能以动态的方式做到这一点呢?如果我将副本更改为 3,我将需要手动创建一条新的 pod 路径web-2才能访问。

kubernetes kubernetes-ingress kubernetes-statefulset

6
推荐指数
1
解决办法
1233
查看次数