Brc's blog
首页
前端
后端
运维
  • 工作笔记
  • 分类
  • 标签
  • 归档
关于

Brc

努力中
首页
前端
后端
运维
  • 工作笔记
  • 分类
  • 标签
  • 归档
关于
  • 工具安装

    • 安装AWS CLI
    • 安装kubectl
    • 安装eksctl
    • 安装helm
    • 安装EFS客户端
  • AWS

  • EKS

  • 其他

  • AWS创建EKS集群
    • 基础条件
      • 安装AWS CLI
      • 下载
      • 解压
      • 运行
      • 检查
      • 安装kubectl
      • 创建管理员 IAM 用户和用户组
    • 配置AWS CLI
      • 创建密钥对
      • 快速配置aws configure
    • AWS CLI 创建入门EKS
      • 步骤 1:创建您的 Amazon EKS 集群
      • 步骤 2:配置您的计算机以与您的集群通信
      • 步骤 3:创建Devops节点
      • 步骤 4:配置EFS持久性存储
      • 创建 IAM 策略和角色
      • 为您的集群创建 IAM OIDC 提供程序
      • 安装 Amazon EFS 驱动程序
      • 创建 Amazon EFS 文件系统
      • 部署示例应用程序
    • 设置EFS为默认SC
    • 在 EKS 上安装 KubeSphere
    • 访问 KubeSphere 控制台
    • (未完)修改KubeSphere所在的node
      • 使用命令找到所有的deployment和statefulset:
  • 谷歌云创建GKE集群
  • 工作笔记
Brc
2023-06-11
目录

AWS创建EKS集群

# 基础条件

# 安装AWS CLI

https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

# 下载

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
1

# 解压

unzip awscliv2.zip
1

# 运行

sudo ./aws/install
1

# 检查

aws --version
1

# 安装kubectl

阿里镜像站

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubectl
1
2
3
4
5
6
7

# 创建管理员 IAM 用户和用户组

  1. 为您将创建的 IAM 管理员用户启用对账单数据的访问权限,如下所示:
    1. 在导航栏上,选择您的账户名称,然后选择Account。
    2. 在IAM User and Role Access to Billing Information旁边,选择Edit。您必须以 root 用户身份登录,此部分才能显示在帐户页面上。
    3. 选中复选框以激活 IAM 访问并选择 更新。
    4. 在导航栏上,选择服务,然后 选择IAM以返回到 IAM 控制台。
  2. 在导航窗格中,选择用户,然后选择 添加用户。
  3. 在详细信息页面上,执行以下操作:
    1. 对于用户名,键入Administrator。
    2. 选中AWS 管理控制台访问复选框,选择 自定义密码,然后在文本框中键入您的新密码。
    3. 选择下一步:权限。
  4. 在“权限”页面上,执行以下操作:
    1. 选择将用户添加到组。
    2. 选择创建组。
    3. 在创建组对话框中,对于组名称类型Administrators。
    4. 选中AdministratorAccess 策略的复选框。
    5. 选择创建组。
    6. 返回包含用户组列表的页面,选中新用户组的复选框。如果您在列表中看不到新用户组,请选择刷新。
    7. 选择下一步:标签。
  5. 选择下一步:查看。验证要添加到新用户的用户组成员身份。当您准备好继续时,选择Create user。

# 配置AWS CLI

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config

# 创建密钥对

为 IAM 用户创建访问密钥

  1. 登录 AWS 管理控制台并在https://console.aws.amazon.com/iam/打开 IAM 控制台 (opens new window).

  2. 在导航窗格中,选择用户。

  3. 选择您要为其创建访问密钥的用户的名称,然后选择安全凭据选项卡。

  4. 在访问密钥部分中,选择创建访问密钥。

  5. 要查看新的访问密钥对,请选择Show。此对话框关闭后,您将无法再次访问秘密访问密钥。您的凭据将如下所示:

    • 访问密钥 ID:A************************3
    • 秘密访问密钥:H***************************************G
  6. 要下载密钥对,请选择下载 .csv 文件。将密钥存储在安全位置。此对话框关闭后,您将无法再次访问秘密访问密钥。

  7. 下载.csv文件后,选择Close。创建访问密钥时,密钥对默认处于活动状态,您可以立即使用该对。

# 快速配置aws configure

# aws configure
AWS Access Key ID [None]: A************************3
AWS Secret Access Key [None]: H***************************************G
Default region name [None]: eu-central-1
Default output format [None]: json
1
2
3
4
5

# AWS CLI 创建入门EKS

https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html

# 步骤 1:创建您的 Amazon EKS 集群

