일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Python #pakage
- lvm #lv #vg #pv
- Excel #엑셀
- bootstrap #css #CSS
- istio #k8s #kubernetes
- shell #shell script
- Kafka #카프카
- dump #jattach
- jgrp000032 #ocp #
- OCP
- Linux #wc
- 티스토리챌린지
- EKS
- Swap Memory
- NameSpace #NS
- jmap #jstack
- EFK
- DB #mariaDB #SQL
- lenova #레노버 #노트북
- test #비교
- 오블완
- Grid #CSS
- dify
- 백준 #10430
- Node #POD #Container
- CI #CD #CI/CD
- publishnotreadyaddress
- 네트워크 #NW
- function #사용자 정의 함수
- PODS #POD #pods #pod #파드 #재기동 #롤링재기동 #rolling
- Today
- Total
BEOM_IT
EKS 클러스터 구성 본문
사전준비
1.Bastion 서버 접속
1-1 적절한 사용자 권한이 있는 계정
(AutoScalingRole 생성 및 조회,CloudFormation 생성 권한 등)
2.AWS 프로파일 설정
2-1 --profile 옵션을 인식할 수 있게 신규 구성 클러스터에 대한 프로파일 등록
2-2 vi ~/.aws/config 에서 프로파일 추가
[profile [계정명]]
role_arn = [arn정보]
source_profile = security
region = ap-northeast-2
output = json
CLI 설정 확인법
aws sts get-caller-identity --profile [계정명] 명령어 실행시 JSON형태의 UserId,Accout,Arn 정보가 보이면 정상
3.AWS 명령어 이용 시 endpoint 오류가 나는 경우,외부 망과 연결된 계정으로 proxy 설정을 해준다.
3-1 프록시 설정법
export proxy=[ip주소:port번호]
export https_proxy=$proxy
export http_proxy=$proxy
KMS 설정
1.AutoScaling Role이 생성되어 있는지 확인 후 생성
확인
aws iam get-role-name AWSServiceRoleForAutoScaling --profile [계정명]
생성
aws iam create-service-linked-role --aws-service-name autoscaling.amazonaws.com --profile [계정명]
2.AutoScaling Role을 계정 역할에 부여
key -id : AWS 웹 콘손 ->KMS ->Customer managed keys에서 키 이름 검색
- AWS Role 적용해 둔 상태면 콘솔에서 role 해제해야 key 보임
해제방법 : AWS 웹 콘솔 우측 상단 role 이름 클릭 -> back to 본인 계정
--grantee-principal arn:aws:iam (다음 콜론 두개주의)
--profile [계정명]
클러스터 생성
1. ClusterConfig.yaml 명세 작성
-문서에서 붉은 표시된 부분 알맞게 수정
.vpc.subnets : AWS 콘솔의 VPC/Subnets 에서 app이 포함된 서브넷의 ID(2개)
.managedNodeGroups.ami : Cloud TA로 부터 받은 AMI ID 값
.managedNodeGroups.volumeKmsKeyID : Cloud TA로 부터 받은 KMS 키 값
.managedNodeGroups.ssh.publicKeyName : Cloud TA로 부터 받은 keypair값
.managedNodeGroups.ssh.overrideBootstrapCommand : 이하는 이 단계에서 수정 X
Bootstrap 부분은 추후 AMI 이미지로 이동해 설정할 필요가 없어질 예정
taml 에서 CLUSTER_NAME= AAA처럼 값과 = 사이에 띄어쓰기가 있으면 오류가 발생하므로 주의한다.
2. 클러스터 생성
eksctl create nodegroup -f config.yaml --profile [계정명]
생성 후 정상 확인
:웹 콘솔 EKS ->Cluster ->clusterName ->Configuration->Compute 에서 Status = Active
만약!
EKS ->Clusters ->Health Issues 에서 워커 노드 Join이 안되었다는 메시지가 나오면 worker node 접속후
- ps -ef | grep kubelet 명령어로 정상 실행중인지 체크
- kubelt config 값이 정상적용인지 확인
- journalctl -u kubelet 명령어로 kubelet 로그 확인
오류가 발생해 워커 노드를 다시 만들때 CloudFormation 에서 기존 생성 중인 항목을 삭제해주고, 다시
eksctl create nodegroup 명령어를 실행해야 한다.
3. IAM Switch 역할에 권한 추가해주기
sdev 환경의 jenkins, admin, swa 역할에 권한 추가
4. 개발자 권한 부여 수행
- ClusterRole, ClusterRoleBinding 오브젝트를 생성해 읽기 권한(get, list)만 부여한다
5. endpoint 설정 public/private ->private 권한 변경
5-1 CLI 방법
- aws eks update-cluster-config --name [clusterName] --resources-vpc-config endpointPublicAccess=false, endpointPrivateAccess=true --profile [계정명]
5-2 웹콘솔 방법
- 웹 콘솔 EKS ->Clusters ->ClusterName ->Networking ->Manage Networking에서 public and private 를 Private으로 변경
6 kubectl 연결 및 alias 설정
- 처음 접속시에는 aws eks update 명령어 실행
- kubectl config user-context 매번 컨텍스트를 입력하기 번거로우므로 alias 설정
-
- vi ~/.bashrc 에서 항목추가
- alias [이름] = "kubectl config use-context arn:aws:ap-northeast-2:[AccountID]:cluster/[ClusterName]"
- source ~/.bashrc 로 적용
- 작업시 항상 context를 스위칭해 실수로 다른 환경에서 작업하지 않도록 주의
- kubectl config current-context 명령으로 현재 context를 확인할 수 있다.
- vi ~/.bashrc 에서 항목추가
-
7 기본 컨테이너 추가 설치
필요시 Amazon ECR에서 이미지 다운
Secondary IP 설정
1. 태그수정
- VPC -Subnets -이름에 k8s가 포함된 SubnetID 클릭 (secondary subnet) - Tags에서 아래 태그 추가
- k8s 가 포함된 서브넷 둘다 수정해 주어야 한다.
key | value |
kubernetes.io/cluster/[ClusterName] | shared |
2. 환경 변수 설정
- kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
3. AWS 웹 콘솔 -EC2 - '-node' 로 끝나는 인스턴스 Terminate
4. ENIConfig 추가
name: [Name]
subnet: VPC - Subnets -k8s 가 포함된 항목 (각 ENIConfig 당 하나씩)
securityGroup: AWS 웹 콘솔 -EC2 -'-node'로 끝나는 인스턴스 -Security 탭의 Security Groups 아래 sg-로 시작하는 항목 (각 ENIConfig 당 둘 다)
5. 다시 환경 변수 설정
- kubectl set env daemonset aws-node-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone
- 확인 방법
- kubectl get po -o wide -n kube-system
- kube-proxy와 aws-node Pod를 제외하고 나머지 Pod의 IP가 Secondary IP 대역으로 바뀌었는지 확인
Istio 설치
1. 설치 준비
- VPC -Subnets 이름에 app이 포함된 SubnetID클릭 (primary subnet) -Tags 에서 아래 태그추가
- app 이 포함된 서브넷 둘 다 수정해야 한다.
key | value |
kubernetes.io/cluster/[ClusterName] | shared |
kubernetes.io/role/internal-elb | 1 |
2. Istio yaml 명세 수정
- 별첨의 istio manifest yaml 파일을 수정한다.
- .spec.hub: AWS ECR 경로로 수정 (share 역할로 스위칭 한 상태) AWS 웹 콘솔 -ECR -ecr-cm-share-nuis/istio 검색 - URL 경로 확인
- 설정한 매니페스트 파일로 Istio를 설치
- istioctl install -f [manifest파일명]
- 태그 수정 없이 생성시 대처법
- istio-gateway 서비스 제거
- kubectl delete svc istio-ingressgateway -n istio-system
- tag 수정
- istioctl install -f [manifest파일명]
- istio-gateway 서비스 제거
'Cloud > AWS' 카테고리의 다른 글
API를 통한 AWS 접근설정 (0) | 2023.07.26 |
---|---|
eksctl (0) | 2023.07.18 |
KMS(Key Management Service) (0) | 2023.07.18 |
EKS(Elastic Kubernetes Service) (0) | 2023.07.18 |