AWS EKS1.26+kubesphere3.4.1

1、前提准备

  • 1台EC2服务器Amazon Linux2,设置admin的角色

  • 安装 aws cli V2
​
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

unzip awscliv2.zip

sudo ./aws/install

export PATH=/usr/local/bin:$PATH

source ~/.bash_profile

​

  • 安装kubectl 1.27
​
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl

chmod +x ./kubectl

mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc

kubectl version --short --client

​

  • 安装 eksctl 最新版本
​
使用以下命令下载并提取最新版本的 eksctl。

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp

将提取的二进制文件移至 /usr/local/bin。

sudo mv /tmp/eksctl /usr/local/bin

使用以下命令测试您的安装是否成功。

eksctl version

​

  • 安装helm
​
wget https://get.helm.sh/helm-v3.11.1-linux-amd64.tar.gz

tar -zxvf helm-v3.11.1-linux-amd64.tar.gz 

sudo mv linux-amd64/helm /usr/local/bin/helm

​

2、创建集群

  • 使用eksctl安装EKS集群(这里自动新建了一个VPC,以及对应的子网。自动创建的子网,EKS 相关的标签已自动打好)

修改下面的集群名字

sudo yum install -y jq

export AWS_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')

echo "export AWS_REGION=${AWS_REGION}" | tee -a ~/.bash_profile

aws configure set default.region ${AWS_REGION}

export ACCOUNT_ID=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.accountId')

echo "export ACCOUNT_ID=${ACCOUNT_ID}" | tee -a ~/.bash_profile



export CLUSTER_NAME="eks-demo2"

需要根据实际场景修改下面的实例类型

cat << EOF > ${CLUSTER_NAME}-cluster.yaml

---

apiVersion: eksctl.io/v1alpha5

kind: ClusterConfig



metadata:

  name: ${CLUSTER_NAME} # EKS Cluster name

  region: ${AWS_REGION} # Region Code to place EKS Cluster

  version: "1.26"

  tags:

    karpenter.sh/discovery: ${CLUSTER_NAME}



vpc:

  cidr: "10.101.0.0/16" # CIDR of VPC for use in EKS Cluster

  nat:

    gateway: Disable # Disable NAT Gateway

karpenter:

  version: 'v0.30.0'

  createServiceAccount: true # default is false

  defaultInstanceProfile: 'KarpenterNodeInstanceProfile' # default is to use the IAM instance profile created by eksctl

  withSpotInterruptionQueue: true # adds all required policies and rules for supporting Spot Interruption Queue, default is false

iam:

  withOIDC: true # required



managedNodeGroups:

  - name: node-group # Name of node group in EKS Cluster

    instanceType: t3.xlarge # Instance type for node group

    desiredCapacity: 2 # The number of worker node in EKS Cluster

    volumeSize: 100  # EBS Volume for worker node (unit: GiB)

    volumeType: 'gp3'

    maxPodsPerNode: 100

    privateNetworking: false

    ssh:

      enableSsm: true

    iam:

      withAddonPolicies:

        imageBuilder: true # Add permission for Amazon ECR

        albIngress: true  # Add permission for ALB Ingress

        cloudWatch: true # Add permission for CloudWatch

        autoScaler: true # Add permission Auto Scaling

        ebs: true # Add permission EBS CSI driver

EOF



eksctl create cluster -f ${CLUSTER_NAME}-cluster.yaml

3、安装应的LB Controller

获取ID,确认 OIDC 是否已安装

aws eks describe-cluster --name ${CLUSTER_NAME} --query "cluster.identity.oidc.issuer" --output text

输出如下文本:

https://oidc.eks.cn-northwest-1.amazonaws.com.cn/id/36A3B4C5ED098358C3C724DA105EBC86

若没有安装,则执行:

安装OIDC

eksctl utils associate-iam-oidc-provider \

    --region ${AWS_REGION} \

    --cluster ${CLUSTER_NAME} \

    --approve

创建一个 IAM policy

下载 Amazon Load Balancer Controller IAM policy,该策略允许负载均衡器代表您调用 Amazon API

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json

使用上一步中下载的策略创建一个 IAM policy

