# install kubectl
wget https://dl.k8s.io/release/v1.22.0/bin/linux/amd64/kubectl
chmod 755 kubectl
mv kubectl /usr/bin
# install awscli
pip3 install awscli
# install eksctl
wget https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz
tar -xvf eksctl_Linux_amd64.tar.gz
chmod 755 eksctl
mv eksctl /usr/bin
输入如下表示安装完成
aws eks create-cluster \
--region us-west-2 \
--name zhenglisai \
--kubernetes-version 1.21 \
--role-arn arn:aws:iam::你的账号ID:role/eks-cluster \
--resources-vpc-config subnetIds=subnet-cf36ca92,subnet-75866b0d,subnet-19ef9b32,securityGroupIds=sg-0daa7eabdc1f845fd
从控制台可以看到集群创建中
查看集群状态
在控制台EC2中创建启动模板,使用镜像AMI:ami-0cb182e3037115aa0,根据自己需要选择实例类型,安全组,服务器密钥对,启动模板中不要设置网络接口和IAM 实例配置文件,最重要的一步是在启动模板最后的用户数据中填写:
脚本后参数为EKS集群名
aws eks create-nodegroup \
--cluster-name zhenglisai \
--nodegroup-name zls-node \
--scaling-config minSize=1,maxSize=3,desiredSize=2 \
--subnets subnet-cf36ca92 subnet-75866b0d subnet-19ef9b32 \
--node-role arn:aws:iam::你的账号ID:role/eks-demo \
--launch-template version=4,id=lt-020949e5e604df89c
# --name 后为集群名
aws eks --region us-west-2 update-kubeconfig --name zhenglisai
配置完成后,访问EKS集群
表示完成配置,可以访问集群了。
可以看到,有两个pod没有起来,我们看一下为什么没有起来
执行
kubectl get pods coredns-85d5b4454c-rkccb --namespace kube-system --output yaml
看输出是没有可用的计算节点,说明我们上一步创建的计算节点还没运行起来,查看可用节点,确实没有
等大约两分钟以后,再次执行,可以看到实例已经注册到集群了
再次查看pod状态,都已经运行起来了。
这个东西主要用于集群的弹性扩容指标和dashboard指标,不是用于监控资源!
执行部署
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
输出
验证部署是否成功
执行
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.5/aio/deploy/recommended.yaml
创建一个名为eks-admin.yaml的文件,内容为
apiVersion: v1
kind: ServiceAccount
metadata:
name: eks-admin
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: eks-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: eks-admin
namespace: kube-system
执行此文件
kubectl apply -f eks-admin.yaml
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')
到此为止,已完成集群的搭建和Dashboard的部署,但是此时只能在集群内部访问Dashboard,无法通过外网访问。下一步将Dashboard接口暴露给ALB
wget https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.0/docs/install/iam_policy.json
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://iam_policy.json
eksctl utils associate-iam-oidc-provider --cluster zhenglisai --approve
eksctl create iamserviceaccount \
--cluster=zhenglisai \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=arn:aws:iam::你的账号ID:policy/AWSLoadBalancerControllerIAMPolicy \
--override-existing-serviceaccounts \
--approve
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"
helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller \
--set clusterName=zhenglisai \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller \
-n kube-system
验证安装是否完成
创建部署文件,dashboard-ingress.yaml,内容如下(需要修改汉字部分内容):
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
namespace: kubernetes-dashboard
name: ingress-dashboard
annotations:
alb.ingress.kubernetes.io/load-balancer-name: zhenglisai
alb.ingress.kubernetes.io/backend-protocol: HTTPS
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
alb.ingress.kubernetes.io/certificate-arn: 你证书的ARN,在ACM中查看
spec:
rules:
- host: 你的域名
http:
paths:
- path: /*
backend:
serviceName: kubernetes-dashboard
servicePort: 443
执行文件,创建ingress
kubectl apply -f dashboard-ingress.yaml
使用https协议访问域名
手机扫一扫
移动阅读更方便
你可能感兴趣的文章