IAM上用户权限策略 添加上以下
进入用户详情页面
选择命令行界面 (CLI)
在EC2 机器上输入 aws configure 进行配置
在创建eks以后需要在ec2上
可以通过 yum
安装 AWS_CLI
sudo yum install aws-cli -y
安装eksctl, 参考https://docs.aws.amazon.com/zh_cn/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-eksctl.html
# 使用以下命令下载并提取最新版本的 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 0.34.0 版本或更高版本。
eksctl version
安装kubectl
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.26.4/2023-05-11/bin/linux/amd64/kubectl
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.26.4/2023-05-11/bin/linux/amd64/kubectl.sha256 sha256sum -c kubectl.sha256 chmod +x ./kubectl sudo
mv kubectl /usr/bin/kubectl
在aws 上创建eks和计算节点
参考 https://blog.csdn.net/zgpeace/article/details/139584256
在aws 更新kubeconfig后会出现的问题
aws eks update-kubeconfig --region us-west-2 --name k8s
kubectl get nodes
kubectl get cs
kubectl config get-contexts
cd .aws
cat credentials
eksctl 的使用当你直接使用kubectil相关的命令时候,报错:
couldn't get current server API group list: the server has asked for the client to provide credentials
这说明的kubectl,还没有配置到访问 EKS 集群的凭证。
主体ARN 填写用户名
选择AmazonEKSAdminPolicy, 点下一步然后创建
访问策略需要添加上下面两项(AmazonEKSAdminPolicy, AmazonEKSClusterAdminPolicy)
完成后查看集群的详情
编写部署的yml文件, 使用kubectl apply -f xxx.yml
准备deployment 部署文件
mysql-secret.yml
apiVersion: v1
kind: Secret
metadata:
name: mysql-credentials
namespace: springboot
type: Opaque
data:
username: YWRtaW4K
password: ZGVuZzEyMzQ1Ngo=
spring-backend-dplm.yml 文件
---
apiVersion: v1
kind: Service
metadata:
name: springboot-app-service
namespace: springboot
spec:
selector:
app: springboot-app
ports:
- port: 8080
targetPort: 8080
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-app
namespace: springboot
spec:
replicas: 3
selector:
matchLabels:
app: springboot-app
template:
metadata:
labels:
app: springboot-app
spec:
containers:
- name: springboot-app
image: 043942809940.dkr.ecr.ap-south-1.amazonaws.com/springboot/backend:latest
imagePullPolicy: Always
env:
- name: SPRING_DATASOURCE_URL
value: jdbc:mysql://internet-db-1.cfiee6wg8md5.ap-south-1.rds.amazonaws.com:3306/springboot
- name: SPRING_DATASOURCE_USERNAME
value: 'admin'
- name: SPRING_DATASOURCE_PASSWORD
value: 'xxx'
部署成功后检查LoadBalancer的DNS 地址
浏览器上检查,接口通的
构造前端镜像并推送到
利用apprunner创建服务 进行部署
https://blog.csdn.net/keeppractice/article/details/132916879
利用 ECS创建服务 进行部署 例子
https://blog.csdn.net/SinnetCloud/article/details/100231237
通过 ECS 进行部署
创建task-definition.json
{
"family": "dev-springboot-backend-task",
"executionRoleArn": "ecsTaskExecutionRole",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"name": "springboot-backend",
"image": "043942809940.dkr.ecr.ap-south-1.amazonaws.com/springboot/backend:latest",
"portMappings": [
{
"containerPort": 8080,
"hostPort": 8080,
"protocol": "tcp"
}
],
"environment": [
{"name": "SPRING_DATASOURCE_URL", "value": "jdbc:mysql://internet-db-1.cfiee6wg8md5.ap-south-1.rds.amazonaws.com:3306/springboot"},
{"name": "SPRING_DATASOURCE_USERNAME", "value": "admin"},
{"name": "SPRING_DATASOURCE_PASSWORD", "value": "deng123456"}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/dev-springboot",
"awslogs-region": "ap-south-1",
"awslogs-stream-prefix": "springboot"
}
}
}
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "2048",
"memory": "4096"
}
使用下面命令进行创建
aws ecs register-task-definition --cli-input-json file:task-definition.json
executionRoleArn的创建在IAM Role里
指定服务为Elastic Container Service Task
添加权限AmazonECSTaskExecutionRolePolicy
运行新任务
ECS 创建service
利用CodeCommit实现CICD
1, 添加AWSCodeCommitPowerUser的IAM user权限策略
2 创建 Git 凭据,以便通过 HTTPS 连接到 CodeCommit
使用HTTPS连接和 Git 凭据,您可以在中生成静态用户名和密码IAM。然后,您可以在 Git 和支持 Git 用户名及密码身份验证的任何第三方工具中使用这些凭证。大多数IDEs开发工具都支持这种方法。这是最简单、最简单的连接方法 CodeCommit。
生成凭证
在codeBuild 里创建一个项目, 添加和构建相关的环境变量和使用buildspec.yml文件作为构建文件
进入IAM管理页面,在角色中找到第一步中角色名称。在权限中添加AmazonS3FullAccess
CodeBuild
buildspec.yml里内容
version: 0.2
env:
variables:
AWS_ACCOUNT_ID: "xxx"
AWS_REGION: "ap-northeast-2"
IMAGE_REPO_NAME: "springboot/hello"
phases:
install:
commands:
- echo "Installing Maven..."
- yum install -y maven
- echo "Installing Docker..."
- yum install -y docker
- docker info
- docker pull maven:3.8.5-openjdk-17
pre_build:
commands:
- echo "Building the Maven project..."
- docker run --rm -v $(pwd)/springTest2:/usr/src/mymaven -w /usr/src/mymaven maven:3.8.5-openjdk-17 mvn clean install
build:
commands:
- echo "Building the Docker image..."
- docker build -t $IMAGE_REPO_NAME:latest .
- echo "Logging in to Amazon ECR..."
- aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
- echo "Tagging the Docker image..."
- docker tag $IMAGE_REPO_NAME:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$IMAGE_REPO_NAME:latest
post_build:
commands:
- echo "Pushing the Docker image to ECR..."
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$IMAGE_REPO_NAME:latest
- echo "Updating ECS service with the new image..."
artifacts:
files:
- '**/*'
CodePipline
利用CodePipline 把CodeCommit-> CodeBuild -> deploy to ECS 串起来可以做到CI/CD 部署, 关于EKS 部署aws没有提供配置的地方需要手写shell脚本去实现