교육, 커뮤니티 후기/PKOS 쿠버네티스 스터디

PKOS 쿠버네티스 스터디 1주차 - kOps 클러스터 배포

Somaz 2023. 1. 8. 23:29
728x90
반응형

 

출저 : 이현수님

Overview

 

가시다님이 진행하시는 쿠버네티스 실무 실습 스터디에 참여하게 되었다.

일정은 아래와 같다.

스터디 일정과 커리큘럼 : 1월 8일 ~ 2월 26일 (총 7주 진행) , 매주 일요일 (저녁 8시~10시)

사전 과제내용

  • AWS Free tier 계정 생성 : O
  • IAM User 생성 : somaz (AdministratorAccess)
  • AWS Route53 퍼블릭 호스팅 영역(도메인) 구입 : somaz.link

 

1주차 과제 내용

 

[과제1]

각자 설치한 AWS kOps 클러스터의 정보를 올려주세요 : kops get cluster, kops get instances

[root@kops-ec2 ~]# kops get cluster
NAME            CLOUD   ZONES
somaz.link      aws     ap-northeast-2a,ap-northeast-2c

[root@kops-ec2 ~]# kops get instances

ID                      NODE-NAME               STATUS          ROLES   STATE   INTERNAL-IPINSTANCE-GROUP                                   MACHINE-TYPE
i-01963115b95429b3f     i-01963115b95429b3f     UpToDate        node            172.30.37.255       nodes-ap-northeast-2a.somaz.link                t3.medium
i-02a16fd3436a7220a     i-02a16fd3436a7220a     UpToDate        master          172.30.36.8        master-ap-northeast-2a.masters.somaz.link        t3.medium
i-0bf5cdb9fd690d4ec     i-0bf5cdb9fd690d4ec     UpToDate        node            172.30.75.103       nodes-ap-northeast-2c.somaz.link                t3.medium

 

[과제2]

Helm 으로 워드프레스를 배포하고 관리페이지에 접속해서 글 1개 작성해주시고 스크린샷을 올려주세요

(⎈|somaz:wordpress) [root@kops-ec2 ~]# kubectl get svc myblog-wordpress -o jsonpath={.status.loadBalancer.ingress[0].hostname} | awk '{ print "Wordpress URL = http://"$1"/admin" }'
Wordpress URL = http://a3eea2a80acb242508e2983803c5ad6d-1172598214.ap-northeast-2.elb.amazonaws.com/admin

(⎈|somaz:wordpress) [root@kops-ec2 ~]# kubectl get svc
NAME               TYPE           CLUSTER-IP       EXTERNAL-IP
                                      PORT(S)                      AGE
myblog-mariadb     ClusterIP      100.71.134.153   <none>
                                      3306/TCP                     13m
myblog-wordpress   LoadBalancer   100.71.14.32     a3eea2a80acb242508e2983803c5ad6d-1172598214.ap-northeast-2.elb.amazonaws.com   80:30812/TCP,443:31508/TCP   13m

 

 

[과제3]

워커 노드 증가(ASG = Auto Scaling Group 활용)

# 인스턴스 그룹 정보 확인
(⎈|somaz:wordpress) [root@kops-ec2 ~]# 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 edit ig nodes-ap-northeast-2a
...
apiVersion: kops.k8s.io/v1alpha2
kind: InstanceGroup
metadata:
  creationTimestamp: "2023-01-08T12:03:20Z"
  labels:
    kops.k8s.io/cluster: somaz.link
  name: nodes-ap-northeast-2a
spec:
  image: 099720109477/ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20221206
  instanceMetadata:
    httpPutResponseHopLimit: 1
    httpTokens: required
  machineType: t3.medium
  maxSize: 3
  minSize: 2
  role: Node
  subnets:
  - ap-northeast-2a
~

# 적용
(⎈|somaz:wordpress) [root@kops-ec2 ~]# kops update cluster --yes
W0108 14:20:18.539113   15639 builder.go:231] failed to digest image "602401143452.dkr.ecr.us-west-2.amazonaws.com/amazon-k8s-cni:v1.11.4"
W0108 14:20:19.041120   15639 builder.go:231] failed to digest image "602401143452.dkr.ecr.us-west-2.amazonaws.com/amazon-k8s-cni-init:v1.11.4"
I0108 14:20:23.104096   15639 executor.go:111] Tasks: 0 done / 103 total; 48 can run
I0108 14:20:24.049771   15639 executor.go:111] Tasks: 48 done / 103 total; 21 can run
I0108 14:20:24.935428   15639 executor.go:111] Tasks: 69 done / 103 total; 28 can run
I0108 14:20:25.258914   15639 executor.go:111] Tasks: 97 done / 103 total; 3 can run
I0108 14:20:25.490123   15639 executor.go:111] Tasks: 100 done / 103 total; 3 can run
I0108 14:20:25.575160   15639 executor.go:111] Tasks: 103 done / 103 total; 0 can run
I0108 14:20:26.318546   15639 dns.go:238] Pre-creating DNS records
I0108 14:20:26.377994   15639 update_cluster.go:326] Exporting kubeconfig for cluster
kOps has set your kubectl context to somaz.link
W0108 14:20:26.392368   15639 update_cluster.go:350] Exported kubeconfig with no user authentication; use --admin, --user or --auth-plugin flags with `kops export kubeconfig`

