标签: statefulset

有没有办法在 kubernetes statefulset 配置文件中获取 pod 的序号索引?

我们在 Kubernetes 1.9.0 上,想知道是否有办法在其 statefulset 配置文件中访问 pod 的“序数索引”。我们喜欢动态地为 pod 的标签分配一个值(从序数索引派生),然后在规范下使用它来设置 pod 关联(或反关联)。

或者,pod 的实例名称是否在 statefulset 配置文件中可用?如果是这样,我们希望从中提取序数索引并动态分配给标签(供以后用于亲和力)。

kubernetes kubernetes-helm statefulset

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

如何在现有 NFS 共享上指定 mountOptions

我们正在创建一个 kubernetes statefulset,用于挂载预先存在的 NFS 共享。

这是一个精简的示例:

apiVersion: apps/v1beta2
kind: StatefulSet
metadata: 
  name: hostname
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: container
        image: 4730230466298.dkr.ecr.us-east-1.amazonaws.com/container:latest
        volumeMounts:
        - name: efs
          mountPath: /efs
          readOnly: true
      volumes:
      - name: efs
        nfs:
          path: /
          server: 10.33.1.90
          readOnly: true
Run Code Online (Sandbox Code Playgroud)

这工作正常,并且 nfs 卷已正确安装到容器中。但是如何在挂载上指定挂载选项呢?我尝试设置 mountOptions 参数,如下所示: https: //kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options

在卷和volumeMount 上,但验证失败。我不需要(或不想)创建 PV 或 PVC,因为 nfs 卷已经存在于 k8s 之外,我只需要使用它。

是否有指定安装选项?

kubernetes statefulset

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

Kubernetes 具有不同配置的多个相同应用程序和数据库部署

困境:使用相同的 docker 映像和代码,但配置不同(使用子域的不同客户端)部署多个应用程序和数据库容器对。

有哪些合乎逻辑的方法可以解决这个问题,因为 kubernetes 似乎没有支持这种设置的集成?

可能的方法

  1. 对所有应用程序部署使用单个应用程序服务,对所有数据库部署使用单个数据库服务。运行单个 Nginx 静态文件服务和部署,该服务将从应用程序部署之间共享的静态卷提供静态文件(全部使用同一组静态文件)。每当需要新部署时,让 bash 脚本复制应用程序和数据库 .yaml 部署文件,并将 sed 文本替换为客户端的名称,并指向正确的 configmap(当然是手动编写的)并 kubectl 应用它们。主 nginx 入口将处理传入流量并通过应用程序部署服务指向正确的 pod
  2. 与上面类似,除了使用 StatefulSet 而不是单独的部署,以及使用 init 容器将不同的配置复制到已安装的卷(唯一的缺点是您无法删除有状态集中间的项目,如果您不再需要,就会出现这种情况客户端的特定容器,这似乎是一种非常hacky的方法)。

理想情况下,如果 StatefulSet 可以使用向下 api 根据有状态集的索引动态选择配置映射名称,这将解决问题(您基本上可以使用名称中的索引手动创建配置文件,并且它将被选择)适当地)。就像是:

env:
- name: POD_NAME
  valueFrom:
    fieldRef:
      fieldPath: metadata.name

envFrom:
- configMapRef:
  name: $(POD_NAME)-config
Run Code Online (Sandbox Code Playgroud)

然而,该功能在 kubernetes 中不可用。

deployment docker kubernetes statefulset configmap

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

卷已经专门附加到一个节点,不能附加到另一个节点

我有一个非常简单的 Kubernetes pod。我想要一个有状态的集合并想要以下过程:

  1. 我想要一个 initcontainer 下载并将 tarball 从 s3 解压缩到安装到 initcontainer 的卷中
  2. 我想将该卷安装到我要使用的主容器中

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: app
  namespace: test
  labels:
    name: app
spec:
  serviceName: app
  replicas: 1
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      initContainers:
      - name: preparing
        image: alpine:3.8
        imagePullPolicy: IfNotPresent
        command:
          - "sh"
          - "-c"
          - |
            echo "Downloading data"
            wget https://s3.amazonaws.com/.........
            tar -xvzf xxxx-........ -C /root/
        volumeMounts:
        - name: node-volume
          mountPath: /root/data/

      containers:
      - name: main-container
        image: ecr.us-west-2.amazonaws.com/image/:latest
        imagePullPolicy: Always

        volumeMounts: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kops statefulset

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

如何在 Kubernetes 中重新附加已发布的 PersistentVolume

这是我的总体目标:

\n\n
    \n
  • 运行 MongoDB

  • \n
  • 通过 Pod 故障/更新等保留数据

  • \n
\n\n

我\xe2\x80\x99采取的方法:

\n\n
    \n
  • K8S提供商:数字海洋

  • \n
  • 节点:3

  • \n
  • 创建PVC

  • \n
  • 创建无头服务

  • \n
  • 创建一个 StatefulSet

  • \n
\n\n

这里\xe2\x80\x99是配置的简化版本:

