侧边栏壁纸
博主头像
霍義博主等级

只要学不死,就往死里学!

  • 累计撰写 10 篇文章
  • 累计创建 9 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

2024-部署EKS集群并初始化

霍義
2024-07-26 / 0 评论 / 0 点赞 / 61 阅读 / 22617 字 / 正在检测是否收录...

部署EKS集群并初始化

1.基础介绍

Amazon EKS 是一项托管服务,借助该服务,您可以轻松在 AWS 上运行 Kubernetes,而无需安装和操作您自己的 Kubernetes 控制平面.

2.创建EKS集群

2.1 AWS-WEB页面创建EKS集群

image-20240716182228060

Kubernetes版本直接使用最新版本即可
集群角色选择你所需要的,也可以重新创建新的,这个角色一点要记住

image-20240716182415853

image-20240716182442581

选择新建立的VPC
子网最少选择两个
安全组可以新建一个安全组
其他按照默认即可

image-20240716182531708

这里根据自己的需求选择

image-20240716182654474

插件默认即可

image-20240716182746007

插件版本选择最新的版本即可
最后确定自己的选择好的信息点击创建稍等片刻即可创建成功

2.2 创建控制服务器

如果是线上使用的话可以选择Jenkins服务器或者别的中间件服务器
这里创建一台2核4G50GB的服务器即可

2.3 安装awsctl/eksctl/kubectl

2.3.1 awsctl

#官方文档地址
https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html
#卸载旧版本
sudo yum remove awscli
#下载并安装最新版本
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
#写入环境变了
vim /etc/profile
export PATH="/usr/local/bin/:$PATH"
source /etc/profile
#查看版本
aws --version

image-20240716183815975

2.3.2 eksctl

#安装eksctl
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv -v /tmp/eksctl /usr/local/bin
eksctl version

image-20240716183953729

2.3.3 kubectl

#AWS官方文档
https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/install-kubectl.html
#安装kubectl
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.30.0/2024-05-12/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc
kubectl version --client

2.4 连接Kubernetes集群

2.4.1 awsctl进行身份验证

#先生成IAM访问密钥AK/SK

image-20240716184554752

image-20240716184633145

image-20240716184751847

image-20240716184807134

#创建成功以后按照以下对应项写入
#环境变量方式
export AWS_ACCESS_KEY_ID=AKIAxxxxxxxxxxPLE
export AWS_SECRET_ACCESS_KEY=wxxxxxMI/K7qweqeG/bPqweqweqweqweEY
export AWS_DEFAULT_REGION=us-west-2(Kubernetes集群所在地区)
#aws命令行方式
aws configure

2.4.2 使用kubectl访问我的集群

#官方文档
https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/create-kubeconfig.html
#为集群创建或更新kubeconfig文件(region-code替换为集群所在的AWS区域,my-cluster替换为集群名称)
aws eks update-kubeconfig --region region-code --name my-cluster
#测试配置
kubectl get svc

image-20240716185428070

#查看集群节点
kubectl get nodes

image-20240716185511901

2.5 创建AWS Load Balancer Controller

#AWS Load Balancer Controller为kubernetes集群管理AWS弹性负载均衡.
1.它通过配置应用负载均衡来满足kubernetes的ingress资源.
2.它通过配置网络负载均衡来满足kubernetes的Service资源.

2.5.1 创建策略

#官方文档
https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/lbc-helm.html
#创建服务目录
cd ~/environment
mkdir -p manifests/alb-ingress-controller && cd manifests/alb-ingress-controller
#设置IAM-ID账号并且查询ID账号是否存在
eksctl utils associate-iam-oidc-provider \
    --region ${AWS_REGION} \
    --cluster eks-demo-hy \
    --approve
