创建一个网络和相对应的子网

image-20241210142318743

创建集群

1.点击创建集群

image-20241210142448970

2.配置选项,自定义配置

image-20241210142544981

3.集群配置

image-20241210143337684

4.Kubernetes 版本设置

image-20241210150727195

5.剩下的选择默认点击下一步继续
6.设置联网

image-20241210155550872

7.集群端点访问

image-20241210160259800

8.点击下一步选择指标控制面板日志记录

image-20241210155951972

9.选择插件

image-20241210160138075

创建redis


image-20241210170547880

创建s3


image-20241211125107158

连接和访问eks集群


环境准备:

官方eks集群连接文档(https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/create-kubeconfig.html)

1.更新aws 的授权凭证,使角色和创建eks集群的用户相同

Amazon EKS 使用带kubectlaws eks get-token命令进行集群身份验证。默认情况下,AWS CLI 使用以下命令返回的相同原理:

aws sts get-caller-identity

输入后返回的值

image-20241211131708094

2.确保aws cli的版本为2
aws --version

image-20241211132123706

自动创建 kubeconfig 文件

1.创建kubeconfig文件

为集群创建或更新**kubeconfig文件。将region-code替换为您的集群所在的AWS区域,另外my-cluster**替换为您的集群的名称。

aws eks update-kubeconfig --region region-code --name my-cluster

image-20241211133150430

2.下载kubctl
[root@ip-10-0-1-234 ~]# curl -LO https://dl.k8s.io/release/v1.31.0/bin/linux/amd64/kubectl

# 服务文件可执行权限
[root@ip-10-0-1-234 ~]# chmod 755 kubectl 

# 移动到/bin目录下面
[root@ip-10-0-1-234 ~]# mv kubectl /bin
3.测试配置
kubectl get svc

示例输出如下。

NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   1m
4.问解决

如果出现一直连接不上的情况的话可以尝试重新安装一下aws的cli

但是主要的问题还是去查看一下eks有没有附加上所需要的权限

创建EKS集群的计算节点


image-20241211143531647

第一步:配置节点组

image-20241211144126819

其余的不动,点击下一步

image-20241211144210650

第二步:设置计算和扩展配置

节点组计算和拓展配置:按照比赛要求选取

image-20241211144330554

节点组扩缩配置:刚开始创建时选一个

image-20241211144509897

剩下配置不对,点击下一步

image-20241211144605798

第三步:指定网络

image-20241211144730514

第四步:创建

检查没有问题后创建节点

部署root服务和配置文件文件


将文件传入服务并赋予服务可执行权限

# chmod 755 root 
# chmod 755 stub 
[root@ip-10-0-1-234 ec2-user]# ll
total 22080
-rwxr-xr-x. 1 ec2-user ec2-user 11096064 Dec 11 07:06 root
-rwxr-xr-x. 1 ec2-user ec2-user 11513856 Dec 11 07:06 stub

查看服务需要的参数 (放入appconfig)

[root@ip-10-0-1-234 ec2-user]# ./root -h
2eaa1af4-f8a8-4337-86c6-465068774055
Usage of ./root:
  -application string
        Application Name of AWS appConfig (default "Unicorn")
  -configProfile string
        Configuration profile of AWS appConfig (default "Unicorn")
  -environment string
        Environment Name of AWS appConfig (default "Production")
  -region string
        AWS Region where this app is running (default "us-east-1")

Appconfig

1.点击入门

image-20241211151952888

2.选择类型

image-20241211152143673

3.定义配置

image-20241211191443888

{ 
"RedisHost": "redis1.yfwyr3.ng.0001.use1.cache.amazonaws.com", 
"RedisPort": "6379", 
"FsPath": "/mnt/", 
"Port": 80, 
"Bucket": "unicorn-us-es-ws-1211" 
}
4.定义应用程序名称

image-20241211191552748

5.创建环境

image-20241211191718663

6.开始部署

image-20241211191842302

连接Appconfig,并把服务润起来

配置参数

Usage of ./root:
-application string
Application Name of AWS appConfig (default "Unicorn")
-configProfile string
Configuration profile of AWS appConfig (default "Unicorn")
-environment string
Environment Name of AWS appConfig (default "Production")
-region string
AWS Region where this app is running (default "us-east-1")

./root -application root-server -configProfile root-config -environment dev -region us-east-1

image-20241211195236609

构建镜像

eks服务其实是一个k8s集群,k8s集群是负责管理容器的,那我们就先要构建一个镜像

1.编写Dokcerfile
# 创建目录
[root@ip-10-0-1-234 ec2-user]# mkdir root-server 
[root@ip-10-0-1-234 ec2-user]# mv root root-server/
[root@ip-10-0-1-234 ec2-user]# ls
root-server  stub
[root@ip-10-0-1-234 ec2-user]# cd root-server/

