[k8s] Kubernetes Operations (kOps) Install in AWS
Published in
7 min readMar 5, 2023
안녕하세요. CloudNet@ K8S Study를 진행하며 해당 내용을 이해하고 공유하기 위해 작성한 글입니다. DevOps 이정훈님의 도서 ‘24단계 실습으로 정복하는 쿠버네티스’ 의 내용을 바탕으로 스터디를 하며 어떻게 k8s에 적용할지 고민하며 정리해봤습니다.
kOps는 클라우드 플랫폼(aws, gcp, azure 등)에서 쉽게 k8s 를 설치할 수 있도록 도와주는 도구입니다.
kOps 설치
[사전 작업]
- kubectl 설치
- 반드시 64-bit (AMD64 그리고 Intel 64)디바이스 아키텍쳐에
kops
설치 - AWS 계정이 있고 IAM 키를 생성하고 구성. IAM 사용자는 적절한 권한이 필요
- 클러스터에 사용할 route53 domain 생성 — kops는 클러스터 내부와 외부 모두에서 검색을 위해 DNS을 사용하기에 클라이언트에서 쿠버네티스 API 서버에 연결할 수 있음
[설치 참고]
[kOps 설치 확인]
- 아래와 같이 node IP, pod IP 확인
- Hosted Zone 에 추가된 3개 A 레코드 확인
[DNS 관련 이슈]
Error: error doing DNS lookup for NS records for “XXXXXXXX.com”: lookup XXXXXXX.com on 10.0.0.2:53: no such host
- Hosted Zone에 생성된 NS를 등록된 도메인의 NS 서버에 등록해줄 것
- NS 서버 등록 시, 3–4시간이 걸리므로 기다립니다
Error: Unable to connect to the server: dial tcp: lookup api.pkos.XXXX.link on 168.126.63.1:53: no such host
발생
- 시간이 지나고 나니 정상적으로 동작. Route 53에 등록되는데 시간이 걸렸던 것으로 추정됩니다
# kops 클러스터 정보 확인
$ kops get cluster
NAME CLOUD ZONES
wellbeconnected.com aws ap-northeast-2a,ap-northeast-2c
$ kops get cluster -o yaml
apiVersion: kops.k8s.io/v1alpha2
kind: Cluster
metadata:
...
# 인스턴스그룹 정보 확인
$ 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
$ kops get ig -o yaml
...
# 인스턴스 정보 확인
$ kops get instances
D NODE-NAME STATUS ROLES STATE INTERNAL-IP INSTANCE-GROUP MACHINE-TYPE
i-02faf2526767e7030 i-02faf2526767e7030 UpToDate node 172.30.39.139 nodes-ap-northeast-2a.wellbeconnected.com t3.medium
i-07b0409d7d5f2caed i-07b0409d7d5f2caed UpToDate node 172.30.67.64 nodes-ap-northeast-2c.wellbeconnected.com t3.medium
i-0fe84c07d0e80bd1d i-0fe84c07d0e80bd1d UpToDate master 172.30.47.89 master-ap-northeast-2a.masters.wellbeconnected.com t3.medium
# 클러스터 정보 확인
$ kubectl cluster-info
Kubernetes control plane is running at https://api.wellbeconnected.com
CoreDNS is running at https://api.wellbeconnected.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
$ kubectl cluster-info dump
...
# CRI 컨테이너 런타임 확인
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
i-02faf2526767e7030 Ready node 32m v1.24.10 172.30.39.139 3.35.174.114 Ubuntu 20.04.5 LTS 5.15.0-1028-aws containerd://1.6.10
i-07b0409d7d5f2caed Ready node 32m v1.24.10 172.30.67.64 3.34.48.149 Ubuntu 20.04.5 LTS 5.15.0-1028-aws containerd://1.6.10
i-0fe84c07d0e80bd1d Ready control-plane 34m v1.24.10 172.30.47.89 3.36.114.106 Ubuntu 20.04.5 LTS 5.15.0-1028-aws containerd://1.6.10
# volume(sc)
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
default kubernetes.io/aws-ebs Delete Immediate false 35m
gp2 kubernetes.io/aws-ebs Delete Immediate false 35m
kops-csi-1-21 (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 35m
kops-ssd-1-17 kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 35m
$ kubectl get sc kops-csi-1-21 -o jsonpath={.parameters} ;echo
{"encrypted":"true","type":"gp3"}
$ kubectl get sc kops-ssd-1-17 -o jsonpath={.parameters} ;echo
{"encrypted":"true","type":"gp2"}
# pod ip 확인
$ kubectl get pod -n kube-system
$ kubectl get pod -n kube-system -owide