文章目录
- 一、准备工作
- 二、部署 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。
- 执行以下命令开始安装:
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
- 检查安装日志:
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
- 使用
kubectl get pod --all-namespaces
查看所有 Pod 是否在 KubeSphere 的相关命名空间中正常运行。如果是,请通过以下命令检查控制台的端口(默认为30880
):
kubectl get svc/ks-console -n kubesphere-system
-
确保在安全组中打开了端口
30880
,并通过 NodePort(IP:30880)
使用默认帐户和密码(admin/P@88w0rd)
访问 Web 控制台。 -
登录控制台后,您可以在系统组件中检查不同组件的状态。如果要使用相关服务,可能需要等待某些组件启动并运行。
执行完成后的结果如下图所示:
三、访问 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
)登录控制台。
四、安装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
[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驱动程序造成的。
✅解决:安装Amazon EBS CSI驱动程序。参考
4.3安装Amazon EBS CSI驱动程序
。
🔴问题:集群 OIDC 发布者 URL 必须存在 IAM OIDC 提供商。
Error: unable to create iamserviceaccount(s) without IAM OIDC provider enabled
✅解决:添加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