创建集群

  1. 创建具有满足 Amazon EKS 要求的公有和私有子网的 Amazon VPC。 替换eu-central-1为 Amazon EKS 支持的任何 AWS 区域。有关 AWS 区域的列表,请参阅AWS 一般参考指南中的Amazon EKS 终端节点和配额 (opens new window)。创建完成后确认已经启用DNS解析

    aws cloudformation create-stack \
      --region eu-central-1 \
      --stack-name birenchong-eks-vpc-stack \
      --template-url https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
    
    1
    2
    3
    4

    手动创建的VPC

    VPC 可用区 子网 路由表 互联网网关 NAT网关
    172.32.0.0/16 公a 172.32.0.0/20 Public Subnets birenchong-igw
    公b 172.32.16.0/20 Public Subnets birenchong-igw
    公c 172.32.32.0/20 Public Subnets birenchong-igw
    私a 172.32.64.0/18 Private Subnet AZ1 birenchong-eks-vpc-stack-NatGatewayAZ1
    私b 172.32.128.0/18 Private Subnet AZ2 birenchong-eks-vpc-stack-NatGatewayAZ2
    私c 172.32.192.0/18 Private Subnet AZ3 birenchong-eks-vpc-stack-NatGatewayAZ3
    vpc(启用 DNS 解析、启用 DNS 主机名)
    birenchong-eks-vpc-stack
    172.32.0.0/16
    
    子网
    公网(启用自动分配公有 IPv4 地址)
    1a
    birenchong-eks-vpc-stack-PublicSubnet01
    172.32.0.0/20
    1b
    birenchong-eks-vpc-stack-PublicSubnet02
    172.32.16.0/20
    1c
    birenchong-eks-vpc-stack-PublicSubnet03
    172.32.32.0/20
    私网
    1a
    birenchong-eks-vpc-stack-PrivateSubnet01
    172.32.64.0/18
    1b
    birenchong-eks-vpc-stack-PrivateSubnet02
    172.32.128.0/18
    1c
    birenchong-eks-vpc-stack-PrivateSubnet03
    172.32.192.0/18
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    路由表
    Public Subnets
    0.0.0.0/0 --> birenchong-igw
    Private Subnet AZ1
    0.0.0.0/0 --> birenchong-eks-vpc-stack-NatGatewayAZ1
    Private Subnet AZ2
    0.0.0.0/0 --> birenchong-eks-vpc-stack-NatGatewayAZ2
    Private Subnet AZ3
    0.0.0.0/0 --> birenchong-eks-vpc-stack-NatGatewayAZ3
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    互联网网关
    birenchong-igw
    
    1
    2
    NAT网关(绑定到私网,但是子网选择公网)
    birenchong-eks-vpc-stack-NatGatewayAZ1
    birenchong-eks-vpc-stack-NatGatewayAZ2
    birenchong-eks-vpc-stack-NatGatewayAZ3
    
    1
    2
    3
    4
  2. 创建一个集群 IAM 角色并将所需的 Amazon EKS IAM 托管策略附加到它。由 Amazon EKS 管理的 Kubernetes 集群代表您调用其他 AWS 服务,以管理您用于该服务的资源。

    1. 将以下内容复制到名为 cluster-role-trust-policy.json.

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "eks.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
    2. 创建角色。

      aws iam create-role \
        --role-name birenchongAmazonEKSClusterRole \
        --assume-role-policy-document file://"cluster-role-trust-policy.json"
      
      1
      2
      3
    3. 将所需的 Amazon EKS 托管 IAM 策略附加到角色。

      aws iam attach-role-policy \
        --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy \
        --role-name birenchongAmazonEKSClusterRole
      
      1
      2
      3
  3. 打开 Amazon EKS (opens new window)控制台,检查控制台右上角显示的 AWS 区域

  4. 选择添加集群,然后选择 创建。

  5. 在配置集群页面上,执行以下操作:

    1. 输入集群的名称,例如 birenchong-k8s-cluster.
    2. 对于集群服务角色,选择 birenchongAmazonEKSClusterRole。
    3. 将其余设置保留为默认值,然后选择 Next。
  6. 在指定网络页面上,执行以下操作:

    1. 从VPC下拉列表中选择您在上一步中创建的 VPC 的 ID 。有点像 vpc-00x0000x000x0x000| birenchong-eks-vpc-stack-VPC.
    2. 将其余设置保留为默认值,然后选择 Next。
  7. 在配置日志记录页面上,选择 下一步。

  8. 在Review and create页面上,选择 Create。

    在集群名称的右侧,集群状态会 持续几分钟,直到集群供应过程完成。在状态为Active之前不要继续下一步。

# 步骤 2:配置您的计算机以与您的集群通信

在本部分中,您将为集群创建一个kubeconfig文件。此文件中的设置使kubectlCLI 能够与您的集群进行通信。

