当前位置: 首页 > news >正文

【Amazon】在Amazon EKS集群中安装部署最小化KubeSphere容器平台

文章目录

    • 一、准备工作
    • 二、部署 KubeSphere
    • 三、访问 KubeSphere 控制台
    • 四、安装Amazon EBS CSI 驱动程序
      • 4.1 集群IAM角色建立并赋予权限
      • 4.2 安装 Helm Kubernetes 包管理器
      • 4.3 安装Amazon EBS CSI 驱动程序
    • 五、常见问题
    • 六、参考链接

一、准备工作

  • Kubernetes 版本必须为:v1.20.x、v1.21.x、v1.22.x、v1.23.x、* v1.24.x、* v1.25.x 和 * v1.26.x。带星号的版本可能出现边缘节点部分功能不可用的情况。因此,如需使用边缘节点,推荐安装 v1.23.x。
  • 确保机器满足最低硬件要求:CPU > 1 核,内存 > 2 GB。
  • 在安装之前,需要配置 Kubernetes 集群中的默认存储类型。

前提:已经通过eksctl命令工具安装部署完成kubernetes集群。详细安装操作过程请参考:【Amazon】基于Amazon提供的托管式EKS通过eksctl命令部署Kubernetes集群-CSDN博客

二、部署 KubeSphere

确保机器满足安装的前提条件之后,可以按照以下步骤安装 KubeSphere。

  1. 执行以下命令开始安装:
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.0/kubesphere-installer.yamlkubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.0/cluster-configuration.yaml
  1. 检查安装日志:
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. 使用 kubectl get pod --all-namespaces 查看所有 Pod 是否在 KubeSphere 的相关命名空间中正常运行。如果是,请通过以下命令检查控制台的端口(默认为 30880):
kubectl get svc/ks-console -n kubesphere-system
  1. 确保在安全组中打开了端口 30880,并通过 NodePort (IP:30880) 使用默认帐户和密码 (admin/P@88w0rd) 访问 Web 控制台。

  2. 登录控制台后,您可以在系统组件中检查不同组件的状态。如果要使用相关服务,可能需要等待某些组件启动并运行。

image-20231119161735670

执行完成后的结果如下图所示:

image-20231119163138947

三、访问 KubeSphere 控制台

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

  • 查看 ks-console 服务。
kubectl get svc -n kubesphere-system

输出结果:

[root@awseksec2 ~]# kubectl get svc -n kubesphere-system
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
ks-apiserver            ClusterIP   10.100.154.120   <none>        80/TCP         14m
ks-console              NodePort    10.100.248.20    <none>        80:30880/TCP   14m
ks-controller-manager   ClusterIP   10.100.30.150    <none>        443/TCP        14m
  • 执行kubectl edit ks-console将 service 类型NodePort 更改为LoadBalancer,完成后保存文件。
# kubectl edit svc ks-console -n kubesphere-system
......
spec:clusterIP: 10.100.160.240externalTrafficPolicy: Clusterports:- name: nginxnodePort: 30880port: 80protocol: TCPtargetPort: 8000selector:app: ks-consoletier: frontendversion: v3.0.0sessionAffinity: Nonetype: LoadBalancer

输出结果:

[root@awseksec2 ~]# kubectl edit svc ks-console -n kubesphere-system
service/ks-console edited
[root@awseksec2 ~]# kubectl get svc -n kubesphere-system
NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP                                                                   PORT(S)        AGE
ks-apiserver            ClusterIP      10.100.154.120   <none>                                                                        80/TCP         15m
ks-console              LoadBalancer   10.100.248.20    a32bf8937c7f44f9d9b1293dbe399375-383389967.ap-northeast-3.elb.amazonaws.com   80:30880/TCP   15m
ks-controller-manager   ClusterIP      10.100.30.150    <none>                                                                        443/TCP        15m
  • 使用 EKS 生成的 external-ip 访问 KubeSphere 的 Web 控制台。

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

image-20231119163604595

image-20231119163651248

image-20231119170832806

四、安装Amazon EBS CSI 驱动程序

参考链接:Amazon EBS CSI 驱动程序 - Amazon EKS

  • 建立集群 IAM 角色
  • 赋予集群 IAM 角色
  • 安装 Amazon EBS CSI 驱动程序
  • 验证Amazon EBS CSI 驱动程序

