-1

我们已经根据我们的项目要求成功地创建了 Pod、服务和复制控制器。现在我们计划使用 Kubernetes 在 AWS 中设置持久性存储。我已经创建了 YAML 文件以在 AWS 中创建 EBS 卷,它按预期工作正常。我能够声明卷并成功安装到我的 pod(这仅适用于单个副本)。

我能够成功创建文件。卷也在创建,但我的 Pod 将进入挂起状态,卷仍然在 aws 中显示可用状态。我在那里看不到任何错误日志。

存储文件:

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  name: mongo-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2

主文件:

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
    name: web2
spec:
  selector:
    matchLabels:
      app: mongodb
  serviceName: "mongodb"
  replicas: 2
  template:
    metadata:
      labels:
        app: mongodb
      annotations:
         pod.alpha.kubernetes.io/initialized: "true"
    spec:
      containers:
      - image: mongo
        name: mongodb
        ports:
        - name: web2
          containerPort: 27017
          hostPort: 27017
        volumeMounts:
        - mountPath: "/opt/couchbase/var"
          name: mypd1
  volumeClaimTemplates:
  - metadata:
      name: mypd1
      annotations:
        volume.alpha.kubernetes.io/storage-class: mongo-ssd
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi

Kubectl 版本:

Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T10:09:24Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.6", GitCommit:"6260bb08c46c31eea6cb538b34a9ceb3e406689c", GitTreeState:"clean", BuildDate:"2017-12-21T06:23:29Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
4

1 回答 1

2

我可以看到你已经hostPort在你的容器中使用了。在这种情况下,如果您的集群中没有多个节点,则 One Pod 将保持挂起状态。因为它不适合任何节点。

  containers:
  - image: mongo
    name: mongodb
    ports:
    - name: web2
      containerPort: 27017
      hostPort: 27017

当我描述待处理的 Pod 时出现此错误

  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  27s (x7 over 58s)  default-scheduler  No nodes are available that match all of the predicates: PodFitsHostPorts (1). 

HostPort在您的容器中将与您的节点绑定。假设您正在使用 HostPort 10733,但另一个 pod 已经在使用该端口,现在您的 pod 无法使用该端口。所以它将处于待处理状态。如果您有副本 2,并且两个 pod 都部署在同一个节点中,它们也无法启动。

因此,您需要使用一个端口作为 HostPort,您可以肯定地说没有其他人在使用它。

于 2018-01-27T13:17:46.080 回答