KopsによってプロビジョニングされたAWSクラスターにEBSボリュームをマウントしてkubernetesのデプロイをテストしました。これはデプロイメントymlファイルです:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: helloworld-deployment-volume
spec:
replicas: 1
template:
metadata:
labels:
app: helloworld
spec:
containers:
- name: k8s-demo
image: wardviaene/k8s-demo
ports:
- name: nodejs-port
containerPort: 3000
volumeMounts:
- mountPath: /myvol
name: myvolume
volumes:
- name: myvolume
awsElasticBlockStore:
volumeID: <volume_id>
kubectl create -f <path_to_this_yml>
の後に、ポッドの説明に次のメッセージが表示されました。
Attach failed for volume "myvolume" : Error attaching EBS volume "XXX" to instance "YYY": "UnauthorizedOperation: You are not authorized to perform this operation. status code: 403
これは単なる許可の問題のようです。わかりました。ノードロールIAM
-> Roles
-> nodes.<my_domain>
のポリシーを確認したところ、ボリュームの操作を許可するアクションがなく、ec2:DescribeInstances
しかないことがわかりました。デフォルトのアクション。そこで、AttachVolume
アクションとDetachVolume
アクションを追加しました。
{
"Sid": "kopsK8sEC2NodePerms",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": [
"*"
]
},
そして、これは役に立ちませんでした。それでもエラーが発生します:
Attach failed for volume "myvolume" : Error attaching EBS volume "XXX" to instance "YYY": "UnauthorizedOperation: You are not authorized to perform this operation.
私は何かが足りないのですか?
私は解決策を見つけました。説明されています ここ 。
Kops 1.8.0-beta.1では、マスターノードでAWSボリュームに次のタグを付ける必要があります。
KubernetesCluster
:<clustername-here>
したがって、awscli
を使用して、そのタグでEBSボリュームを作成する必要があります。
aws ec2 create-volume --size 10 --region eu-central-1 --availability-zone eu-central-1a --volume-type gp2 --tag-specifications 'ResourceType=volume,Tags=[{Key=KubernetesCluster,Value=<clustername-here>}]'
または、EC2
-> Volumes
-> Your volume
-> Tags
で手動でタグ付けすることもできます
それでおしまい。
編集:
正しいクラスター名は、クラスターの一部であるEC2インスタンスタグ内にあります。キーは同じです:KubernetesCluster
。