aws iam create-policy \

    --policy-name AWSLoadBalancerControllerIAMPolicy_${CLUSTER_NAME}  \

    --policy-document file://iam_policy.json

            创建serviceaccount

eksctl create iamserviceaccount \

  --cluster=${CLUSTER_NAME} \

  --namespace=kube-system \

  --name=aws-load-balancer-controller \

  --role-name AmazonEKSLoadBalancerControllerRole_${CLUSTER_NAME} \

  --attach-policy-arn=arn:aws:iam::${ACCOUNT_ID}:policy/AWSLoadBalancerControllerIAMPolicy_${CLUSTER_NAME} \

  --approve

添加 eks-charts 存储库。

helm repo add eks https://aws.github.io/eks-charts

更新您的本地存储库,以确保您拥有最新的图表。

helm repo update

            进行安装

helm install aws-load-balancer-controller eks/aws-load-balancer-controller \

  -n kube-system \

  --set clusterName=${CLUSTER_NAME} \

  --set serviceAccount.create=false \

  --set serviceAccount.name=aws-load-balancer-controller \

  --set enableShield=false \

  --set enableWaf=false \

  --set enableWafv2=false \

     

验证控制器是否已安装。

kubectl get deployment -n kube-system aws-load-balancer-controller

输出示例如下。

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE

aws-load-balancer-controller   2/2     2            2           84s

  • 安装EBS CSI驱动
eksctl create iamserviceaccount \

    --name ebs-csi-controller-sa \

    --namespace kube-system \

    --cluster ${CLUSTER_NAME} \

    --role-name AmazonEKS_EBS_CSI_DriverRole_${CLUSTER_NAME} \

    --role-only \

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

    --approve



eksctl create addon --name aws-ebs-csi-driver --cluster ${CLUSTER_NAME} --service-account-role-arn  arn:aws:iam::${ACCOUNT_ID}:role/AmazonEKS_EBS_CSI_DriverRole_${CLUSTER_NAME} –force

4、安装kubesphere

4.1、最小化安装

  • 使用 kubectl 安装 KubeSphere,

以下命令仅用于默认的最小安装。

kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/kubesphere-installer.yaml

kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/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

安装完成后,您会看到以下消息:

  • #####################################################
    ###              Welcome to KubeSphere!           ###
    #####################################################
    Account: admin
    Password: P@88w0rd
    NOTES:
      1. After logging into the console, please check the
        monitoring status of service components in
        the "Cluster Management". If any service is not
        ready, please wait patiently until all components
        are ready.
      2. Please modify the default password after login.
    #####################################################
    https://kubesphere.io             2020-xx-xx xx:xx:xx

  • 访问 KubeSphere 控制台

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

  • 查看 ks-console 服务。

kubectl get svc -n kubesphere-system

但是这种内网 IP 无法直接用于外部访问,需要通过NodePort来暴露external-ip

  • 执行kubectl edit ks-console将 service 类型NodePort 更改为LoadBalancer,并且增加三条注解,完成后保存文件。

kubectl edit svc ks-console -n kubesphere-system

    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip

    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing

    service.beta.kubernetes.io/aws-load-balancer-type: external

  • #
    ......
    spec:
      clusterIP: 10.100.160.240
      externalTrafficPolicy: Cluster
      ports:
      - name: nginx
        nodePort: 30880
        port: 80
        protocol: TCP
        targetPort: 8000
      selector:
        app: ks-console
        tier: frontend
        version: v3.0.0
      sessionAffinity: None
      type: LoadBalancer

  • 执行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

  • 使用 EKS 生成的 external-ip 访问 KubeSphere 的 Web 控制台。

注:这里在自动创建 aws 的 NLB,需要几分钟后,才能通过个external-ip正常访问

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

4.2、网关(Ingress)设置

针对k8s的外网暴露,AWS做了优化,让ALB直接路由到k8sservice,如下图所示。此种方式性能更优,更稳定,但不支持跨域的相关配置 (跨域的配置通常在nginx或者应用程序内部实现)。

为了实现跨域名配置,采用如下图的做法,LB通过Nginx Ingressk路由到服务。如果想 100 兼容k8s的特性,建议此种办法做为实现。

 

 Kubesphere中进行网关配置 (2到3步完成配置)