# 安装docker 
yum install docker -y
systemctl start docker 
systemctl enable docker

# Dokcerfile
vi Dockerfile
FROM public.ecr.aws/amazonlinux/amazonlinux:latest
RUN yum update -y && \
    mkdir /app
WORKDIR /app
COPY root /app/root
EXPOSE 80
ENTRYPOINT /app/root -application root-server -configProfile root-config -environment dev -region us-east-1

# 创建images
docker build -t root-server .

# 检查
[root@ip-10-0-1-234 root-server]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
root-server   latest    c63c284dc803   14 seconds ago   225MB
2.启动容器

运行容器的时候可能需要对应的权限,我们可以将 /root/.aws 下的 config credentials 文件映射到容器中

docker run --rm -it -p 80:80 -v /root/.aws:/root/.aws root-server
3.将容器推送到ECR上去

image-20241211204406738

# 推送镜像的命令
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 211125438445.dkr.ecr.us-east-1.amazonaws.com
docker tag root-server:latest 211125438445.dkr.ecr.us-east-1.amazonaws.com/root-server:latest
docker push 211125438445.dkr.ecr.us-east-1.amazonaws.com/root-server:latest

记录视频1.24:44

https://docs.aws.amazon.com/eks/latest/userguide/managing-auth.html

去访问文档中的这个项目:[使用 kubectl 访问集群](https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/create-kubeconfig.html)

aws sts get-caller-identity

查看ec2的登入信息

image-20240830224642429

以为权限的问题我把不能查看信息,所有我能可以使用之前创建的teamrole用户登入

[root@ip-10-0-1-251 ~]# aws configure 
AWS Access Key ID [None]: AKIATCKAOU3HLEUAHCY5 
AWS Secret Access Key [None]: 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
Default region name [None]: us-east-1
Default output format [None]: 

登入上后我们再去查看AWS的授权凭证

image-20240830224929925

可以了,接下来

使用 AWS CLI 创建 kubeconfig

aws eks update-kubeconfig --region us-east-1 --name cluster

image-20240830231730922

查看一下他给的地址

image-20240830231932726

测试配置

kubectl get svc

示例输出如下。

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

如果您收到任何授权或资源类型错误,请参阅故障排除主题中的 [未经授权或访问被拒绝 (kubectl)](https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/troubleshooting.html#unauthorized)。

image-20240830234323795

如果无法访问需要去更改一下iam用户的权限

kubectl get node

查看计算服务

image-20240830234504864

现在是没有的状态我们去aws控制太中创建一下

image-20240830234637741

image-20240830235329648

下一步,在点击下一步

image-20240830235504950

二.配置服务

1.创建config

将配置文件导入后启动,发现他需要四个服务

image-20240831113457760

在aws控制台中搜素appconfig,从文档中找去一段更服务的json配置文件复制进去

image-20240831114136920

点击下一步,应用服务名称设为root-server

image-20240831114240610

保存并继续部署

2.运行服务

在程序上运行

image-20240831121827930

连接成功,但是我们在本地是跑不起来的,我们需要构架一个docker镜像

3.创建docker镜像

先将文件整理一下,保存到一个目录

image-20240831122536774

安装docker并设置自启动

yum install docker
systemctl start docker
systemctl enable docker
systemctl status docker

创建dockerfile文件

vi Dockerflie
----------------------------------------------------
FROM centos
COPY server /
ENTRYPOINT /server -application server-root -configProfile config -environment dev -region us-east-1 
----------------------------------------------------

创建镜像

docker build -t server:root .
docker images

4.运行docker

image-20240831132805731

发现无法获得检索凭证,所以我们要让他主动获取凭证/root/.aws

docker run --rm -it -v /root/.aws:/root/.aws server:root

image-20240831133800575

5.上传镜像

把镜像放到ecr上,在ecr上创建私有存储库

image-20240831173033871

点击查看存储库复制命令

image-20240831173129035

最后得到这个表示上传成功

三.在k8s运行镜像

k8s是一个调度系统我们需要去写一个配置文件去运行镜像,我们这次选择deploy进行调度

1.上传镜像到erc

先创建一个k8s的目录用于存放文件

mkdir k8s

将yaml文件写入deploy-root.yaml

vi deploy-root.yaml
--------------------------------------------------------
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-root
spec:
  replicas: 1
  selector:
    matchLabels:
      app: root
  template:
    metadata:
      labels:
        app: root
    spec:
      containers:
      - name: server-root
        image: 211125446350.dkr.ecr.us-east-1.amazonaws.com/server:root
------------------------------------------------------------

保存完后运行kubectl apply -f deplooy-root.yaml

image-20240831173813072

可以看见kubectl给我们创建了一个deployment,我们可以使用这个命令进行检查

kubectl get deploy

image-20240831174236871

确实已经创建成功,那么具体他创建的容器叫上面呢

kubectl get pod

image-20240831174357858

但是它显示不能运行,查看一下他的日志

kubectl logs deploy-root-7cc959688c-8csfd

image-20240831174523757

发现没有对应权限,我们重新看会文档

image-20240831174615463

2.为 Kubernetes 服务账户分配 IAM 角色

需要创建unicorn角色

image-20240831174743711

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

视频教程 1:34:29/3:24:23

创建 IAM 角色并将其与 Kubernetes 服务账户关联。

创建OIDC

image-20240831155849501

  1. 如果您有要分派 IAM 角色的现有 Kubernetes 服务账户,则您可以跳过此步骤。

    创建 Kubernetes 服务账户。将以下内容复制到您的设备。将 my-service-account 替换为所需的名称,如有必要,将 default 替换为其他命名空间。如更改 default,则命名空间必须已经存在。

    cat >my-service-account.yaml <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: sa1
      namespace: default
    EOF
    kubectl apply -f my-service-account.yaml
    

image-20240831185458083

2.创建角色

确认角色和服务账户配置正确。

  1. 确认 IAM 角色的信任策略配置正确。

    aws iam get-role UnicornRole my-role --query Role.AssumeRolePolicyDocument

    示例输出如下。

    {
        "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:sub": "system:serviceaccount:default:my-service-account",
                        "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
                    }
                }
            }
        ]
    }

