创建一个网络和相对应的子网
创建集群
1.点击创建集群
2.配置选项,自定义配置
3.集群配置
4.Kubernetes 版本设置
5.剩下的选择默认点击下一步继续
6.设置联网
7.集群端点访问
8.点击下一步选择指标和控制面板日志记录
9.选择插件
创建redis
创建s3
连接和访问eks集群
环境准备:
官方eks集群连接文档(https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/create-kubeconfig.html)
1.更新aws 的授权凭证,使角色和创建eks集群的用户相同
Amazon EKS 使用带kubectl
的aws eks get-token
命令进行集群身份验证。默认情况下,AWS CLI 使用以下命令返回的相同原理:
aws sts get-caller-identity
输入后返回的值
2.确保aws cli的版本为2
aws --version
自动创建 kubeconfig
文件
1.创建kubeconfig文件
为集群创建或更新**kubeconfig
文件。将region-code
替换为您的集群所在的AWS区域,另外my-cluster
**替换为您的集群的名称。
aws eks update-kubeconfig --region region-code --name my-cluster
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集群的计算节点
第一步:配置节点组
其余的不动,点击下一步
第二步:设置计算和扩展配置
节点组计算和拓展配置:按照比赛要求选取
节点组扩缩配置:刚开始创建时选一个
剩下配置不对,点击下一步
第三步:指定网络
第四步:创建
检查没有问题后创建节点
部署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.点击入门
2.选择类型
3.定义配置
{
"RedisHost": "redis1.yfwyr3.ng.0001.use1.cache.amazonaws.com",
"RedisPort": "6379",
"FsPath": "/mnt/",
"Port": 80,
"Bucket": "unicorn-us-es-ws-1211"
}
4.定义应用程序名称
5.创建环境
6.开始部署
连接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
构建镜像
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上去
# 推送镜像的命令
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的登入信息
以为权限的问题我把不能查看信息,所有我能可以使用之前创建的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的授权凭证
可以了,接下来
使用 AWS CLI 创建 kubeconfig
aws eks update-kubeconfig --region us-east-1 --name cluster
查看一下他给的地址
测试配置
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)。
如果无法访问需要去更改一下iam用户的权限
kubectl get node
查看计算服务
现在是没有的状态我们去aws控制太中创建一下
下一步,在点击下一步
二.配置服务
1.创建config
将配置文件导入后启动,发现他需要四个服务
在aws控制台中搜素appconfig,从文档中找去一段更服务的json配置文件复制进去
点击下一步,应用服务名称设为root-server
保存并继续部署
2.运行服务
在程序上运行
连接成功,但是我们在本地是跑不起来的,我们需要构架一个docker镜像
3.创建docker镜像
先将文件整理一下,保存到一个目录
安装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
发现无法获得检索凭证,所以我们要让他主动获取凭证/root/.aws
docker run --rm -it -v /root/.aws:/root/.aws server:root
-
docker run
:该命令用于从Docker 镜像创建并启动容器。--rm
:此标志告诉 Docker 在退出时自动删除容器。通过删除不再需要的容器,它有助于保持系统清洁。-it
:这是两个标志的组合:-i
(交互式):保持 STDIN 开放,允许您与容器交互。-t
(tty):分配一个伪TTY,提供终端接口。
-v /root/.aws:/root/.aws
:此标志将卷从主机安装到容器中。/root/.aws
(冒号之前)是主机上的路径。/root/.aws
(冒号后面)是容器内的路径。- 此挂载允许容器从主机访问 AWS 配置文件,如果您的应用程序需要 AWS 凭证或配置,这将很有用。
server:root
:指定用于容器的 Docker 镜像。在本例中,它是带有标签server
的镜像root
。
5.上传镜像
把镜像放到ecr上,在ecr上创建私有存储库
点击查看存储库复制命令
最后得到这个表示上传成功
三.在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
可以看见kubectl给我们创建了一个deployment,我们可以使用这个命令进行检查
kubectl get deploy
确实已经创建成功,那么具体他创建的容器叫上面呢
kubectl get pod
但是它显示不能运行,查看一下他的日志
kubectl logs deploy-root-7cc959688c-8csfd
发现没有对应权限,我们重新看会文档
2.为 Kubernetes 服务账户分配 IAM 角色
需要创建unicorn角色
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
-
如果您有要分派 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
2.创建角色
确认角色和服务账户配置正确。
-
确认 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
更改这个iam用户也可以
3.配置 Pods 以使用 Kubernetes 服务账户
https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/pod-configuration.html
改完配置文件后,重新上传一下配置
kubectl apply -f my-deployment.yaml
四.连接eks集群
应为我们的eks集群是在内外中的我们没法访问,需要使用其他的方法
详信息可以看这一片文档
1.创建iam角色
创建ELBControllerRole角色
2.创建yaml配置文本
- 将以下内容复制到您的设备。请将
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
运行一下
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
-
添加
eks-charts
Helm 图表存储库。AWS 在 GitHub 上维护[此存储库](https://github.com/aws/eks-charts)。helm repo add eks https://aws.github.io/eks-charts
-
更新您的本地存储库,以确保您拥有最新的图表。
helm repo update eks
-
安装 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
创建成功
4.检查是否在运行
kubectl get pod -A
能看到他已经在运行了