이재홍의 언제나 최신 Kubernetes - Unit 7.3 kOps로 클러스터 생성하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

AWS에서 EC2로 Kubernetes 클러스터 구축하기

이재홍 http://www.pyrasis.com

kOps로 클러스터 생성하기

AWS에 kOps로 Kubernetes 클러스터를 생성하는 구성도는 다음과 같습니다.

그림 7-5 kOps로 Kubernetes 클러스터 생성

S3 버킷 생성하기

kOps로 클러스터를 만들기 전에 인증서와 설정 정보를 저장할 S3 버킷을 만들어야 합니다. 다음 과정으로 S3 버킷을 생성합니다.

  1. AWS 콘솔 접속
  2. S3으로 이동
  3. 버킷 만들기 버튼 클릭
  4. 버킷 이름에 clusters.k8s.hello.com 입력(clusters.k8s.hello.com은 제가 생성했으므로 각자 다른 것을 입력합니다. 예: clusters.k8s.hello.com-1). 만약 도메인을 구입했다면 clusters.k8s.<구입한 도메인>으로 입력합니다(<S3 버킷 이름>).
  5. AWS 리전은 ap-northeast-2로 설정
  6. 버킷 만들기 버튼 클릭

EC2 키 페어 생성하기

이제 EC2 인스턴스에 접속할 키 페어를 생성할 차례입니다. 다음 과정으로 키 페어를 생성하고 다운로드합니다.

  1. AWS 콘솔 접속
  2. EC2로 이동
  3. 키 페어 메뉴 클릭
  4. 키 페어 생성 버튼 클릭
  5. 이름에 hello 입력
  6. 프라이빗 키 파일 형식을 .pem 선택
  7. 키 페어 생성 버튼 클릭

이렇게 하면 hello.pem 파일이 다운로드됩니다.

다음 명령을 실행하여 Private Key인 hello.pem 에서 Public Key hello.pub를 추출해냅니다.

macOS, 리눅스
$ chmod 400 ./hello.pem
$ ssh-keygen -y -f ./hello.pem > hello.pub
윈도우 PowerShell
icacls .\hello.pem /reset
icacls .\hello.pem /inheritance:r
icacls .\hello.pem /c /t /grant ${env:UserName}:F
ssh-keygen -y -f .\hello.pem | Out-File -Encoding ascii hello.pub

Route 53 호스팅 영역 생성하기

kOps로 쿠버네티스 클러스터를 생성하려면 Route 53 호스팅 영역(hosted zone)이 필요합니다.

도메인을 구입한 경우

도메인을 구입했다면 구입한 도메인에 대한 호스팅 영역을 생성합니다. AWS에서 도메인을 구입했다면 자동으로 생성됩니다.

  1. AWS 콘솔 접속
  2. Route 53으로 이동
  3. 호스팅 영역 메뉴 클릭
  4. 호스팅 영역 생성 버튼 클릭
  5. 도메인 이름에 <구입한 도메인> 입력
  6. 호스팅 영역 생성 버튼 클릭

도메인을 구입하지 않은 경우

도메인을 구입하지 않은 경우 프라이빗 호스팅 영역을 생성합니다.

  1. AWS 콘솔 접속
  2. Route 53으로 이동
  3. 호스팅 영역 메뉴 클릭
  4. 호스팅 영역 생성 버튼 클릭
  5. 도메인 이름에 hello.com 입력
  6. 유형을 프라이빗 호스팅 영역 선택
  7. 리전을 아시아 태평양(서울) [ap-northeast-2] 선택
  8. VPC ID는 기본 VPC 선택
  9. 호스팅 영역 생성 버튼 클릭

YAML 파일 생성하기

kOps는 커맨드라인 옵션을 사용하여 설정을 하는 방식이지만, 설정 파일을 Git 등으로 관리할 수 있도록 YAML로 만듭니다.

도메인을 구입한 경우

아래 s3://clusters.k8s.<구입한 도메인>은 본인이 생성한 S3 버킷의 이름으로 바꿔줍니다. 그리고 --name과 YAML 파일명에는 k8s.ap-northeast-2.aws.<구입한 도메인>을 입력합니다.