配置您的计算机以与您的集群通信

  1. 为您的集群创建或更新kubeconfig文件。

    aws eks update-kubeconfig --region eu-central-1 --name birenchong-k8s-cluster
    
    1

    默认情况下,该config文件是在 中创建的, 或者~/.kube新集群的配置被添加到.config``~/.kube

  2. 测试您的配置。

    kubectl get svc
    
    1

    笔记

    如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未授权或拒绝访问 (kubectl) (opens new window)。记得配置安全组

    输出

    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   7m18s
    
    1
    2

# 步骤 3:创建Devops节点

创建托管节点组,指定您在前面步骤中创建的子网和节点 IAM 角色。

创建 Amazon EC2 Linux 托管节点组

  1. 创建节点 IAM 角色并将所需的 Amazon EKS IAM 托管策略附加到它。Amazon EKS 节点kubelet守护程序代表您调用 AWS API。节点通过 IAM 实例配置文件和相关策略接收这些 API 调用的权限。

    1. 将以下内容复制到名为 node-role-trust-policy.json.

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
    2. 创建节点 IAM 角色。

      aws iam create-role \
        --role-name birenchongAmazonEKSDevopsNodeRole \
        --assume-role-policy-document file://"node-role-trust-policy.json"
      
      1
      2
      3
    3. 将所需的托管 IAM 策略附加到角色。

      aws iam attach-role-policy \
        --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \
        --role-name birenchongAmazonEKSDevopsNodeRole
      aws iam attach-role-policy \
        --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \
        --role-name birenchongAmazonEKSDevopsNodeRole
      aws iam attach-role-policy \
        --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \
        --role-name birenchongAmazonEKSDevopsNodeRole
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
  2. 在https://console.aws.amazon.com/eks/home#/clusters (opens new window)打开 Amazon EKS 控制台.

  3. 选择您在第 1 步中创建的集群的名称:创建您的 Amazon EKS 集群 (opens new window),例如birenchong-k8s-cluster.

  4. 在**birenchong-k8s-cluster** 页面上,执行以下操作:

    1. 选择配置选项卡。
    2. 选择计算选项卡。
    3. 选择添加节点组。
  5. 在配置节点组页面上,执行以下操作:

    1. 对于Name,输入受管节点组的唯一名称,例如 birenchong-nodegroup。
    2. 对于Node IAM role name,选择 birenchongAmazonEKSDevopsNodeRole您在上一步中创建的角色。我们建议每个节点组使用自己唯一的 IAM 角色。
    3. Kubernetes 标记添加键env值devops
    4. 选择下一步。
  6. 在Set compute and scaling configuration 页面上,接受默认值并选择 Next。

  7. 在指定网络页面上,配置ssh登陆安全组选择默认安全组,并选择下一步。

  8. 在Review and create页面上,查看您的托管节点组配置并选择 Create。

  9. 几分钟后,Node Group 配置部分中 的Status将从Creating变为 Active。在状态为Active之前不要继续下一步。

# 步骤 4:配置EFS持久性存储

https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html#efs-install-driver

# 创建 IAM 策略和角色

创建 IAM 策略并将其分配给 IAM 角色。该策略将允许 Amazon EFS 驱动程序与您的文件系统进行交互。

将 Amazon EFS CSI 驱动程序部署到 Amazon EKS 集群

  1. 创建允许 CSI 驱动程序的服务账户代表您调用 AWS API 的 IAM 策略。

    1. 从 GitHub 下载 IAM 策略文档。

      curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/v1.3.7/docs/iam-policy-example.json
      
      1
    2. 创建策略。

      aws iam create-policy \
          --policy-name BiRenchong_EKS_EFS_CSI_Driver_Policy \
          --policy-document file://iam-policy-example.json
      
      1
      2
      3
  2. 创建一个 IAM 角色并将 IAM 策略附加到它。使用 IAM 角色 ARN 注释 Kubernetes 服务账户,并使用 Kubernetes 服务账户名称注释 IAM 角色。使用AWS CLI创建角色 。

    1. 确定集群的 OIDC 提供程序 URL。

      aws eks describe-cluster --name birenchong-k8s-cluster --query "cluster.identity.oidc.issuer" --output text
      
      1

      示例输出:

      https://oidc.eks.eu-central-1.amazonaws.com/id/8***************************9
      
      1
    2. 创建 IAM 角色,向 Kubernetes 服务帐户授予AssumeRoleWithWebIdentity 操作。

      1. 将以下内容复制到名为 trust-policy.json.

        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Federated": "arn:aws:iam::124117760613:oidc-provider/oidc.eks.eu-central-1.amazonaws.com/id/8***************************9"
              },
              "Action": "sts:AssumeRoleWithWebIdentity",
              "Condition": {
                "StringEquals": {
                  "oidc.eks.eu-central-1.amazonaws.com/id/8***************************9:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"
                }
              }
            }
          ]
        }
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
      2. 创建角色。

        aws iam create-role \
          --role-name BiRenchong_EKS_EFS_CSI_DriverRole \
          --assume-role-policy-document file://"trust-policy.json"
        
        1
        2
        3
    3. 将 IAM 策略附加到角色。

      aws iam attach-role-policy \
        --policy-arn arn:aws:iam::124117760613:policy/BiRenchong_EKS_EFS_CSI_Driver_Policy \
        --role-name BiRenchong_EKS_EFS_CSI_DriverRole
      
      1
      2
      3
    4. 创建一个使用您创建的 IAM 角色的 ARN 注释的 Kubernetes 服务账户。

      1. 将以下内容保存到名为 efs-service-account.yaml.

        ---
        apiVersion: v1
        kind: ServiceAccount
        metadata:
          labels:
            app.kubernetes.io/name: aws-efs-csi-driver
          name: efs-csi-controller-sa
          namespace: kube-system
          annotations:
            eks.amazonaws.com/role-arn: arn:aws:iam::124117760613:role/BiRenchong_EKS_EFS_CSI_DriverRole
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
      2. 在集群上创建 Kubernetes 服务帐户。命名的 Kubernetes 服务账户使用您创建的 IAM 角色BiRenchong_EKS_EFS_CSI_DriverRole进行注释,命名为 efs-csi-controller-sa 。

        kubectl apply -f efs-service-account.yaml
        
        1

