-
Notifications
You must be signed in to change notification settings - Fork 30
/
LAB_k8s_install
197 lines (161 loc) · 11.3 KB
/
LAB_k8s_install
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
eksctl 명령을 이용해서 AWS EKS 생성하기
1. Bastion 호스트 준비
배스천 호스트(Bastion Host)란 침입 차단 소프트웨어가 설치되어 내부와 외부 네트워크 사이에서 일종의 게이트 역할을 수행하는 호스트를 뜻함.
참고 : https://aws.amazon.com/ko/quickstart/architecture/linux-bastion/
https://blog.naver.com/pentamkt/221034903499
방법1: AWS EC2 instance를 생성해서 Bastion Server로 사용
방법2: 윈도우 10에서 WSL, Ubuntu를 사용
1) WSL 설치
PowerShell을 관리자 권한으로 실행
아래 명령어를 입력한 후 엔터
> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
설치후에 시스템 리부팅 진행
2) 마이크로 소프트 스토어에서 "Ubuntu" 설치 후 실행해서 계정생성-> root 계정 패스워드 설정
Enter new UNIX username: ubuntu
New password: XXXX
Retype new password: XXXX
passwd: password updated successfully
ubuntu $
2. Bastion Host(ubuntu Linux)에 AWS CLI 관리툴인 aws
참고: https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-linux.html
$ sudo apt-get install -y unzip
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
You can now run: /usr/local/bin/aws --version
$ aws --version
aws-cli/2.7.11 Python/3.9.11 Linux/5.13.0-1029-aws exe/x86_64.ubuntu.20 prompt/off
3. Bastion Host(ubuntu Linux)에 EKS설치/운영 툴인 eksctl 설치
참고: https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eksctl.html
ARCH=amd64
PLATFORM=$(uname -s)_$ARCH
curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"
# (Optional) Verify checksum
curl -sL "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_checksums.txt" | grep $PLATFORM | sha256sum --check
tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
sudo mv /tmp/eksctl /usr/local/bin
4. Bastion Host(ubuntu Linux)에 k8s 관리툴인 kubectl 설치
참고: https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/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 --short --client
5. AWS IAM 생성하기
링크: aws.amazon.com - root 로그인후 IAM 생성
사용자이름(User name*) : eks-mng-user
프로그래밍 방식(Programmatic access) 선택
기존 정책(Attach existing policies directly) : AdministratorAccess
태그 추가(Add tags (optional)) - <SKIP>
[사용자만들기(Create User)] 버튼 클릭
사용자 생성되면 csv다운로드 -액세스ID/엑세스키
6. Bastion Host(ubuntu)에서 aws 관리할수 있도록 aws 계정(eks-mng-user) 등록
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
# AWS 관리콘솔 -> IAM -> 사용자 -> 계정선택 -> 보안자격증명 > 액세스 키 만들기 -> CLI -> 액세스키, 비밀액세스키 저장
aws configure
AWS Access Key ID [None]: 액세스키
AWS Secret Access Key [None]: 비밀_액세스키
Default region name [None]: ap-northeast-2
Default output format [None]: <Enter>
# aws 연결 arn 확인
aws sts get-caller-identity
7. WINDOWS 10의 WSL에서 관리시스템을 생성해서 운영중인 경우 아래와 같이 EC2 연결을 위한 키를 생성한다.
방법1: AWS에서 ssh를 생성하거나 아래의 명령을 실행해 aws--login-key 키를 생성한다. 키 생성시 만들어지는 pem은 잘 저장한후 ssh 접속시 사용한다.
방법2: aws ec2 create-key-pair --region ap-northeast-2 --key-name test-k8skey --output text > aws--login-key
8. EKS 구성
참고: https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/getting-started-eksctl.html
EKS요금 시간당 0.10USD + t3.medium 시간 0.416 *2 USD 입니다.
[Managed nodes – Linux] 탭 선택후 사용설명확인
eksctl 명령을 실행해서 Amazon EKS 클러스터를 생성한다.
$ eksctl create cluster \
--name k8s-demo \
--region ap-northeast-2 \
--with-oidc \
--ssh-access \
--ssh-public-key aws--login-key \
--nodes 3 \
--node-type t3.medium \
--node-volume-size=20 \
--managed
참고: Amazon Elastic Kubernetes Service(Amazon EKS)에서 OpenID Connect(OIDC) 호환 자격 증명 공급자를 Kubernetes 클러스터에 대한 사용자 인증 옵션으로 사용할 수 있습니다. OIDC 인증을 사용하면 직원 계정의 생성, 활성화 및 비활성화에 대한 조직의 표준 절차를 사용하여 EKS 클러스터에 대한 사용자 액세스를 관리할 수 있습니다.
https://aws.amazon.com/ko/about-aws/whats-new/2021/02/amazon-eks-clusters-support-user-authentication-oidc-compatible-identity-providers/
CloudFormation으로 생성되기 때문에 aws에서 cloudformation으로 확인해본다.
생성되는 시간이 20분정도 걸린다.
...
2021-05-19 06:04:39 [ℹ] eksctl version 0.50.0
2021-05-19 06:04:39 [ℹ] using region ap-northeast-2
2021-05-19 06:04:39 [ℹ] setting availability zones to [ap-northeast-2a ap-northeast-2b ap-northeast-2c]
2021-05-19 06:04:39 [ℹ] subnets for ap-northeast-2a - public:192.168.0.0/19 private:192.168.96.0/19
2021-05-19 06:04:39 [ℹ] subnets for ap-northeast-2b - public:192.168.32.0/19 private:192.168.128.0/19
2021-05-19 06:04:39 [ℹ] subnets for ap-northeast-2c - public:192.168.64.0/19 private:192.168.160.0/19
2021-05-19 06:04:39 [ℹ] using EC2 key pair %!q(*string=<nil>)
2021-05-19 06:04:39 [ℹ] using Kubernetes version 1.19
2021-05-19 06:04:39 [ℹ] creating EKS cluster "k8s-demo" in "ap-northeast-2" region with managed nodes
2021-05-19 06:04:39 [ℹ] will create 2 separate CloudFormation stacks for cluster itself and the initial managed nodegroup
2021-05-19 06:04:39 [ℹ] if you encounter any issues, check CloudFormation console or try 'eksctl utils describe-stacks --region=ap-northeast-2 --cluster=k8s-demo'
2021-05-19 06:04:39 [ℹ] CloudWatch logging will not be enabled for cluster "k8s-demo" in "ap-northeast-2"
2021-05-19 06:04:39 [ℹ] you can enable it with 'eksctl utils update-cluster-logging --enable-types={SPECIFY-YOUR-LOG-TYPES-HERE (e.g. all)} --region=ap-northeast-2 --cluster=k8s-demo'
...
2021-05-19 07:09:28 [✔] saved kubeconfig as "/home/ubuntu/.kube/config"
2021-05-19 07:09:28 [ℹ] no tasks
2021-05-19 07:09:28 [✔] all EKS cluster resources for "k8s-demo" have been created
2021-05-19 07:09:29 [ℹ] nodegroup "ng-343b6807" has 3 node(s)
2021-05-19 07:09:29 [ℹ] node "ip-192-168-38-198.ap-northeast-2.compute.internal" is ready
2021-05-19 07:09:29 [ℹ] node "ip-192-168-4-22.ap-northeast-2.compute.internal" is ready
2021-05-19 07:09:29 [ℹ] node "ip-192-168-82-229.ap-northeast-2.compute.internal" is ready
2021-05-19 07:09:29 [ℹ] waiting for at least 3 node(s) to become ready in "ng-343b6807"
2021-05-19 07:09:29 [ℹ] nodegroup "ng-343b6807" has 3 node(s)
2021-05-19 07:09:29 [ℹ] node "ip-192-168-38-198.ap-northeast-2.compute.internal" is ready
2021-05-19 07:09:29 [ℹ] node "ip-192-168-4-22.ap-northeast-2.compute.internal" is ready
2021-05-19 07:09:29 [ℹ] node "ip-192-168-82-229.ap-northeast-2.compute.internal" is ready
2021-05-19 07:09:32 [ℹ] kubectl command should work with "/home/ubuntu/.kube/config", try 'kubectl get nodes'
2021-05-19 07:09:32 [✔] EKS cluster "k8s-demo" in "ap-northeast-2" region is ready
- aws에서 확인 : CloudFormation 검색 후 확인
9. 설치완료되면 다음과 같이 설치 결과 확인하고, CLI 명령어 자동완성 기능을 추가
- kubectl 명령으로 설치결과 확인
kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-38-198.ap-northeast-2.compute.internal Ready <none> 28m v1.19.6-eks-49a6c0
ip-192-168-4-22.ap-northeast-2.compute.internal Ready <none> 28m v1.19.6-eks-49a6c0
ip-192-168-82-229.ap-northeast-2.compute.internal Ready <none> 28m v1.19.6-eks-49a6c0
CLI 명령어 완성기능 추가
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
10. 간단한 실행 실습
워커 노드 정보 보기
kubectl get nodes -o wide
Pod 배포 TEST. nginx 컨테이너 5개 실행하고 결과 확인
kubectl create deployment webtest --image=nginx:1.14 --port=80 --replicas=5
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
webtest-fdf54587f-8mfrz 1/1 Running 0 28s 192.168.10.139 ip-192-168-2-91.ap-northeast-2.compute.internal <none> <none>
webtest-fdf54587f-d4pjc 1/1 Running 0 28s 192.168.39.104 ip-192-168-56-22.ap-northeast-2.compute.internal <none> <none>
webtest-fdf54587f-dqg55 1/1 Running 0 28s 192.168.13.27 ip-192-168-2-91.ap-northeast-2.compute.internal <none> <none>
webtest-fdf54587f-hs8zd 1/1 Running 0 28s 192.168.77.185 ip-192-168-70-30.ap-northeast-2.compute.internal <none> <none>
webtest-fdf54587f-pn549 1/1 Running 0 28s 192.168.83.249 ip-192-168-70-30.ap-northeast-2.compute.internal <none> <none>
nginx 웹서버에 클라이언트 접속 가능하도록 구성하고 간단히 TEST
$ kubectl expose deployment webtest --port=80 --type=LoadBalancer
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 33h
webtest LoadBalancer 10.100.222.89 ab5190278c9ac491cb45a4bc42a6d689-1608401336.ap-northeast-2.elb.amazonaws.com 80:30331/TCP 31s
1분정도 후에 웹브라우저를 통해 웹서버 연결되는지 확인
http://ab5190278c9ac491cb45a4bc42a6d689-1608401336.ap-northeast-2.elb.amazonaws.com
11. 모든 실습이 끝났고, 더이상 EKS 사용하지 않는다면 아래 명령으로 삭제. 삭제하지 않고 두면???? 음.. 나중에 깜딱 놀랄수도 있어요~ EKS, EC2 모두 과금됩니다.
$ eksctl delete cluster --name k8s-demo
2021-05-21 18:39:08 [ℹ] eksctl version 0.50.0
2021-05-21 18:39:08 [ℹ] using region ap-northeast-2
2021-05-21 18:39:08 [ℹ] deleting EKS cluster "k8s-demo"
2021-05-21 18:39:08 [ℹ] deleted 0 Fargate profile(s)
2021-05-21 18:39:09 [✔] kubeconfig has been updated
2021-05-21 18:39:09 [ℹ] cleaning up AWS load balancers created by Kubernetes objects of Kind Service or Ingress
...
2021-05-21 18:42:37 [ℹ] waiting for CloudFormation stack "eksctl-k8s-demo-addon-iamserviceaccount-kube-system-aws-node"
2021-05-21 18:42:55 [ℹ] waiting for CloudFormation stack "eksctl-k8s-demo-addon-iamserviceaccount-kube-system-aws-node"
2021-05-21 18:42:55 [ℹ] deleted serviceaccount "kube-system/aws-node"
2021-05-21 18:42:56 [ℹ] will delete stack "eksctl-k8s-demo-cluster"
2021-05-21 18:42:56 [✔] all cluster resources were deleted
지우는 시간도 오래 걸려요~