4.1 集群IAM角色建立并赋予权限

# 建立集群IAM角色
$ curl -o eks-iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/release-1.3/docs/example-iam-policy.json$ aws iam create-policy \--policy-name AmazonEKS_EBS_CSI_Driver_Policy \--policy-document file://eks-iam-policy.json
$ aws iam create-policy \
>     --policy-name AmazonEKS_EBS_CSI_Driver_Policy \
>     --policy-document file://eks-iam-policy.json
{"Policy": {"PolicyName": "AmazonEKS_EBS_CSI_Driver_Policy","PolicyId": "ANPAX33KP53SETUUPEAVR","Arn": "arn:aws:iam::540852350692:policy/AmazonEKS_EBS_CSI_Driver_Policy","Path": "/","DefaultVersionId": "v1","AttachmentCount": 0,"PermissionsBoundaryUsageCount": 0,"IsAttachable": true,"CreateDate": "2023-11-19T08:51:59+00:00","UpdateDate": "2023-11-19T08:51:59+00:00"}
}# 赋予集群 IAM 角色
$ eksctl create iamserviceaccount \--name ebs-csi-controller-sa \--region=ap-northeast-3 \--namespace kube-system \--cluster xybeks-cluster \--attach-policy-arn arn:aws:iam::540852350692:policy/AmazonEKS_EBS_CSI_Driver_Policy \--approve \--override-existing-serviceaccounts# 验证角色 ARN
$ aws cloudformation describe-stacks \--stack-name eksctl-xybeks-cluster-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa \--query='Stacks[].Outputs[?OutputKey==`Role1`].OutputValue' \--output text

4.2 安装 Helm Kubernetes 包管理器

# Helm 是查找、分享和使用软件构建kubernetes的最优方式之一。
$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh$ chmod 700 get_helm.sh$ ./get_helm.sh$ helm version$ helm help

4.3 安装Amazon EBS CSI 驱动程序

# 安装Amazon EBS CSI 驱动程序
$ helm repo add aws-ebs-csi-driver https://kubernetes-sigs.github.io/aws-ebs-csi-driver
$ helm repo update--set image.repository=602401143452.dkr.ecr.ap-northeast-3.amazonaws.com/eks/aws-ebs-csi-driver \--set image.repository=602401143452.dkr.ecr.us-east-2.amazonaws.com/eks/aws-ebs-csi-driver \# 从镜像区域安装驱动
# https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/ass-ons-images.html
$ helm upgrade -install aws-ebs-csi-driver aws-ebs-csi-driver/aws-ebs-csi-driver \--namespace kube-system \--set image.repository=602401143452.dkr.ecr.ap-northeast-3.amazonaws.com/eks/aws-ebs-csi-driver \--set controller.serviceAccount.create=false \--set controller.serviceAccount.name=ebs-csi-controller-sa$ kubectl get pod -n kube-system -l "app.kubernetes.io/name=aws-ebs-csi-driver,app.kubernetes.io/instance=aws-ebs-csi-driver"---------------
kubectl delete pod -n kube-system -l "app.kubernetes.io/name=aws-ebs-csi-driver,app.kubernetes.io/instance=aws-ebs-csi-driver"
---------------# 验证Amazon EBS CSI 驱动程序
$ kubectl get storageclass# Verify dricer is running:
$ kubectl get pods -n kube-system   

image-20231119170706334