# 为您的集群创建 IAM OIDC 提供程序

https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html

使用 AWS 管理控制台为您的集群创建 IAM OIDC 身份提供商

  1. 在https://console.aws.amazon.com/eks/home#/clusters (opens new window)打开 Amazon EKS 控制台.
  2. 选择集群的名称,然后选择配置选项卡。
  3. 在详细信息部分,记下OpenID Connect 提供者 URL的值。
  4. 在https://console.aws.amazon.com/iam/ (opens new window)打开 IAM 控制台 .
  5. 在左侧导航窗格中,选择Access management下的Identity Providers。如果列出的提供程序与您的集群的 URL 匹配,则您的集群已经有一个提供程序。如果未列出与您的集群的 URL 匹配的提供程序,则您必须创建一个。
  6. 要创建提供者,请选择Add Provider。
  7. 对于Provider Type,选择OpenID Connect。
  8. 对于Provider URL,粘贴集群的 OIDC 颁发者 URL,然后选择Get thumbprint。
  9. 对于Audience,输入 sts.amazonaws.com并选择Add provider。

# 安装 Amazon EFS 驱动程序

使用存储在私有 Amazon ECR 注册表中的映像安装驱动程序

  1. 下载清单。

    kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/ecr?ref=release-1.3" > private-ecr-driver.yaml
    
    1
  2. 运行命令

    sed -i.bak -e 's|us-west-2|eu-central-1|' private-ecr-driver.yaml
    
    1
  3. 查看集群所在的 AWS 区域的Amazon 容器映像注册表 (opens new window)中的账户,然后运行修改后的命令。

    sed -i.bak -e 's|602401143452|602401143452|' private-ecr-driver.yaml
    
    1
  4. 编辑该private-ecr-driver.yaml文件并删除以下创建 Kubernetes 服务帐户的行。不需要这些行,因为服务帐户是在上一步中创建的。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      labels:
        app.kubernetes.io/name: aws-efs-csi-driver
      name: efs-csi-controller-sa
      namespace: kube-system
    ---
    
    1
    2
    3
    4
    5
    6
    7
    8
  5. 应用清单。

    kubectl apply -f private-ecr-driver.yaml
    
    1

# 创建 Amazon EFS 文件系统

Amazon EFS CSI 驱动程序支持Amazon EFS 访问点 (opens new window),这些访问点是 Amazon EFS 文件系统中特定于应用程序的入口点,可以更轻松地在多个 pod 之间共享文件系统。访问点可以为通过访问点发出的所有文件系统请求强制执行用户身份,并为每个 pod 强制执行根目录。有关更多信息,请在 GitHub 上参阅Amazon EFS 访问点 (opens new window)

重要的

​ 您必须在同一终端中完成以下步骤,因为在这些步骤中设置和使用了变量。