aws eks describe-cluster --name eks-demo-hy --query "cluster.identity.oidc.issuer" --output text
#查询ID账号是否存在
aws iam list-open-id-connect-providers | grep <enter the id>
#创建IAM服务账号并且将策略写入
#下载策略
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.7.2/docs/install/iam_policy.json
#创建IAM策略
aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
#eksctl创建IAM角色
eksctl create iamserviceaccount \
  --cluster=my-cluster \
  --namespace=kube-system \
  --name=aws-load-balancer-controller \
  --role-name AmazonEKSLoadBalancerControllerRole \
  --attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
  --approve

2.5.2 安装 cert-manager

#应用文件
kubectl apply \
    --validate=false \
    -f https://github.com/jetstack/cert-manager/releases/download/v1.13.5/cert-manager.yaml

2.5.3 安装AWS Load Balancer Controller

#下载控制器规范
curl -Lo v2_7_2_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.7.2/v2_7_2_full.yaml
#将my-cluster替换为您的集群名称
sed -i.bak -e 's|your-cluster-name|my-cluster|' ./v2_7_2_full.yaml
#应用文件
kubectl apply -f v2_7_2_full.yaml
#将IngressClass和IngressClassParams清单下载到您的集群
curl -Lo v2_7_2_ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.7.2/v2_7_2_ingclass.yaml
#应用文件
kubectl apply -f v2_7_2_ingclass.yaml
#验证是否安装成功
kubectl get deployment -n kube-system aws-load-balancer-controller

image-20240716190851959

3.部署服务测试EKS集群可用性

3.1 部署WordPress

#word-depl.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-fil
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo-fil
  template:
    metadata:
      labels:
        app: demo-fil
    spec:
      containers:
        - name: demo-fil
          image: wordpress:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 80
#word-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: demo-fil
  annotations:
    alb.ingress.kubernetes.io/healthcheck-path: "/"
spec:
  selector:
    app: demo-fil
  type: NodePort
  sessionAffinity: None
  externalTrafficPolicy: Cluster
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
#word-ing.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "demo-ingress"
  namespace: default
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/subnets: subnet-xxxxxyyyy,subnet-xxxxxyyy  #外网子网ID
    nginx.ingress.kubernetes.io/whitelist-source-range: '0.0.0.0/0'
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "demo-fil"
                port:
                  number: 80
#应用文件
kubectl apply -f word-depl.yaml
kubectl apply -f word-svc.yaml
kubectl apply -f word-ing.yaml
#如果在几分钟后尚未创建入口,请运行以下命令以查看负载均衡器控制器日志,这些日志包含可帮助您诊断部署中任何问题的错误消息.
kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller

3.2 查看是否创建成功

#查看是否创建成功
kubectl get all -n default -o wide
kubectl get ing -n default -o wide

image-20240716191458955

此处ingress提示ELB已经创建成功.

image-20240716191622149

4.踩坑

4.1 EKS集群子网添加标签

搜索 ---> VPC ---> 子网 ---> (你当时创建EKS集群时选择的子网)

image-20240716192337510

image-20240716192404332

#为子网添加标签(ALB)
#键
kubernetes.io/role/elb
#值
1
#为子网添加标签(NLB)
#键
kubernetes.io/role/internal-elb
#值
1

4.2 Ec2CallAWS角色添加AllowELBOperations策略

#创建新的策略并分配给Ec2CallAWS角色
#策略命令
AllowELBOperations
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticloadbalancing:AddTags",
                "elasticloadbalancing:DescribeLoadBalancers",
                "elasticloadbalancing:CreateTargetGroup",
                "elasticloadbalancing:ModifyTargetGroup",
                "elasticloadbalancing:DeleteTargetGroup"
            ],
            "Resource": "*"
        }
    ]
}

4.3 Ingress(内网)

annotations:
    kubernetes.io/ingress.class: "alb"
    alb.ingress.kubernetes.io/scheme: "internal" # 指定为内部负载均衡器
    alb.ingress.kubernetes.io/subnets: "subnet-xxxxxx,subnet-yyyyyy" # 指定内网子网ID
0

评论区