乐趣区

关于kubernetes:AWS简单搭建使用EKS二

背景:

紧接 AWS 简略搭建应用 EKS 一,eks 集群简略搭建实现。须要搭建有状态服务必然就用到了 storageclass 存储类,这里用 ebs 记录以下

AWS 简略搭建应用 EKS 二

存储类选型:

参照官网文档:https://kubernetes.io/zh-cn/docs/concepts/storage/storage-classes/#the-storageclass-resource

对于 eks 的存储类:

参照:存储类

集体这里习惯用 EBS 块存储!

应用 AWS CLI 创立 Amazon EBS CSI 插件 IAM 角色

参照:https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/csi-iam-role.html

查看集群的 OIDC 提供商 URL

查看集群的 OIDC 提供商 URL,将 my-cluster 替换为您的集群名称。如果命令的输入为 None,请查看先决条件:

这里采纳了 AWS CLI 形式增加:

aws eks describe-cluster \
  --name my-cluster \
  --query "cluster.identity.oidc.issuer" \
  --output text

输入内容如下:

https://oidc.eks.cn-north-1.amazonaws.com.cn/id/xxxxxxxxx

留神:url 中的 加粗黑体的关键词 https://oidc.eks.cn-north-1.amazonaws.com.cn/id/xxxxxxxxx

创立 IAM 角色

生成 aws-ebs-csi-driver-trust-policy.json

将以下内容复制到名为 _aws-ebs-csi-driver-trust-policy_.json 的文件中。请将 111122223333 替换为您的账户 ID,将 _region-code_ 替换为您的 AWS 区域,并将 EXAMPLED539D4633E53DE1B71EXAMPLE 替换为上一步骤中返回的值。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws: 替换为 arn:aws-us-gov:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {"Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"},
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
          "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
        }
      }
    }
  ]
}

因为实例在中国区我的 json 内容如下:

留神箭头指向的关键词的替换!

创立角色
aws iam create-role \
  --role-name AmazonEKS_EBS_CSI_DriverRole \
  --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json"

AWS 托管策略附加到角色

留神 arn:aws 地区辨别 arn:aws-cn

aws iam attach-role-policy \
  --policy-arn arn:aws-cn:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
  --role-name AmazonEKS_EBS_CSI_DriverRole

官网有应用自定义 KMS 密钥进行加密的步骤,不须要疏忽:

kubectl annotate serviceaccount ebs-csi-controller-sa \
    -n kube-system \
    eks.amazonaws.com/role-arn=arn:aws-cn:iam::xxxxxxxx:role/AmazonEKS_EBS_CSI_DriverRole

注:这个不必执行的其实有问题了在说

治理 Amazon EKS 附加组件

参照:增加 Amazon EBS CSI 附加组件

aws eks create-addon --cluster-name xxxx --addon-name aws-ebs-csi-driver \
  --service-account-role-arn arn:aws:iam::xxxx:role/AmazonEKS_EBS_CSI_DriverRole

aws cli 版本有问题貌似?参照 https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html 更新 aws cli V2

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

/usr/local/bin/aws eks create-addon --cluster-name xxxx --addon-name aws-ebs-csi-driver   --service-account-role-arn arn:aws-cn:iam::xxxx:role/AmazonEKS_EBS_CSI_DriverRole

留神arn:aws-cn 地区

kubectl get pods -n kube-system

eks 控制台点开对应集群 - 插件标签,能够看到多了 aws-ebs-csi-driver 的插件(插件名称能够自定义)

这个时候获取 storageclass 仍然是没有的:

[root@ip-10-0-28-172 ~]# kubectl get sc
No resources found

部署示例应用程序并验证 CSI 驱动程序是否失常运行

参照:部署示例应用程序并验证 CSI 驱动程序是否失常运行

  1. 将 Amazon EBS 容器存储接口 (CSI) 驱动程序 GitHub 存储库克隆到您的本地零碎。

    git clone https://github.com/kubernetes-sigs/aws-ebs-csi-driver.git
  2. 切换到 dynamic-provisioning 示例目录

    cd aws-ebs-csi-driver/examples/kubernetes/dynamic-provisioning/
  3. 从 manifests 目录部署 ebs-sc 存储类、ebs-claim 持久性卷申明和 app 示例应用程序

    kubectl apply -f manifests/
    kubectl get sc
    kubectl get pods
  4. 简略验证查看与验证
kubectl exec -it app -- cat /data/out.txt
  1. 删除实例

    cd manifests
    kubectl delete -f pod.yaml
    kubectl delete -f claim.yaml

    对于 storageclass

    紧接上文 manifests 目录下,cat storageclass.yaml, 其余配置默认就好,name 能够批改成本人新要的名字,这里就默认 ebs-sc 了。后续 有状态服务sc 默认名为ebs-sc

    kubectl get sc

    留神:sc =storageclass

退出移动版