\n\n
apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: some-pvc\nspec:\n  accessModes:\n  - ReadWriteOnce\n  resources:\n    requests:\n      storage: 5Gi\n  storageClassName: do-block-storage\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: some-headless-service\n  labels:\n    app: my-app\nspec:\n  ports:\n  - port: 27017\n    name: my-app-database\n  clusterIP: None\n  selector:\n    app: my-app\n    tier: database\n---\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n  name: my-app-database\n  labels:\n    app: my-app\n    tier: database\nspec:\n  serviceName: some-headless-service\n  replicas: 1\n  selector:\n    matchLabels:\n      app: my-app\n      tier: …
Run Code Online (Sandbox Code Playgroud)

kubernetes statefulset

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

如何获取StatefulSet Kubernetes的副本数量

我正在尝试在 Kubernetes 上自动缩放 StatefulSet。为此,我需要获取当前的 Pod 数量。

处理部署时:

kubectl describe deployments [deployment-name] | grep desired | awk '{print $2}' | head -n1
Run Code Online (Sandbox Code Playgroud)

这会输出一个数字,即当前部署的数量。

然而,当你跑步时

kubectl describe statefulsets
Run Code Online (Sandbox Code Playgroud)

我们没有得到那么多信息。知道如何获取有状态集的当前副本数量吗?

autoscaling google-cloud-platform kubernetes google-kubernetes-engine statefulset

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

Kubernetes:带有 StatefulSet 的 NFS

我正在尝试将现有的 NFS 与 StateFulSets 一起使用。

PresistentVolumeClaim使用 似乎自动创建volumeClaimTemplates

问题:

但是,由于PresistentVolumeClaim索赔整个PresistentVolume. 我必须PresistentVolume手动创建所有副本。有没有办法在 Kubernetes 中动态配置 NFS 持久卷?

注意: NFS Server 本身是静态的,只需要在 K8s 中动态创建卷,而不是 NFS Server 本身。

我正在使用 mongo statefulset 示例:

---
apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    name: mongo
spec:
  ports:
  - port: 27017
    targetPort: 27017
  clusterIP: None
  selector:
    role: mongo
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: "mongo"
  replicas: 3
  template:
    metadata:
      labels:
        role: mongo
    spec:
      terminationGracePeriodSeconds: 10 …
Run Code Online (Sandbox Code Playgroud)

nfs kubernetes persistent-volumes persistent-volume-claims statefulset

5
推荐指数
1
解决办法
6932
查看次数

Kubernetes StatefulSet - 在配置中的其他地方获取 spec.replicas 元数据和引用

我正在配置一个 StatefulSet,我希望副本的数量(如下所示的spec.replicas)以某种方式作为参数传递给应用程序实例。我的应用程序需要spec.replicas来确定副本的数量,以便它知道要从 MySQL 表加载哪些行。我不想对spec.replicas和 application 参数中的副本数量进行硬编码,因为这在向上或向下缩放副本数量时不起作用,因为在缩放时需要调整 application 参数。

这是我的 StatefulSet 配置:

apiVersion: 应用程序/v1beta1
种类:StatefulSet
元数据:
  标签:
    运行:我的应用程序
  名称:我的应用程序
  命名空间:my-ns
规格:
  复制品:3
  选择器:
    匹配标签:
      运行:我的应用程序
  服务名称:我的应用程序
  podManagementPolicy:并行
  模板:
    元数据:
      标签:
        运行:我的应用程序
    规格:
      容器:
      - 名称:我的应用程序
        图片:我的应用程序:最新
        命令:
          - /bin/sh
          - /bin/start.sh
          - 开发
          - 2000米
          - “0”
          - "3" **需要替换为#个副本**
          - 127.0.0.1
          - “32990”
        imagePullPolicy:始终
        活性探针:
          获取:
            路径:/健康
            端口:8081
          初始延迟秒数:180
          周期秒数:10
          超时秒数:3
        就绪探针:
          失败阈值:10
          获取:
            路径:/就绪
            端口:8081
            方案:HTTP
          初始延迟秒数:30
          周期秒数:15
          成功阈值:1
          超时秒数:3
        端口:
        - 容器端口:8080 …

kubernetes statefulset kubernetes-statefulset

5
推荐指数
1
解决办法
1169
查看次数

如何使用负载均衡器公开 Statefulset?

我目前正在尝试创建一组 X pod,每个都有一个个人持久卷。为此,我创建了一个StateFulSet带有 X 个副本的副本,并且PersistentVolumeClaimTemplate该部分正在工作。

问题是似乎不可能以与 a 相同的方式使用 LoadBalancer 公开那些 pod deployment(因为 pod 在 statefulset 中的唯一性)。

此刻我试图将它公开,因为一个简单的部署女巫不起作用,我发现的唯一方法是一个一个地公开每个豆荚(我没有测试过,但我在this上看到了它)但它是没有那么可扩展...

我没有在任何云提供商平台上运行 kubernetes,那么请避免使用独占命令行。

load-balancing kubernetes statefulset

5
推荐指数
1
解决办法
5768
查看次数

Kubernetes多个数据库实例或HA单个实例

我有一个运行Multipe应用程序(服务)的Kubernetes环境。现在,我有点困惑如何设置MySQL数据库实例。

根据不同的来源,每个微服务都应该有自己的数据库。我应该在HA模式下创建一个运行多个数据库的MySQL状态集还是为每个运行一个数据库的应用程序(服务)部署一个单独的MySQL实例。

我的第一个想法是第一选择,因此HA总体上应在哪里使用?希望听到一些与此不同的看法。

mysql database high-availability kubernetes statefulset

4
推荐指数
1
解决办法
720
查看次数