为您的 Amazon EKS 集群创建 Amazon EFS 文件系统

  1. 检索集群所在的 VPC ID 并将其存储在变量中以供后续步骤使用。替换birenchong-k8s-cluster 为您的集群名称。

    vpc_id=$(aws eks describe-cluster \
        --name birenchong-k8s-cluster \
        --query "cluster.resourcesVpcConfig.vpcId" \
        --output text)
    
    1
    2
    3
    4
  2. 检索集群 VPC 的 CIDR 范围并将其存储在变量中以供后续步骤使用。

    cidr_range=$(aws ec2 describe-vpcs \
        --vpc-ids $vpc_id \
        --query "Vpcs[].CidrBlock" \
        --output text)
    
    1
    2
    3
    4
  3. 创建一个具有入站规则的安全组,该规则允许您的 Amazon EFS 挂载点的入站 NFS 流量。

    1. 创建安全组。

      security_group_id=$(aws ec2 create-security-group \
          --group-name BiRenchongEfsSecurityGroup \
          --description "BiRenchong EFS security group" \
          --vpc-id $vpc_id \
          --output text)
      
      1
      2
      3
      4
      5
    2. 创建一个入站规则,允许来自集群 VPC 的 CIDR 的入站 NFS 流量。

      aws ec2 authorize-security-group-ingress \
          --group-id $security_group_id \
          --protocol tcp \
          --port 2049 \
          --cidr $cidr_range
      
      1
      2
      3
      4
      5
  4. 为您的 Amazon EKS 集群创建一个 Amazon EFS 文件系统。

    1. 创建文件系统。

      file_system_id=$(aws efs create-file-system \
          --region eu-central-1 \
          --performance-mode generalPurpose \
          --query 'FileSystemId' \
          --output text)
      
      1
      2
      3
      4
      5
    2. 创建挂载目标。

      1. 确定集群节点的 IP 地址。

        kubectl get nodes
        
        1

        示例输出:

        NAME                                             STATUS   ROLES    AGE     VERSION
        ip-172-32-219-84.eu-central-1.compute.internal   Ready    <none>   3m23s   v1.22.17-eks-49d8fe8
        ip-172-32-22-252.eu-central-1.compute.internal   Ready    <none>   11m     v1.22.17-eks-49d8fe8
        ip-172-32-221-78.eu-central-1.compute.internal   Ready    <none>   10m     v1.22.17-eks-49d8fe8
        
        1
        2
        3
        4
      2. 确定您的 VPC 中子网的 ID 以及子网所在的可用区。

        aws ec2 describe-subnets \
            --filters "Name=vpc-id,Values=$vpc_id" \
            --query 'Subnets[*].{SubnetId: SubnetId,AvailabilityZone: AvailabilityZone,CidrBlock: CidrBlock}' \
            --output table
        
        1
        2
        3
        4

      示例输出: --------------------------------------------------------------------- | DescribeSubnets | +------------------+-------------------+----------------------------+ | AvailabilityZone | CidrBlock | SubnetId | +------------------+-------------------+----------------------------+ | eu-central-1c | 172.32.32.0/20 | subnet-0b07e97ac7bc7dcd8 | | eu-central-1c | 172.32.192.0/18 | subnet-03bfc4a127e454901 | | eu-central-1a | 172.32.64.0/18 | subnet-07170f619a98db512 | | eu-central-1b | 172.32.16.0/20 | subnet-0bc974c68c9705800 | | eu-central-1a | 172.32.0.0/20 | subnet-0136dddddc9fac4e7 | | eu-central-1b | 172.32.128.0/18 | subnet-0baf275b11bdcb2b9 | +------------------+-------------------+----------------------------+

      1. 为您的节点所在的子网添加挂载目标。根据前两步的输出,集群有一个 IP 地址为172.32.56.0. 该 IP 地址位于CidrBlock具有 ID 的子网中 subnet-EXAMPLEe2ba886490。因此,以下命令会为节点所在的子网创建挂载目标。如果集群中有更多节点,您将为每个 AZ 中的子网运行一次命令,将其替换为 subnet-EXAMPLEe2ba886490 具有适当的子网 ID。

        aws efs create-mount-target \
            --file-system-id $file_system_id \
            --subnet-id subnet-07fb4416d4aae3d5d \
            --security-groups $security_group_id
        
        1
        2
        3
        4

# 部署示例应用程序

静止的

部署使用您创建的持久卷的示例应用程序

此过程使用Multiple Pods Read Write Many (opens new window)来自Amazon EFS 容器存储接口 (CSI) 驱动程序的示例 (opens new window)GitHub 存储库,用于使用静态预置的 Amazon EFS 持久卷并使用访问模式从多个 pod 访问它ReadWriteMany。

  1. 克隆Amazon EFS 容器存储接口 (CSI) 驱动程序 (opens new window)GitHub 存储库到您的本地系统。

    git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git
    
    1
  2. 导航到multiple_pods示例目录。

    cd aws-efs-csi-driver/examples/kubernetes/multiple_pods/
    
    1
  3. 检索您的 Amazon EFS 文件系统 ID。您可以在 Amazon EFS 控制台中找到它,或使用以下 AWS CLI 命令。

    aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text
    
    1

    输出:

    fs-0xxxxxxxxxxxxx3
    
    1
  4. 编辑specs/pv.yaml文件并将 volumeHandle值替换为您的 Amazon EFS 文件系统 ID。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: efs-pv
    spec:
      capacity:
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: efs-sc
      csi:
        driver: efs.csi.aws.com
        volumeHandle: fs-0xxxxxxxxxxxxx3
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
  5. 从目录部署efs-sc存储类、 efs-claim持久卷声明和 efs-pv持久卷 specs。

    kubectl apply -f specs/pv.yaml
    kubectl apply -f specs/claim.yaml
    kubectl apply -f specs/storageclass.yaml
    
    1
    2
    3
  6. 列出默认命名空间中的持久卷。查找带有default/efs-claim 声明的持久卷。

    kubectl get pv -w
    
    1

    输出:

    NAME		CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM				STORAGECLASS   REASON   AGE
    efs-pv		5Gi        RWX            Retain           Bound    default/efs-claim	efs-sc                  80s
    
    1
    2

    在STATUS变成Bound之前不要进行下一步。

  7. 从specs目录部署app1和app2示例应用程序。

    kubectl apply -f specs/pod1.yaml
    kubectl apply -f specs/pod2.yaml
    
    1
    2
  8. 观察默认命名空间中的 pod 并等待pods app1和app2的STATUS变为Running.

    kubectl get pods --watch
    
    1

    笔记