macOS, 리눅스
$ export KOPS_STATE_STORE=s3://clusters.k8s.<구입한 도메인>
$ kops create cluster --name=k8s.ap-northeast-2.aws.<구입한 도메인> --cloud=aws --zones='ap-northeast-2a,ap-northeast-2b,ap-northeast-2c' --dry-run -o yaml > k8s.ap-northeast-2.aws.<구입한 도메인>.yaml
윈도우 PowerShell
$env:KOPS_STATE_STORE="s3://clusters.k8s.<구입한 도메인>"
kops create cluster --name=k8s.ap-northeast-2.aws.<구입한 도메인> --cloud=aws --zones='ap-northeast-2a,ap-northeast-2b,ap-northeast-2c' --dry-run -o yaml > k8s.ap-northeast-2.aws.<구입한 도메인>.yaml

인그레스를 생성했을 때 Route 53에 레코드를 자동 생성할 수 있도록 k8s.ap-northeast-2.aws.<구입한 도메인>.yaml 파일을 다음과 같이 수정해줍니다. 즉, spec 아래에 externalDns.watchIngresstrue로 설정해줍니다.

k8s.ap-northeast-2.aws.<구입한 도메인>.yaml
apiVersion: kops.k8s.io/v1alpha2
kind: Cluster
metadata:
  creationTimestamp: null
  name: k8s.ap-northeast-2.aws.<구입한 도메인>
spec:
  externalDns:
    watchIngress: true
  api:
    dns: {}
  authorization:
    rbac: {}

도메인을 구입하지 않은 경우

아래 s3://<S3 버킷 이름>은 본인이 생성한 S3 버킷의 이름으로 바꿔줍니다. 하지만, --name과 YAML 파일명에는 k8s.ap-northeast-2.aws.hello.com을 그대로 입력해야 합니다.

macOS, 리눅스
$ export KOPS_STATE_STORE=s3://<S3 버킷 이름>
$ kops create cluster --name=k8s.ap-northeast-2.aws.hello.com --cloud=aws --zones='ap-northeast-2a,ap-northeast-2b,ap-northeast-2c' --dns private --dry-run -o yaml > k8s.ap-northeast-2.aws.hello.com.yaml
윈도우 PowerShell
$env:KOPS_STATE_STORE="s3://<S3 버킷 이름>"
kops create cluster --name=k8s.ap-northeast-2.aws.hello.com --cloud=aws --zones='ap-northeast-2a,ap-northeast-2b,ap-northeast-2c' --dns private --dry-run -o yaml > k8s.ap-northeast-2.aws.hello.com.yaml

YAML 파일로 클러스터 생성하기

이제 앞에서 만든 YAML 파일로 클러스터를 생성해보겠습니다. 먼저 다음 명령을 실행하여 S3에 클러스터 설정 및 sshpublickey를 적용합니다. 아직은 EC2 인스턴스가 생성되지 않습니다.

도메인을 구입한 경우

macOS, 리눅스
$ cat ./k8s.ap-northeast-2.aws.<구입한 도메인>.yaml | kops create -f -
$ kops create sshpublickey --name k8s.ap-northeast-2.aws.<구입한 도메인> -i hello.pub
윈도우 PowerShell
cat .\k8s.ap-northeast-2.aws.<구입한 도메인>.yaml | kops create -f -
kops create sshpublickey --name k8s.ap-northeast-2.aws.<구입한 도메인> -i hello.pub

이상이 없으면 실제로 적용을 해봅니다. 이제 실제로 EC2 인스턴스가 생성됩니다.

$ kops update cluster --name k8s.ap-northeast-2.aws.<구입한 도메인> --yes

*********************************************************************************

A new kops version is available: 1.25.2
Upgrading is recommended
More information: https://github.com/kubernetes/kops/blob/master/permalinks/upgrade_kops.md#1.25.2

*********************************************************************************