[root@awseksec2 ~]# kubectl get pod -n kube-system -l "app.kubernetes.io/name=aws-ebs-csi-driver,app.kubernetes.io/instance=aws-ebs-csi-driver"
NAME                                  READY   STATUS    RESTARTS   AGE
ebs-csi-controller-64b49d7f84-6g6rt   6/6     Running   0          35s
ebs-csi-controller-64b49d7f84-l5cgp   6/6     Running   0          34s
ebs-csi-node-6w5vw                    3/3     Running   0          35s
ebs-csi-node-bw9p8                    3/3     Running   0          34s
[root@awseksec2 ~]# kubectl get storageclass
NAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
gp2 (default)   kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  99m
[root@awseksec2 ~]# kubectl get pods -n kube-system
NAME                                  READY   STATUS    RESTARTS   AGE
aws-node-cvmjf                        1/1     Running   0          92m
aws-node-rs98c                        1/1     Running   0          92m
coredns-847b5d4fc5-csb75              1/1     Running   0          99m
coredns-847b5d4fc5-j47xr              1/1     Running   0          99m
ebs-csi-controller-64b49d7f84-6g6rt   6/6     Running   0          113s
ebs-csi-controller-64b49d7f84-l5cgp   6/6     Running   0          112s
ebs-csi-node-6w5vw                    3/3     Running   0          113s
ebs-csi-node-bw9p8                    3/3     Running   0          112s
kube-proxy-7m9ll                      1/1     Running   0          92m
kube-proxy-lvmvk                      1/1     Running   0          92m
snapshot-controller-0                 1/1     Running   0          48m

五、常见问题

🔴问题:在EKS集群中部署完KubeSphere容器平台,出现如下显示结果。是因为没有安装Amazon EBS CSI驱动程序造成的。

image-20231119163731525

✅解决:安装Amazon EBS CSI驱动程序。参考4.3安装Amazon EBS CSI驱动程序

image-20231119170813434

🔴问题:集群 OIDC 发布者 URL 必须存在 IAM OIDC 提供商。

Error: unable to create iamserviceaccount(s) without IAM OIDC provider enabled

image-20231119165654493
✅解决:添加IAM OIDC 提供商

[root@awseksec2 ~]# cluster_name=xybeks-cluster
[root@awseksec2 ~]# oidc_id=$(aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
[root@awseksec2 ~]# echo $oidc_id
CB4443455AF63EE8A9144875D7D4BD0C
[root@awseksec2 ~]# aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
[root@awseksec2 ~]# eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve
2023-11-19 08:55:48 []  will create IAM Open ID Connect provider for cluster "xybeks-cluster" in "ap-northeast-3"
2023-11-19 08:55:48 []  created IAM Open ID Connect provider for cluster "xybeks-cluster" in "ap-northeast-3"

参考链接:https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/enable-iam-roles-for-service-accounts.html

六、参考链接

🌏Helm

🌏Artifact Hub

🌏 在 Kubernetes 上最小化安装 KubeSphere

🌏 在 AWS EKS 上部署 KubeSphere

🌏Artifact Hub

🌏 在 Kubernetes 上最小化安装 KubeSphere

🌏 在 AWS EKS 上部署 KubeSphere

🌏将 Helm 与 Amazon EKS 结合使用 - Amazon EKS

相关文章:

  • 性能测试【二】:nmon的常用操作
  • Spring Boot 3.2.0 现已推出
  • Jquery ajax 进行网络请求,同步阻塞引起的UI线程阻塞 (loading图片不显示 )
  • 智安网络|如何最大限度地提高企业网络安全水平
  • HBase数据模型杂谈
  • 深入理解数据结构:队列的实现及其应用场景
  • 飞书如何接入ChatGPT-打造个人智能问答助手实现无障碍交流
  • 2、git进阶操作
  • mysql按年、季度、月,统计
  • 【go入门】表单
  • 聊聊Go语言的注释
  • Excel表中合并两个Sheet的方法?
  • ultrascale FPGA
  • 【linux】基本指令(中篇)
  • Redis常用操作及应用(一)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 10个确保微服务与容器安全的最佳实践
  • css选择器
  • JavaScript设计模式之工厂模式
  • Magento 1.x 中文订单打印乱码
  • Rancher如何对接Ceph-RBD块存储
  • Spring-boot 启动时碰到的错误
  • vue.js框架原理浅析
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 全栈开发——Linux
  • 深入浅出Node.js
  • 写给高年级小学生看的《Bash 指南》
  • 学习HTTP相关知识笔记
  • 终端用户监控:真实用户监控还是模拟监控?
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • !$boo在php中什么意思,php前戏
  • #pragma multi_compile #pragma shader_feature
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (6)添加vue-cookie
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (原)本想说脏话,奈何已放下
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .Family_物联网
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET 反射 Reflect
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net6 webapi log4net完整配置使用流程
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET连接数据库方式
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • .sh
  • @EnableWebMvc介绍和使用详细demo
  • @RequestMapping 的作用是什么?
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)