pod 可能需要几分钟才能达到该 Running状态。

  1. 描述持久卷。

    kubectl describe pv efs-pv
    
    1

    输出:

    Name:            efs-pv
    Labels:          <none>
    Annotations:     pv.kubernetes.io/bound-by-controller: yes
    Finalizers:      [kubernetes.io/pv-protection]
    StorageClass:    efs-sc
    Status:          Bound
    Claim:           default/efs-claim
    Reclaim Policy:  Retain
    Access Modes:    RWX
    VolumeMode:      Filesystem
    Capacity:        5Gi
    Node Affinity:   <none>
    Message:
    Source:
        Type:              CSI (a Container Storage Interface (CSI) volume source)
        Driver:            efs.csi.aws.com
        FSType:
        VolumeHandle:      fs-0xxxxxxxxxxxxx3
        ReadOnly:          false
        VolumeAttributes:  <none>
    Events:                <none>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    Amazon EFS 文件系统 ID 列为 VolumeHandle.

  2. 验证app1pod 是否成功将数据写入卷。

    kubectl exec -ti app1 -- tail /data/out1.txt
    
    1

    输出:

    Mon May 16 05:22:22 UTC 2022
    Mon May 16 05:22:27 UTC 2022
    Mon May 16 05:22:32 UTC 2022
    Mon May 16 05:22:37 UTC 2022
    Mon May 16 05:22:42 UTC 2022
    Mon May 16 05:22:47 UTC 2022
    Mon May 16 05:22:52 UTC 2022
    Mon May 16 05:22:57 UTC 2022
    Mon May 16 05:23:02 UTC 2022
    Mon May 16 05:23:07 UTC 2022
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  3. 验证app2pod 在写入卷的卷中显示的数据是否相同app1。

    kubectl exec -ti app2 -- tail /data/out1.txt
    
    1

    输出:

    Mon May 16 05:22:22 UTC 2022
    Mon May 16 05:22:27 UTC 2022
    Mon May 16 05:22:32 UTC 2022
    Mon May 16 05:22:37 UTC 2022
    Mon May 16 05:22:42 UTC 2022
    Mon May 16 05:22:47 UTC 2022
    Mon May 16 05:22:52 UTC 2022
    Mon May 16 05:22:57 UTC 2022
    Mon May 16 05:23:02 UTC 2022
    Mon May 16 05:23:07 UTC 2022
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  4. 完成试验后,删除此示例应用程序的资源以进行清理。

    kubectl delete -f specs/
    
    1

    您也可以手动删除您创建的文件系统和安全组。

排错:https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-troubleshoot-oidc-and-irsa/

# 设置EFS为默认SC

创建动态sc

cat <<EOF | kubectl apply -f -
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: efs-sc-dynamic
  annotations:
    storageclass.beta.kubernetes.io/is-default-class: 'true'
    storageclass.kubernetes.io/is-default-class: 'true'
provisioner: efs.csi.aws.com
parameters:
  provisioningMode: efs-ap
  fileSystemId: fs-0xxxxxxxxxxxxx3
  directoryPerms: "700"
  gidRangeStart: "1000" # optional
  gidRangeEnd: "2000" # optional
  basePath: "/dynamic_provisioning" # optional
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

修改gp2的默认值

kubectl edit sc gp2
1

storageclass.kubernetes.io/is-default-class: 'true'改为false

