728x90
반응형
안녕하세요 늑대양입니다 😍
이번에 CloudNet@에서 진행하는 Production Kubernetes Online Study(PKOS)에 참여하여 관련 내용을 공유드리고자 합니다.
오늘은 PKOS 스터디 1주차 학습 내용을 안내해드리록하겠습니다.
CloudNet@ 팀 블로그 Main URL:
https://www.notion.so/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863
쿠버네티스 실무 실습 스터디 모집 공고(현재 마감) Main URL:
https://www.notion.so/23-7635cc4f02c04954a3260b317588113e
Production Kubernetes Online Study - 1주차
1주차 학습 주제: AWS kOps 설치 및 기본 사용
Index.
- 사전 준비사항
- IAM User 생성
- Route53 도메인 준비
- EC2 키페어 준비
- 쿠버네티스 기초
- AWS kOps
- 과제1
- 관리 편리성
- 기본 사용
- 트러블슈팅
- 헬름(Helm)
- 과제2
- 과제3. AWS kOps 활용
- 실습 환경 삭제
사전 준비사항:
IAM User 생성
- 스터디에서 사용할 IAM User 생성
- Administrator 권한
- 액세스/시크릿 키 발급
- MFA 설정 진행
Route53 도메인 준비
EC2 키페어 생성:
- CloudFormation에서 사용할 EC2 키페어 생성
쿠버네티스 기초:
kubernetes Main URL:
AWS kOps:
kOps Main URL:
- CloudFormation 템플릿 배포 진행
- Parameters 항목에서 아래 내용을 필수적으로 수정
- KeyName 항목에 사전에 생성한 EC2 key pair 선택
- SgIngressSshCidr 항목에 작업 환경의 공인 IP 입력
# yaml 파일 다운로드
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/kops-new-ec2.yaml
# 배포
# aws cloudformation deploy --template-file ~/Downloads/kops-new-ec2.yaml --stack-name mykops --parameter-overrides KeyName=<My SSH Keyname> SgIngressSshCidr=<My Home Public IP Address>/32 --region <리전>
# CloudFormation 스택 배포 완료 후 EC2 IP 출력
aws cloudformation describe-stacks --stack-name mykops --query 'Stacks[*].Outputs[*].OutputValue' --output text
# kOps-ec2 에 SSH 접속
예시) ssh -i <My SSH Keyfile> ec2-user@<EIP>
- 배포 완료시 Outputs 탭에 위와 같이 공인 IP가 출력되며, 해당 주소로 ssh 접속 후, 아래의 내용 진행
#
kubectl version --client=true -o yaml
>>clientVersion:
buildDate: "2022-12-08T19:58:30Z"
compiler: gc
gitCommit: b46a3f887ca979b1a5d14fd39cb1af43e7e5d12d
gitTreeState: clean
gitVersion: v1.26.0
goVersion: go1.19.4
major: "1"
minor: "26"
platform: linux/amd64
kustomizeVersion: v4.5.7
#
kops version
>>Client version: 1.25.3 (git-v1.25.3)
#
aws --version
aws-cli/2.9.13 Python/3.9.11 Linux/4.14.301-224.520.amzn2.x86_64 exe/x86_64.amzn.2 prompt/off
#
ls /root/.ssh/id_rsa*
/root/.ssh/id_rsa /root/.ssh/id_rsa.pub
#
aws ec2 describe-instances
Unable to locate credentials. You can configure credentials by running "aws configure".
# Assume role을 활용하는 경우 아래와 같이 에러가 발생할 수 있음
aws ec2 describe-instances
An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation.
# https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html
# Assume role 권한 상속을 위해, 아래와 같이 수정 진행
vim ~/.aws/config
# 설정 진행
[profile sainthm]
role_arn = arn:aws:iam::123456789101:role/role-sainthm@domain.com # 상황에 맞게 수정 필요
source_profile = default
mfa_serial = arn:aws:iam::123412341234:mfa/Authy
# 정상적으로 출력!!
[root@kops-ec2 ~]# aws ec2 describe-instances --profile sainthm
{
"Reservations": [
{
"Groups": [],
"Instances": [
{
"AmiLaunchIndex": 0,
"ImageId": ami-
=====생략=====
}
#
export AWS_PAGER=""
#
REGION=ap-northeast-2
#
aws s3 mb s3://wolf-sheep-kops-test --region $REGION
# aws configure 설정에서 default region 설정 시, 옵션 없이도 해당 리전에서 리소스 생성
aws s3 mb s3://wolf-sheep-kops-test
>>make_bucket: wolf-sheep-kops-test
#
export KOPS_CLUSTER_NAME=wolf-sheep.name
export KOPS_STATE_STORE=wolf-sheep-kops-test
export REGION=ap-northeast-2
## 예시)
export AWS_PAGER=""
export REGION=ap-northeast-2
export KOPS_CLUSTER_NAME=wolf-sheep.name
export KOPS_STATE_STORE=s3://wolf-sheep-kops-test
echo 'export AWS_PAGER=""' >>~/.bashrc
echo 'export REGION=ap-northeast-2' >>~/.bashrc
echo 'export KOPS_CLUSTER_NAME=wolf-sheep.name' >>~/.bashrc
echo 'export KOPS_STATE_STORE=s3://wolf-sheep-kops-test' >>~/.bashrc
#
while true; do aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output text ; echo "------------------------------" ; sleep 1; done
- 아래의 명령어를 통해 설치 확인 작업 진행
#
aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivateIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output table
-------------------------------------------------------------------------------------------------
| DescribeInstances |
+-------------------------------------------------+---------------+-----------------+-----------+
| InstanceName | PrivateIPAdd | PublicIPAdd | Status |
+-------------------------------------------------+---------------+-----------------+-----------+
| nodes-ap-northeast-2c.wolf-sheep.name | 172.30.69.63 | 52.78.186.3 | running |
| nodes-ap-northeast-2a.wolf-sheep.name | 172.30.35.84 | 3.39.252.158 | running |
| kops-ec2 | 10.0.0.10 | 15.165.18.103 | running |
| master-ap-northeast-2a.masters.wolf-sheep.name | 172.30.43.10 | 13.125.218.214 | running |
+-------------------------------------------------+---------------+-----------------+-----------+
#
kops get cluster
>>kops get cluster
NAME CLOUD ZONES
wolf-sheep.name aws ap-northeast-2a,ap-northeast-2c
#
kops get ig
>>
NAME ROLE MACHINETYPE MIN MAX ZONES
master-ap-northeast-2a Master t3.medium 1 1 ap-northeast-2a
nodes-ap-northeast-2a Node t3.medium 1 1 ap-northeast-2a
nodes-ap-northeast-2c Node t3.medium 1 1 ap-northeast-2c
과제1
목표: 각자 설치한 AWS kOps 클러스터의 정보를 올려주세요!
- kops get cluster
- kops get instances
관리 편리성
- kubectl 자동 완성 기능과 alias 사용하기
- kubectl cli 플러그인 매니저 쿠버네티스 크루(krew) 설치
- krew로 kube-ctx, kube-ns 설치 및 사용
- krew로 기타 플러그인 설치 및 사용
- kue-ps1 설치 및 사용
기본 사용
- 선언형(멱등성): k8s의 가장 중요한 특징 중 하나!!
- 서비스/파드(마리오 게임) 배포 테스트 with CLB(Classic Load Balancer)
트러블 슈팅
- 에러 상황 발생 시 기본 조치 프로세스:
- get 확인
- describe 확인
- 애플리케이션 log 확인
- 클러스터 에러 이벤트 확인
- 장애 사례 처리 예시:
- 노드의 사용 가능한 디스크 용량이 부족한 경우 발생하는 에러와 에러 처리 프로세스 알아보기
헬름(Helm)
- Why use helm?
- 다양한 환경/설정에서 하나의 템플릿으로 재사용
- 필요한 모듈만 배포 가능
- 안정적인 헬름 차트 생태계에서 필요한 오픈소스 설치
- 매티페스트 범용화:
- 가장 쉬운 배포 방법은 YAML 형식으로 매니페스트를 작성하고 kubectl을 사용하여 적용하는 방식
- Helm은 쿠버네티스의 패키지(Chart) 관리자
- 오픈소스 소프트웨어로 공개되어 있으며, 이미 많은 패키지(Chart)가 존재
과제2
목표: Helm으로 워드프레스를 배포하고 관리페이지에 접속하여, 글 1개를 작성해주시고 스크린샷을 올려주세요
- Helm을 통한 워드프레스 배포 관련 URL: https://artifacthub.io/packages/helm/bitnami/wordpress
#
$ helm repo add my-repo https://charts.bitnami.com/bitnami
$ helm install my-release my-repo/wordpress
과제3. AWS kOPS 활용
목표: 아래 kOps 활용 기능 중 1개를 선택해서 실습 후 결과 내용을 알려주세요
*워커 노드 증가(ASG) 항목을 우선 진행, 향 후 하나씩 해결하여 토글로 추가 예정
- *워커 노드 증가(ASG)
- Metrics 파드 설치
- AWS kOps에 Node local DNS Cache 설정하기
- Gossip DNS로 AWS kOps 배포하기
- AWS kOps Audit Logging 설정하기
- AWS kOps Private Cluster 설정하기
- AWS kOps Rolling Updates 실행해보기
- AWS kOps 인스턴스 그룹에 spot 인스턴스 사용해보기
- AWS kOps multiple master 설정하기
- AWS kOps에 Karpenter 활용하기
- AWS kOps의 ETCD 백업, 복구, 암호화 해보기
- AWS kOps에 IRSA 설정하기
- 기존에 존재한는 VPC에 AWS kOps 클러스터 설치하기
- AWS kOps에 VPC CNI의 옵션값(ex. WARM_IP_TARGET) 적용하기
*워커 노드 증가(ASG)
#
kops get ig
NAME ROLE MACHINETYPE MIN MAX ZONES
master-ap-northeast-2a Master t3.medium 1 1 ap-northeast-2a
nodes-ap-northeast-2a Node t3.medium 1 1 ap-northeast-2a
nodes-ap-northeast-2c Node t3.medium 1 1 ap-northeast-2c
# 아래 명령어 입력 후, 에디터에서 아래 이미지처럼 min/max 값 수정
kops edit ig nodes-ap-northeast-2a
# 적용
kops update cluster --yes
kops rolling-update cluster
# 워커노드 증가 확인
kubectl get node -w
NAME STATUS ROLES AGE VERSION
i-0455703bcff0633bb Ready node 3m40s v1.24.9
i-04bdf668c9522c1a3 Ready node 130m v1.24.9
i-0cbe754f5ce5360e2 Ready control-plane 131m v1.24.9
i-0d71ea349013af5b7 Ready node 130m v1.24.9
# kops get ig
NAME ROLE MACHINETYPE MIN MAX ZONES
master-ap-northeast-2a Master t3.medium 1 1 ap-northeast-2a
nodes-ap-northeast-2a Node t3.medium 2 3 ap-northeast-2a
nodes-ap-northeast-2c Node t3.medium 1 1 ap-northeast-2c
실습 환경 삭제
- kOps 클러스터 삭제
- kops delete cluster --yes
- 클러스터 삭제 확인 후, AWS CloudFormation 스택 삭제
- aws cloudformation delete-stack --stack-name mykops
긴 글 읽어주셔서 감사합니다
728x90
반응형
'k8s > CloudNet@' 카테고리의 다른 글
[CloudNet@] Production Kubernetes Online Study - 6주차. (0) | 2023.02.25 |
---|---|
[CloudNet@] Production Kubernetes Online Study - 5주차. (3) | 2023.02.19 |
[CloudNet@] Production Kubernetes Online Study - 4주차. (0) | 2023.02.12 |
[CloudNet@] Production Kubernetes Online Study - 3주차. (0) | 2023.02.05 |
[CloudNet@] Production Kubernetes Online Study - 2주차. (0) | 2023.01.29 |