进入kubeshpere。

1、启动用网设置,如下图所示。

2.配置网关

    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip

    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing

    service.beta.kubernetes.io/aws-load-balancer-type: external

注:复制时,去掉“:”号

3. 网关设置完成后,会发现在服务中会出一个router的服务,并且具有外网访问地址(NLB的地址),拷贝这里的外网地址作为,与域名绑定,做CName映射。(测试阶段,也可以使用本地hosts配置)

4、后续可以正常使用应用网关配置 路由。涉及的SSL证书也在这里上传和创建。

5、部署一个示例应用

创建deployment

后面继续下一步,一路保持默认设置,直到创建按钮,点击创建。

创建service

后面的操作,保持默认设置。

创建应用路由(Ingress)

后面一路保持默认设置。

在本地电脑配置hosts后,访问如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/294573.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pod进阶版(2)

startupProbe启动探针 如果探测失败,pod的状态是notready&#xff0c;启动探针会重启容器 启动探针没有成功之前&#xff0c;后续的探针都不会执行。启动探针成功之后&#xff0c;在pod的后续生命周期不会用启动探针 exec方式 正确示范 apiVersion: v1 kind: Pod metadata…

【React系列】react-router

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识react-router 1.2. 前端路由原理 前端路由是如何做到URL和内容进行映射呢&#xff1f;监听URL的改变。 UR…

【优选算法】专题三:二分查找 --- 34. 在排序数组中查找元素的第一个和最后一个位置