# 在 EKS 上安装 KubeSphere

  • 使用 kubectl 安装 KubeSphere,以下命令仅用于默认的最小安装。

    kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.0/kubesphere-installer.yaml
    
    kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.0/cluster-configuration.yaml
    
    
    1
    2
    3
    4

    开启devops:https://kubesphere.io/zh/docs/pluggable-components/devops/

  • 检查安装日志:

    kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
    
    1
  • 安装完成后,您会看到以下消息:

    **************************************************
    Collecting installation results ...
    #####################################################
    ###              Welcome to KubeSphere!           ###
    #####################################################
    
    Console: http://172.32.202.229:30880
    Account: admin
    Password: P@88w0rd
    
    NOTES:
      1. After you log into the console, please check the
         monitoring status of service components in
         "Cluster Management". If any service is not
         ready, please wait patiently until all components
         are up and running.
      2. Please change the default password after login.
    
    #####################################################
    https://kubesphere.io             2023-02-09 03:37:46
    #####################################################
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

# 访问 KubeSphere 控制台

现在已经安装了 KubeSphere,您可以按照以下步骤访问 KubeSphere 的 Web 控制台。

  • 查看 ks-console 服务。

    kubectl get svc -n kubesphere-system
    
    1
  • 执行kubectl edit svc ks-console -n kubesphere-system将 service 类型NodePort 更改为LoadBalancer,完成后保存文件。

    # Please edit the object below. Lines beginning with a '#' will be ignored,
    # and an empty file will abort the edit. If an error occurs while saving this file will be
    # reopened with the relevant failures.
    #
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        meta.helm.sh/release-name: ks-core
        meta.helm.sh/release-namespace: kubesphere-system
      creationTimestamp: "2022-05-08T10:21:08Z"
      labels:
        app: ks-console
        app.kubernetes.io/managed-by: Helm
        tier: frontend
        version: v3.1.0
      name: ks-console
      namespace: kubesphere-system
      resourceVersion: "2339"
      uid: 320a7b7c-5060-41d1-8768-be876b43ecd6
    spec:
      clusterIP: 10.100.207.124
      clusterIPs:
      - 10.100.207.124
      externalTrafficPolicy: Cluster
      ipFamilies:
      - IPv4
      ipFamilyPolicy: SingleStack
      ports:
      - name: nginx
        nodePort: 30880
        port: 80
        protocol: TCP
        targetPort: 8000
      selector:
        app: ks-console
        tier: frontend
      sessionAffinity: None
      type: LoadBalancer
    status:
      loadBalancer: {}
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
  • 执行kubectl get svc -n kubesphere-system获取您的 EXTERNAL-IP。

    # kubectl get svc -n kubesphere-system
    NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)        AGE
    ks-apiserver            ClusterIP      10.100.108.212   <none>                                                                    80/TCP         6m28s
    ks-console              LoadBalancer   10.100.160.240   ad107c54ee456744c91c8da0b9321f2c-1235661477.ap-east-1.elb.amazonaws.com   80:30880/TCP   6m25s
    ks-controller-manager   ClusterIP      10.100.126.96    <none>                                                                    443/TCP        6m28s
    openldap                ClusterIP      None             <none>                                                                    389/TCP        6m54s
    redis                   ClusterIP      10.100.218.34    <none>                                                                    6379/TCP       6m59s
    
    1
    2
    3
    4
    5
    6
    7
  • 使用 EKS 生成的 external-ip 访问 KubeSphere 的 Web 控制台。

  • 使用默认帐户和密码(admin/P@88w0rd)登录控制台。

# (未完)修改KubeSphere所在的node

https://www.modb.pro/db/378501

# 使用命令找到所有的deployment和statefulset:

kubectl get all -A | grep -i -E "deployment|statefulset" | grep -i kubesphere | awk '{print $1" "$2}'
找到:第一列是namespace,第二列是deployment/statefulset。
kubesphere-monitoring-system pod/notification-manager-deployment-78664576cb-tr8f9
kubesphere-controls-system deployment.apps/default-http-backend
kubesphere-controls-system deployment.apps/kubectl-admin
kubesphere-devops-system deployment.apps/devops-apiserver
kubesphere-devops-system deployment.apps/devops-controller
kubesphere-devops-system deployment.apps/devops-jenkins
kubesphere-logging-system deployment.apps/fluentbit-operator
kubesphere-logging-system deployment.apps/ks-events-exporter
kubesphere-logging-system deployment.apps/ks-events-operator
kubesphere-logging-system deployment.apps/ks-events-ruler
kubesphere-logging-system deployment.apps/kube-auditing-operator
kubesphere-logging-system deployment.apps/kube-auditing-webhook-deploy
kubesphere-logging-system deployment.apps/logsidecar-injector-deploy
kubesphere-monitoring-system deployment.apps/kube-state-metrics
kubesphere-monitoring-system deployment.apps/notification-manager-deployment
kubesphere-monitoring-system deployment.apps/notification-manager-operator
kubesphere-monitoring-system deployment.apps/prometheus-operator
kubesphere-system deployment.apps/ks-apiserver
kubesphere-system deployment.apps/ks-console
kubesphere-system deployment.apps/ks-controller-manager
kubesphere-system deployment.apps/ks-installer
kubesphere-system deployment.apps/minio
kubesphere-system deployment.apps/redis
kubesphere-monitoring-system replicaset.apps/notification-manager-deployment-78664576cb
kubesphere-devops-system statefulset.apps/s2ioperator
kubesphere-logging-system statefulset.apps/elasticsearch-logging-data
kubesphere-logging-system statefulset.apps/elasticsearch-logging-discovery
kubesphere-monitoring-system statefulset.apps/alertmanager-main
kubesphere-monitoring-system statefulset.apps/prometheus-k8s
kubesphere-monitoring-system statefulset.apps/thanos-ruler-kubesphere
kubesphere-system statefulset.apps/openldap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