Cluster changes have been applied to the cloud.


Changes may require instances to restart: kops rolling-update cluster

(⎈|somaz:wordpress) [root@kops-ec2 ~]# kops rolling-update cluster
NAME                    STATUS  NEEDUPDATE      READY   MIN     TARGET  MAX     NODES
master-ap-northeast-2a  Ready   0               1       1       1       1       1
nodes-ap-northeast-2a   Ready   0               1       2       2       3       1
nodes-ap-northeast-2c   Ready   0               1       1       1       1       1

No rolling-update required.

# 워커노드 증가 확인
(⎈|somaz:wordpress) [root@kops-ec2 ~]# 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

(⎈|somaz:wordpress) [root@kops-ec2 ~]# kubectl get nodes
NAME                  STATUS   ROLES           AGE     VERSION
i-01963115b95429b3f   Ready    node            137m    v1.24.9
i-02a16fd3436a7220a   Ready    control-plane   138m    v1.24.9
i-0bf5cdb9fd690d4ec   Ready    node            137m    v1.24.9
i-0cf36b7f1e414bd34   Ready    node            3m14s   v1.24.9

 

스터디 주요 내용

  • AWS kOps 설치 
    • k8s 설정 파일을 s3에 저장
  • 관리편리성
    • kubectl 자동 완성 기능과 alias 사용하기
source <(kubectl completion bash)
echo 'source <(kubectl completion bash)' >> ~/.bashrc
echo 'alias k=kubectl' >> ~/.bashrc
echo 'complete -F __start_kubectl k' >> ~/.bashrc
  • kubectl cli 플러그인 매니저 kre 설치
  • krew로 kube-ctx, kube-ns 설치 및 사용
  • krew로 기타 플러그인 설치 및 사용
  • kube-ps1 설치 및 사용
# 설치 및 설정
git clone https://github.com/jonmosco/kube-ps1.git /root/kube-ps1

cat <<"EOT" >> /root/.bash_profile
source /root/kube-ps1/kube-ps1.sh
KUBE_PS1_SYMBOL_ENABLE=true
function get_cluster_short() {
  echo "$1" | cut -d . -f1
}
KUBE_PS1_CLUSTER_FUNCTION=get_cluster_short
KUBE_PS1_SUFFIX=') '
PS1='$(kube_ps1)'$PS1
EOT

# 적용
exit
exit

(⎈|somaz:wordpress) [root@kops-ec2 ~]# kubectl get nodes

# default 네임스페이스 선택
kubectl ns default

 

  • 선언형 (멱등성) 알아보기 실습
    • 강제로 파드 삭제를 하면 어떤일이 벌어지는가?
      • 다시 파드가 생성된다. 그 이유는 디플로이먼트에 셋팅된 갯수가 충족되야 하기 때문이다.
  • 서비스/파드(mario 게임) 배포 테스트 with CLB
  • 트러블 슈팅
    • 에러 상황 발생히 기본 조치 프로세스
      • get 확인 → describe 확인 → 애플리케이션 로그(log) 확인 → 클러스터 에러 이벤트(event) 확인
      • 디버깅 프로세스 : Apply → Get → Describe → Log → Event
  • Helm
    • 쓰는이유 : 다양한 환경/설정에서 하나의 템플릿으로 재사용, 매니페스트 범용화
    • Helm은 쿠버네티스 패키지 매니저이다. 그리고 오픈소스 소프트웨어이다!

 

스터디 1주차 후기

저는 k8s+openstack+ceph 기반으로 된 private cloud 엔지니어로 일하고 있습니다. 따라서 해당 스터디에 내용은 거의 처음 해보는 내용들이었습니다. 생각보다 속도가 빨랐지만, 메뉴얼을 잘 만들어주셔서 다행히 잘 따라갈 수 있었습니다.
2주차도 화이팅 하겠습니다!

728x90
반응형