I1125 12:16:09.581824    9528 executor.go:111] Tasks: 0 done / 109 total; 48 can run
W1125 12:16:09.693436    9528 vfs_castore.go:379] CA private key was not found
I1125 12:16:09.699437    9528 keypair.go:225] Issuing new certificate: "etcd-manager-ca-events"
I1125 12:16:09.712633    9528 keypair.go:225] Issuing new certificate: "apiserver-aggregator-ca"
I1125 12:16:09.727296    9528 keypair.go:225] Issuing new certificate: "etcd-peers-ca-events"
I1125 12:16:09.730567    9528 keypair.go:225] Issuing new certificate: "etcd-manager-ca-main"
I1125 12:16:09.732792    9528 keypair.go:225] Issuing new certificate: "etcd-peers-ca-main"
I1125 12:16:09.733800    9528 keypair.go:225] Issuing new certificate: "etcd-clients-ca"
W1125 12:16:09.734626    9528 vfs_castore.go:379] CA private key was not found
I1125 12:16:09.757601    9528 keypair.go:225] Issuing new certificate: "kubernetes-ca"
I1125 12:16:09.765643    9528 keypair.go:225] Issuing new certificate: "service-account"
I1125 12:16:10.774088    9528 executor.go:111] Tasks: 48 done / 109 total; 23 can run
I1125 12:16:11.666874    9528 executor.go:111] Tasks: 71 done / 109 total; 30 can run
I1125 12:16:12.317385    9528 executor.go:111] Tasks: 101 done / 109 total; 4 can run
I1125 12:16:13.289549    9528 executor.go:155] No progress made, sleeping before retrying 4 task(s)
I1125 12:16:23.304076    9528 executor.go:111] Tasks: 101 done / 109 total; 4 can run
I1125 12:16:25.822231    9528 executor.go:111] Tasks: 105 done / 109 total; 4 can run
I1125 12:16:25.919122    9528 executor.go:111] Tasks: 109 done / 109 total; 0 can run
I1125 12:16:27.221437    9528 dns.go:238] Pre-creating DNS records
I1125 12:16:27.817503    9528 update_cluster.go:326] Exporting kubeconfig for cluster
kOps has set your kubectl context to k8s.ap-northeast-2.aws.<구입한 도메인>
W1125 12:16:27.845592    9528 update_cluster.go:350] Exported kubeconfig with no user authentication; use --admin, --user or --auth-plugin flags with `kops export kubeconfig`

Cluster is starting.  It should be ready in a few minutes.

Suggestions:
 * validate cluster: kops validate cluster --wait 10m
 * list nodes: kubectl get nodes --show-labels
 * ssh to the master: ssh -i ~/.ssh/id_rsa ubuntu@api.k8s.ap-northeast-2.aws.<구입한 도메인>
 * the ubuntu user is specific to Ubuntu. If not using Ubuntu please use the appropriate user based on your OS.
 * read about installing addons at: https://kops.sigs.k8s.io/addons.

AWS 콘솔에서 EC2 인스턴스 목록을 확인해보면 마스터와 워커 노드들이 생성되고 있을 것입니다.

다음 명령을 입력하여 ~/.kube/config에 방금 생성한 클러스터의 설정을 추가합니다.

$ kops export kubeconfig --admin

잠시 기다리면 EC2 인스턴스가 생성되고 클러스터가 초기화됩니다. kubectl get nodes 명령을 입력하여 노듣 목록을 출력해봅니다.

$ kubectl get nodes
NAME                  STATUS   ROLES           AGE    VERSION
i-01a4d885fd48acc61   Ready    control-plane   4m4s   v1.25.4
i-082f35a3d294a5e7d   Ready    node            54s    v1.25.4
i-0c48a73869254c456   Ready    node            37s    v1.25.4
i-0e5dad97f6500d40a   Ready    node            51s    v1.25.4

도메인을 구입하지 않은 경우

macOS, 리눅스
$ cat ./k8s.ap-northeast-2.aws.hello.com.yaml | kops create -f -
$ kops create sshpublickey --name k8s.ap-northeast-2.aws.hello.com -i hello.pub
윈도우 PowerShell
cat .\k8s.ap-northeast-2.aws.hello.com.yaml | kops create -f -
kops create sshpublickey --name k8s.ap-northeast-2.aws.hello.com -i hello.pub

이상이 없으면 실제로 적용을 해봅니다. 이제 실제로 EC2 인스턴스가 생성됩니다.

$ kops update cluster --name k8s.ap-northeast-2.aws.hello.com --yes

*********************************************************************************

