我正在aws eks上使用kubernetes集群运行docker容器。我的两个Docker容器正在使用共享卷,并且这两个容器都在两个不同的容器中运行。所以我想要一个可以被aws上的两个吊舱使用的通用卷。
我创建了一个EFS卷并安装了它。我正在跟踪创建PersistentVolumeClaim的链接。但是当efs-provider pod尝试附加已挂载的EFS卷空间时,出现超时错误。 VolumeId,区域仅正确。
针对Pod的详细错误消息描述:
超时已到期,正在等待附加或挂接Pod“默认” /“ efs-provisioner-55dcf9f58d-r547q”的卷。未安装卷列表= [pv-volume]。未连接卷的列表= [pv-volume default-token-lccdw] 卷“ pv-volume”的MountVolume.SetUp失败:安装失败:退出状态32
答案 0 :(得分:1)
对我来说,问题是我在PV中指定的路径不同于/
。并且在该路径之外被引用的NFS服务器上的目录尚不存在。我必须先手动创建该目录。
答案 1 :(得分:0)
AWS EFS使用NFS类型的卷插件,并且按照 Kubernetes Storage Classes NFS卷插件没有EBS之类的内部Provisioner。
因此步骤将是:
在部署中使用批量声明。
在configmap部分中,更改file.system.id:和aws.region:以匹配您创建的EFS的详细信息。
在“部署”部分中,将服务器:更改为您创建的EFS的DNS端点。
---
apiVersion: v1
kind: ConfigMap
metadata:
name: efs-provisioner
data:
file.system.id: yourEFSsystemid
aws.region: regionyourEFSisin
provisioner.name: example.com/aws-efs
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: efs-provisioner
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: efs-provisioner
spec:
containers:
- name: efs-provisioner
image: quay.io/external_storage/efs-provisioner:latest
env:
- name: FILE_SYSTEM_ID
valueFrom:
configMapKeyRef:
name: efs-provisioner
key: file.system.id
- name: AWS_REGION
valueFrom:
configMapKeyRef:
name: efs-provisioner
key: aws.region
- name: PROVISIONER_NAME
valueFrom:
configMapKeyRef:
name: efs-provisioner
key: provisioner.name
volumeMounts:
- name: pv-volume
mountPath: /persistentvolumes
volumes:
- name: pv-volume
nfs:
server: yourEFSsystemID.efs.yourEFSregion.amazonaws.com
path: /
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: aws-efs
provisioner: example.com/aws-efs
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: efs
annotations:
volume.beta.kubernetes.io/storage-class: "aws-efs"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
有关更多说明和详细信息,请访问https://github.com/kubernetes-incubator/external-storage/tree/master/aws/efs
答案 2 :(得分:0)
问题是,我有2个ec2实例正在运行,但是我仅将EFS卷安装到其中一个ec2实例,而kubectl始终在没有安装卷的ec2实例上部署pod。现在,我将相同的卷安装到两个实例上,并使用如下所示的PVC,PV。一切正常。
ec2安装:AWS EFS mounting with EC2
PV.yml
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation;
/**
* LoginAttempts
* @ORM\Entity(repositoryClass="App\Repository\LoginAttemptsRepository")
* @ORM\Table(name="login_attempts")
*/
class LoginAttempts
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="username", type="string", length=100, nullable=false)
*/
private $username;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=100, nullable=false)
*/
private $email;
/**
* @var string
*
* @ORM\Column(name="time", type="string", length=100, nullable=false)
*/
private $time;
public function getId(): ?int
{
return $this->id;
}
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getTime(): ?string
{
return $this->time;
}
public function setTime(string $time): self
{
$this->time = $time;
return $this;
}
}
PVC.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: efs
spec:
capacity:
storage: 100Mi
accessModes:
- ReadWriteMany
nfs:
server: efs_public_dns.amazonaws.com
path: "/"
replicaset.yml
-----仅卷部分-----
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: efs
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Mi