绑定用户

kubectl edit sa sa1

image-20240901142738024

更改这个iam用户也可以

3.配置 Pods 以使用 Kubernetes 服务账户

https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/pod-configuration.html

改完配置文件后,重新上传一下配置

kubectl apply -f my-deployment.yaml

image-20240831185543214

四.连接eks集群

应为我们的eks集群是在内外中的我们没法访问,需要使用其他的方法

image-20240831190019085

详信息可以看这一片文档

1.创建iam角色

创建ELBControllerRole角色

2.创建yaml配置文本

  1. 将以下内容复制到您的设备。请将 111122223333 替换为您的账户 ID。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws: 替换为 arn:aws-us-gov:。替换文本后,运行修改后的命令可创建 aws-load-balancer-controller-service-account.yaml 文件。
cat >aws-load-balancer-controller-service-account.yaml <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/name: aws-load-balancer-controller
  name: aws-load-balancer-controller
  namespace: kube-system
  annotations:
    eks.amazonaws.com/role-arn: 
    arn:aws:iam::211125446350:role/ELBControllerRole
EOF

运行一下

image-20240831192808054

3.使用 Helm 安装 AWS Load Balancer Controller

1.安装helm

wget https://get.helm.sh/helm-v3.15.4-linux-amd64.tar.gz
tar -zxvf helm-v3.15.4-linux-amd64.tar.gz 
[root@ip-10-0-1-251 k8s]# ls
aws-load-balancer-controller-service-account.yaml  deploy-root.yaml  helm-v3.15.4-linux-amd64.tar.gz  linux-amd64  my-service-account.yaml
[root@ip-10-0-1-251 k8s]# cd linux-amd64/
[root@ip-10-0-1-251 linux-amd64]# ls
LICENSE  README.md  helm
[root@ip-10-0-1-251 linux-amd64]# 
[root@ip-10-0-1-251 linux-amd64]# cp helm /bin
[root@ip-10-0-1-251 linux-amd64]# 
[root@ip-10-0-1-251 linux-amd64]# helm
The Kubernetes package manager

Common actions for Helm:

2.安装 AWS Load Balancer Controller

使用 [Helm V3](https://helm.sh/) 安装 AWS Load Balancer Controller
  1. 添加 eks-charts Helm 图表存储库。AWS 在 GitHub 上维护[此存储库](https://github.com/aws/eks-charts)。

    helm repo add eks https://aws.github.io/eks-charts
    
  2. 更新您的本地存储库,以确保您拥有最新的图表。

    helm repo update eks
    
  3. 安装 AWS Load Balancer Controller。

    my-cluster 替换为您的集群名称。在以下命令中,aws-load-balancer-controller 是您在上一步中创建的 Kubernetes 服务账户。

    有关配置 Helm 图表的更多信息,请参阅 GitHub 上的 [values.yaml](https://github.com/aws/eks-charts/blob/master/stable/aws-load-balancer-controller/values.yaml)

    helm u'ninstall aws-load-balancer-controller eks/aws-load-balancer-controller \
      -n kube-system \
      --set clusterName=cluster \
      --set serviceAccount.create=false \
      --set serviceAccount.name=aws-load-balancer-controller 
    

image-20240831194819459

创建成功

​ 4.检查是否在运行

kubectl get pod -A

image-20240831194942035

能看到他已经在运行了

image-20240831114357663