A new kops version is available: 1.25.2
Upgrading is recommended
More information: https://github.com/kubernetes/kops/blob/master/permalinks/upgrade_kops.md#1.25.2

*********************************************************************************

I1125 12:16:09.581824    9528 executor.go:111] Tasks: 0 done / 109 total; 48 can run
W1125 12:16:09.693436    9528 vfs_castore.go:379] CA private key was not found
I1125 12:16:09.699437    9528 keypair.go:225] Issuing new certificate: "etcd-manager-ca-events"
I1125 12:16:09.712633    9528 keypair.go:225] Issuing new certificate: "apiserver-aggregator-ca"
I1125 12:16:09.727296    9528 keypair.go:225] Issuing new certificate: "etcd-peers-ca-events"
I1125 12:16:09.730567    9528 keypair.go:225] Issuing new certificate: "etcd-manager-ca-main"
I1125 12:16:09.732792    9528 keypair.go:225] Issuing new certificate: "etcd-peers-ca-main"
I1125 12:16:09.733800    9528 keypair.go:225] Issuing new certificate: "etcd-clients-ca"
W1125 12:16:09.734626    9528 vfs_castore.go:379] CA private key was not found
I1125 12:16:09.757601    9528 keypair.go:225] Issuing new certificate: "kubernetes-ca"
I1125 12:16:09.765643    9528 keypair.go:225] Issuing new certificate: "service-account"
I1125 12:16:10.774088    9528 executor.go:111] Tasks: 48 done / 109 total; 23 can run
I1125 12:16:11.666874    9528 executor.go:111] Tasks: 71 done / 109 total; 30 can run
I1125 12:16:12.317385    9528 executor.go:111] Tasks: 101 done / 109 total; 4 can run
I1125 12:16:13.289549    9528 executor.go:155] No progress made, sleeping before retrying 4 task(s)
I1125 12:16:23.304076    9528 executor.go:111] Tasks: 101 done / 109 total; 4 can run
I1125 12:16:25.822231    9528 executor.go:111] Tasks: 105 done / 109 total; 4 can run
I1125 12:16:25.919122    9528 executor.go:111] Tasks: 109 done / 109 total; 0 can run
I1125 12:16:27.221437    9528 dns.go:238] Pre-creating DNS records
I1125 12:16:27.817503    9528 update_cluster.go:326] Exporting kubeconfig for cluster
kOps has set your kubectl context to k8s.ap-northeast-2.aws.hello.com
W1125 12:16:27.845592    9528 update_cluster.go:350] Exported kubeconfig with no user authentication; use --admin, --user or --auth-plugin flags with `kops export kubeconfig`

Cluster is starting.  It should be ready in a few minutes.

Suggestions:
 * validate cluster: kops validate cluster --wait 10m
 * list nodes: kubectl get nodes --show-labels
 * ssh to the master: ssh -i ~/.ssh/id_rsa ubuntu@api.k8s.ap-northeast-2.aws.hello.com
 * the ubuntu user is specific to Ubuntu. If not using Ubuntu please use the appropriate user based on your OS.
 * read about installing addons at: https://kops.sigs.k8s.io/addons.

AWS 콘솔에서 EC2 인스턴스 목록을 확인해보면 마스터와 워커 노드들이 생성되고 있을 것입니다.

다음 명령을 입력하여 ~/.kube/config에 방금 생성한 클러스터의 설정을 추가합니다.

$ kops export kubeconfig --admin

잠시 기다리면 EC2 인스턴스가 생성되고 클러스터가 초기화됩니다.

우리는 실제로 hello.com 도메인을 구입하지 않았으므로, 로컬에서 임시로 사용할 수 있도록 설정해야 합니다. 운영체제별로 설정 파일이 조금 다른데, 각자 운영체제에 맞는 파일을 수정합니다.

IP 주소는 클러스터의 마스터 노드 IP 주소를 사용해야 하는데, 다음과 같은 과정으로 IP 주소를 찾을 수 있습니다.

  1. AWS 콘솔 접속
  2. EC2로 이동
  3. 인스턴스 메뉴 클릭
  4. 이름이 master-ap-northeast-2a.masters.k8s.ap-northeast-2.aws.hello.com인 인스턴스 클릭 클릭
  5. 세부 정보에 퍼블릭 IPv4 주소 부분을 복사(<마스터 노드의 퍼블릭 IPv4 주소>)