从今天开始,xxxflower 带着小伙伴们一起学习算法 ~ 今天我们要写的题目是: 34. 在排序数组中查找元素的第一个和最后一个位置 以下是题目的详细解析: class Solution {public int[] searchRange(int[] nums, int target) {// 判断数组为空的情况下返回-1,-1int[] ret new in…

在centos上安装WordPress 及创建配置文件无反应的解决方案

一、安装Apache服务 1.直接在命令行中输入以下命令即可,顺便安装编译组件&#xff1a; yum install -y httpd yum install -y httpd-devel2.启动Apache服务和设置Apache自启&#xff1a; 1 systemctl start httpd 2 systemctl enable httpd 3.添加一个测试页面&#xff0c;…

4《数据结构》

文章目录 绪论逻辑结构存储结构【物理结构】顺序和链式存储区别顺序表和数组区别数组和链表的区别链表结点概念链表为空条件链表文章http://t.csdnimg.cn/dssVK二叉树B树B树【MYSQL索引默认数据结构】B树和B树区别冒泡排序插排选排快排 绪论 数据结构&#xff1a;研究非数值计…

Html5实用个人博客留言板模板源码

文章目录 1.设计来源1.1 主界面1.2 认识我界面1.3 我的日记界面1.4 我的文章列表界面和文章内容界面1.5 我的留言板界面 2.演示效果和结构及源码2.1 效果演示2.2 目录结构2.3 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151…

关于MySQL Cluster

目录 1.MySQL Cluster2.MySQL Cluster架构3.MySQL Cluster 与 MySQL 主从架构有什么区别4.参考 MySQL Cluster是MySQL的一个高可用性&#xff0c;高性能的分布式数据库解决方案。它结合了内存数据库和共享无状态架构的技术&#xff0c;提供了99.999%的可用性&#xff0c;满足严…

经典目标检测YOLO系列(一)YOLOV1的复现(1)总体架构

经典目标检测YOLO系列(一)实现YOLOV1网络(1)总体架构 实现原版的YOLOv1并没有多大的意义&#xff0c;因此&#xff0c;根据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;在不脱离YOLOv1的大部分核心理念的前提下&#xff0c;重构一款较新的YOLOv1检测器&#xff0c;来…

【EI会议征稿通知】第十届先进制造技术与应用材料国际学术会议(ICAMMT 2024)

第十届先进制造技术与应用材料国际学术会议&#xff08;ICAMMT 2024&#xff09; The 10th International Conference on Applied Materials and Manufacturing Technology 至今ICAMMT已连续举办九届&#xff0c;会议先后在三亚、杭州、清远等城市成功召开。每一届最终征集收…

K8S--部署SpringBoot项目实战

原文网址&#xff1a;K8S--部署SpringBoot项目实战-CSDN博客 简介 本文介绍K8S如何部署SpringBoot项目。 1.生成应用的docker镜像 把SpringBoot项目的jar包打包为docker镜像&#xff0c;见&#xff1a;Docker Compose--部署SpringBoot项目--实战-CSDN博客 创建后的镜像名称…

Django和Vue项目运行过程中遇到的问题及解决办法

这是我从CSDN上边买来的一个系统的资源&#xff0c;准备在此基础上改成自己的系统&#xff0c;但是在运行项目这一步上都把自己难为了好几天&#xff0c;经过不断的摸索&#xff0c;终于完成了第一步&#xff01;&#xff01;&#xff01; 如果大家也遇到同样的问题&#xff0…

Docker基础学习(配置、命令)

镜像加速 登录阿里云 docker run hello-world分析命令&#xff1a; 开始–>docker在本机中寻找镜像–>有–>以该镜像为模版生产容器实例运行&#xff1b; 开始–>docker在本机中寻找镜像–>无–>去远端下载镜像并运行&#xff0c;若远端无此镜像则返回错误…

【教育会议征稿】第五届教育、知识和信息管理国际学术会议(ICEKIM 2024)

第五届教育、知识和信息管理国际学术会议&#xff08;ICEKIM 2024&#xff09; 2024 5th International Conference on Education, Knowledge and Information Management 第五届教育、知识和信息管理国际学术会议&#xff08;ICEKIM 2024&#xff09;定于4月19至21日在中国成…

Vue-3、模板语法

1、插值语法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>模板语法</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2…

Java程序设计——GUI设计

一、目的 通过用户图形界面设计&#xff0c;掌握JavaSwing开发的基本方法。 二、实验内容与设计思想 实验内容&#xff1a; 课本验证实验&#xff1a; Example10_6 图 1 Example10_7 图 2 图 3 Example10_15 图 4 设计思想&#xff1a; ①学生信息管理系统&#xff1a…

JS 手写 new 函数

工作中我们经常会用到 new 关键字&#xff0c;new 一个构造函数生成一个实例对象&#xff0c;那么new的过程中发生了什么呢&#xff0c;我们今天梳理下 创建一个对象对象原型继承绑定函数this返回对象 先创建一个构造函数&#xff0c;原型上添加一个方法 let Foo function (n…

Struts2 远程代码执行漏洞S2-001分析

自 Struts2 在 2007 年爆出第一个远程代码执行漏洞 S2-001 以来&#xff0c;在其后续的发展过程中不断爆出更多而且危害更大的远程代码执行漏洞&#xff0c;而造成 Struts2 这么多 RCE 漏洞的主要原因就是 OGNL 表达式。这里以 Struts2 的第一个漏洞 S2-001 为例来对 Struts2 远…

UE相关杂项笔记

1.PAK包解析 UE4如何反向查找Pak里面包含哪些文件 - 哔哩哔哩 CMD控制台命令输入 D:&quot;Epic Games&quot;\UE_5.1\Engine\Binaries\Win64\UnrealPak.exe 包路径 -list *文件夹带空格时 添加“ ”包裹住文件夹名 解包工具路径 UE引擎安装路径\UE_5.1\Engine\Binarie…

HarmoryOS Ability页面的生命周期

接入穿山甲SDK app示例&#xff1a; android 数独小游戏 经典数独休闲益智 广告接入示例: Android 个人开发者如何接入广告SDK&#xff0c;实现app流量变现 Ability页面的生命周期 学习前端&#xff0c;第一步最重要的是要理解&#xff0c;页面启动和不同场景下的生命周期的…

unity中0GC优化方案《zstring》

文章目录 序言简介GC带来的问题性能瓶颈玩家体验受损 使用方式 序言 游戏开发秉承遇到好东西要分享&#xff0c;下面介绍zstring&#xff0c;感谢作者开源无私奉献 源码地址&#xff1a;https://github.com/871041532/zstring 简介 GC带来的问题 性能瓶颈 GC暂停主线程执行…
最新文章