使用命令输出完整的kubectl edit命令:

kubectl get all -A | grep -i -E "deployment|statefulset" | grep -i kubesphere | awk '{print "kubectl edit -n "$1" "$2}'
获得:
kubectl edit -n kubesphere-monitoring-system pod/notification-manager-deployment-78664576cb-tr8f9
kubectl edit -n kubesphere-controls-system deployment.apps/default-http-backend
kubectl edit -n kubesphere-controls-system deployment.apps/kubectl-admin
kubectl edit -n kubesphere-devops-system deployment.apps/devops-apiserver
kubectl edit -n kubesphere-devops-system deployment.apps/devops-controller
kubectl edit -n kubesphere-devops-system deployment.apps/devops-jenkins
kubectl edit -n kubesphere-logging-system deployment.apps/fluentbit-operator
kubectl edit -n kubesphere-logging-system deployment.apps/ks-events-exporter
kubectl edit -n kubesphere-logging-system deployment.apps/ks-events-operator
kubectl edit -n kubesphere-logging-system deployment.apps/ks-events-ruler
kubectl edit -n kubesphere-logging-system deployment.apps/kube-auditing-operator
kubectl edit -n kubesphere-logging-system deployment.apps/kube-auditing-webhook-deploy
kubectl edit -n kubesphere-logging-system deployment.apps/logsidecar-injector-deploy
kubectl edit -n kubesphere-monitoring-system deployment.apps/kube-state-metrics
kubectl edit -n kubesphere-monitoring-system deployment.apps/notification-manager-deployment
kubectl edit -n kubesphere-monitoring-system deployment.apps/notification-manager-operator
kubectl edit -n kubesphere-monitoring-system deployment.apps/prometheus-operator
kubectl edit -n kubesphere-system deployment.apps/ks-apiserver
kubectl edit -n kubesphere-system deployment.apps/ks-console
kubectl edit -n kubesphere-system deployment.apps/ks-controller-manager
kubectl edit -n kubesphere-system deployment.apps/ks-installer
kubectl edit -n kubesphere-system deployment.apps/minio
kubectl edit -n kubesphere-system deployment.apps/redis
kubectl edit -n kubesphere-monitoring-system replicaset.apps/notification-manager-deployment-78664576cb
kubectl edit -n kubesphere-devops-system statefulset.apps/s2ioperator
kubectl edit -n kubesphere-logging-system statefulset.apps/elasticsearch-logging-data
kubectl edit -n kubesphere-logging-system statefulset.apps/elasticsearch-logging-discovery
kubectl edit -n kubesphere-monitoring-system statefulset.apps/alertmanager-main
kubectl edit -n kubesphere-monitoring-system statefulset.apps/prometheus-k8s
kubectl edit -n kubesphere-monitoring-system statefulset.apps/thanos-ruler-kubesphere
kubectl edit -n kubesphere-system statefulset.apps/openldap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

依次修改kubesphere的所有deployment和statefulset的nodeselector

nodeSelector:
  devops: "yes"
1
2
  1. alertmanager特殊,它是由Alertmanager组件控制的,所以先要修改它的nodeSelector

  2. notification-manager特殊,它是由NotificationManager组件控制,所以要先修改它的nodeSelector

  3. prometheus特殊,它是由Prometheus组件控制,所以要先修改它的nodeSelector

    1. 因为prometheus是statefulset,且replica=1,需要将devops的某台机器加一个标签,并将这个标签也加入nodeSelector:

      kubectl label nodes ip-192-168-214-117.eu-central-1.compute.internal kubesphere-prometheus=yes
      
      1
#AWS#K8S#Kubesphere
Last Updated: 2023/11/08, 14:45:54
ElastiCacheForRedis启用密码
谷歌云创建GKE集群

← ElastiCacheForRedis启用密码 谷歌云创建GKE集群→

最近更新
01
谷歌云创建GKE集群
07-26
02
ElastiCacheForRedis启用密码
07-26
03
upload-to-gcs
06-29
更多文章>
Theme by Vdoing | Copyright © 2021-2024 Brc | MIT License | 浙ICP备19031881号-4
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式