리눅스, macOS는 /etc/hosts 파일을 수정해야 합니다. root 권한이 있어야 하므로 sudo vim으로 수정합니다.

리눅스, macOS
$ sudo vim /etc/hosts

/etc/hosts 파일의 마지막 부분에 다음 내용을 추가한 뒤 저장합니다.

/etc/hosts
<마스터 노드의 퍼블릭 IPv4 주소> api.k8s.ap-northeast-2.aws.hello.com

윈도우는 C:\Windows\System32\drivers\etc\hosts 파일을 수정해야 합니다. 관리자 권한이 필요하므로, 메모장을 관리자 권한으로 실행한 뒤 파일을 엽니다.

C:\Windows\System32\drivers\etc\hosts 파일의 마지막 부분에 다음 내용을 추가한 뒤 저장합니다.

C:\Windows\System32\drivers\etc\hosts
<마스터 노드의 퍼블릭 IPv4 주소> api.k8s.ap-northeast-2.aws.hello.com

메모장에서 hosts 파일이 보이지 않는다면?

메모장에서 hosts 파일이 보이지 않는다면, 열기 창에서 열기(O) 버튼 위의 텍스트 문서(*.txt)모든 파일 (*.*)로 바꿔주면 됩니다.

kubectl get nodes 명령을 입력하여 노듣 목록을 출력해봅니다. 노드 4개가 완전히 생성된 뒤 Ready 상태가 될 때까지 시간이 다소 걸립니다. 노드가 일부만 보인다면 조금 더 기다렸다가 명령을 실행해봅니다.

$ kubectl get nodes
NAME                  STATUS   ROLES           AGE    VERSION
i-01a4d885fd48acc61   Ready    control-plane   4m4s   v1.25.4
i-082f35a3d294a5e7d   Ready    node            54s    v1.25.4
i-0c48a73869254c456   Ready    node            37s    v1.25.4
i-0e5dad97f6500d40a   Ready    node            51s    v1.25.4

이렇게 kOps로 AWS에 쿠버네티스 클러스터를 생성해보았습니다. 다음 장에서는 Nginx 인그레스 컨트롤러를 설치한 뒤 로드밸런서(AWS의 ELB)에 웹 서버 디플로이먼트와 서비스를 연결하는 방법을 알아보겠습니다.

클러스터 삭제 방법

여기서 더 이상 진행하지 않고 클러스터를 삭제하려면 다음 명령을 실행합니다.

$ kops delete cluster --name k8s.ap-northeast-2.aws.<구입한 도메인> --yes

또는

$ kops delete cluster --name k8s.ap-northeast-2.aws.hello.com --yes

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

새소식

  • 이재홍의 언제나 최신 Kubernetes 공개
  • 이재홍의 언제나 최신 Docker 공개

Published

2022-10-22

Tags

쿠버네티스32 Kubernetes32

玻璃钢生产厂家西安商场美陈公司联系方式哈尔滨商场美陈道具玻璃钢雕塑如何做花纹沧州玻璃钢海豚雕塑价格贵州玻璃钢人物雕塑定制石家庄定制玻璃钢雕塑制作营口玻璃钢雕塑制作玻璃钢雕塑桌椅优质的玻璃钢雕塑厂家黔西南商场美陈图片临河玻璃钢景观雕塑南宁玻璃钢雕塑销售厂家福建玻璃钢花盆哪里有承德仿木玻璃钢雕塑香橙玻璃钢卡通雕塑设计厂家长沙玻璃钢雕塑狗年商场美陈图片溧阳商场新年美陈郑州大型校园玻璃钢景观雕塑厂家安庆玻璃钢雕塑报价如何翻制玻璃钢雕塑景德镇玻璃钢雕塑定制卡通企鹅雕塑户外玻璃钢玻璃钢卡通人物雕塑厂家价格北京大型商场美陈市场报价美陈对商场的影响潞城玻璃钢花盆花器江苏中庭商场美陈市场报价湖南定制玻璃钢雕塑图片南宁公园玻璃钢雕塑制作香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化