안녕하세요 보나에요!

 

오늘은 최근에 취득한 자격증인 CKA 자격증 후기를 남겨볼려고 합니다

 

CKA자격증은 Certified Kubernetes Administrator의 약자로, 

쿠버네티스를 하는 사람이라면 한번쯤 시도해볼만한(?) 자격증이라고 생각해요.

저는 100점만점에 82점을 받았는데요! 어떻게하면 시험에 붙을 수 있을지, 자세한 후기 남겨보려고해요.

 

1. 시험 유형

시험 유형은 홈페이지(www.cncf.io/certification/cka/)에서 확인 가능하듯이, 다음과 같아요

각 유형별로 어느정도의 비중이 잡혀있는지 확인할 수 있어요

 

 

2. 시험 공부 방법 

시험 공부 방법은, 우선 kubectl 명령어에 익숙하셔야 되요. 

CKA 시험은 100% Hands-On 시험이기때문에, Linux shell 명령어라든지, K8s 명령어인 kubectl이라든지.. 

명령어 사용이 잦기때문에 익숙해지는게 필수라고 생각합니다. 명령어에 익숙해지면서,

k8s공부도 하실거면 저는 udemy 강의를 완전 추천해요!

 

 

이 강의가 CKA공부를 위해서는 독보적인 강의라고 할 수 있어요..

단점이라면 한글자막이 없다는점, 영어자막 또한 수많은 오타가 있다는점..

하지만 장점이라면! 역시! mock exam이라는 모의 CKA 시험이 존재하구요,

챕터마다 practice test 환경을 제공해 주어서 직접 hands-on 으로 연습할 수 있어요!

 

다시말해, 연습,연습,연습을 통하여 kubernetes 명령어들에 익숙해지고, 왜 이게 개발되었나 생각하다보면

깨닫는게 하나 둘 씩 생길거에요... 저도 아직 다 깨닫진 못했지만 말이에요..(우리 모두 화이팅해봐요)

 

3. kubectl config use-context [cluster명]에 익숙해지자

CKA시험은 하나의 cluster에서 시험이 치뤄지는것이 아니에요. 다음과같이 6개의 cluster가 존재해요

docs.linuxfoundation.org/tc-docs/certification/tips-cka-and-ckad 해당 url에 접속하셔서 보시면 알 수 있듯이,

시험자는 매 문제에 해당하는 cluster에서 시험문제를 풀어야해요. 이게 쉬울수도 있을 것이라 생각하는데....

1번문제 풀고 2번문제 풀고.. 마지막문제까지 다풀었다! 라고 생각하면 쉬울거에요.

그런데 1번 막히고, 2번 풀고, 3번막히고.. 다시 1번으로 돌아오고..

 

이런 과정을 거치다 보면, 내가 context를 이상한데서 풀어버리면..... 그냥 그 시험은 끝이라고 생각이 됩니다....

 

그러기 때문에!! context를 어디서 작업했나! sudo -i 로 root권한으로 작성했었나! 이런거는 문제를 풀때마다 

다시 base node로 가는 것이 중요하다는 점!!! 꼭꼭!! 명심하셔야합니다!!!!

 

4. kubenetes documentation 활용하기

CKA 시험은 다행히, 오픈북 형식이라 1개의 참고문서를 활용할 수 있어요.

99.9%의 후기를 보면, kubernetes.io/docs/home/

 

Kubernetes Documentation

Kubernetes is an open source container orchestration engine for automating deployment, scaling, and management of containerized applications. The open source project is hosted by the Cloud Native Computing Foundation.

kubernetes.io

다음 홈페이지를 참고하라고하는데요.. 저도 마찬가지로 해당 홈페이지에서 검색해가며 문제를 풀었습니다..

yaml 파일을 처음부터 만드는 바보는 없으시리라 생각해요.. 

 

yaml파일을 kubectl run nginx --image=nignx --dry-run-client -o yaml > q1.yaml 처럼 yaml로 빼신 후 사용하시거나,

docs에서 관련된 유형을 찾으셔서 복사해서 붙여넣어 yaml파일을 완성하세요.. 

 

5. kubectl explain [object명] --recursive 활용하자..

해당 명령어로 저는 두세문제는 맞추었다고 생각해요..

yaml 파일은 hierarchy가 탭으로 구분이되요..

예를 들자면, 

apiVersion: batch/v1
kind: Job
metadata:
  name: hello
spec:
  template:
    # This is the pod template
    spec:
      containers:
      - name: hello
        image: busybox
        command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']
      restartPolicy: OnFailure
    # The pod template ends here

다음과 같은 yaml 파일을 보시면, 계층구조가 확실히 보이죠?

그런데 문제는,, spec 밑에 containers 밑에 command를 넣어야하나?(물론 이건 당연한 경우지만)

라는 의문점이 들면서, 계층구조가 헷갈릴 경우가 무조건!! 생겨요.. 

이게 어떤걸 써야하는지, path인지 paths인지, hostpath인지 hostPath인지 소문자 대문자에 따라서도

오류가 날 수 있꾸요.. 그럴경우에 요긴하게 사용할 수 있는 명령어니까!!

사용해보세요!!

 

kubectl explain development --recursive 예시

이상으로 후기에 대해 적어보았습니다.. 마지막으로는 자격증을 보여드리며 마치고싶네요!!

나 CKA 자격증 땄다!!!! ㅎㅎㅎ

 

 

안녕하세요 보나에요 :)

 

오늘은 kubeadm을 사용하여 k8s를 구축해볼거에요!!

 

azure, gcp, aws 등에서는 자체적으로 k8s를 간편하게 설치할 수 있지만, 우리는 한번 직접!

 

리눅스 인스턴스를 사용하여 k8s cluster를 구축해볼거에요.

 

참고로 azure, gcp, azure에서 제공해주는 k8s-cluster는 아주 간편하고 쉽게 구축할 수 있지만,

 

가격이.. 어마무시하게 측정된다는 단점이 있습니다.

 

하지만, 서버만 사용하여 자체 구축하면 비용이 감축되는 장점도 있구요,,

 

우리는 또한!! 서버를 살 돈이 어딨어요 ㅠㅠ 비싸비싸

 

그래서 아직 한번도 사용을 안해보았다면!! 각 플랫폼은 무료 평가판을 쓸 수 있도록 해줍니다.

 

그래서 저도!! gcp 300불 무료평가판을 통해 구축해볼거에요~

 

서버를 구축하는 것은 이 링크를 참고하세요~

 

1. k8s 구축용 서버 체크.

준비서버 : master 서버1, worker용 서버 2 (ubuntu 18.04)

  • Master 서버 - 4 CPU and 16GB RAM
  • Worker1 서버 - 2 CPU and 4GB RAM
  • Worker2 서버 - 2 CPU and 4GB RAM

ip 정보  # 전에는 잘 되었던것 같은데, 외부IP로도,, 현재 다시 해보니 내부 IP로 설정해야함..

  • master 서버용 ip - 104.197.89.71
  • worker 서버용 ip - 35.239.5.160
  • worker 서버용 ip - 35.188.32.107 

 

 

2. ubuntu apt 패키지 업데이트, 업그레이드 하기.

# root로 변환시키기
sudo -i 

apt update -y && apt upgrade -y

 

3. Disable Swap 메모리

kubelet이 제대로 작동하기 위해서는 SWAP메모리를 비활성시키는게 필수적이라고 할 수 있다. master, worker노드 모두 disable 시킨다.

sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
swapoff -a

4. kubelet, kubeadm, kubectl 설치

레파지토리 추가

 

apt-get update && apt-get install -y 
apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list

 

 

설치

 

apt update
apt -y install vim git curl wget kubelet kubeadm kubectl

 

standby 모드로 대기시키기

apt-mark hold kubelet kubeadm kubectl

5. Configure Firewall

modprobe overlay
modprobe br_netfilter

 

traffic check

vi /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
sysctl --system

6. Docker 설치

apt update
apt install -y curl gnupg2
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt update
apt install -y containerd.io docker-ce

Create Directories and Configurations

mkdir -p /etc/systemd/system/docker.service.d

vi /etc/docker/daemon.json

{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
				"max-size": "100m" },
"storage-driver": "overlay2"
}

Docker 재시작

 

systemctl daemon-reload
systemctl restart docker
systemctl enable docker

7. 마스터노드 생성

lsmod | grep br_netfilter

 

Kubelet 시작

systemctl enable kubelet
kubeadm config images pull

8. Create Cluster

kubeadm init \
--pod-network-cidr=10.0.0.0/16 \
--control-plane-endpoint=master
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Calico 설치

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml


Worker노드 추가

kubeadm join master:6443 --token bf6w4x.t6l461giuzqazuy2 --discovery-token-ca-cert-hash sha256:8d0b3721ad93a24bb0bb518a15ea657d8b9b0876a76c353c445371692b7d064e

 

1. helm의 repository에 bitnami를 추가한다.

helm repo add bitnami https://charts.bitnami.com/bitnami

helm search를 통해 추가된 것을 확인

helm search

kafka가 보인다.

 

2. kafka를 담을 namespace 생성

 

kubectl create ns kafka
helm install --name bonah bitnami/kafka --namespace kafka

kafka와 zookeeper 서버 설치 완료!

 

간단한 producer, consumer 사용해보기

 

# producer

kubectl run bonah-kafka-client --restart='Never' --image docker.io/bitnami/kafka:2.6.0-debian-10-r0 --namespace kafka --command -- sleep infinity

kubectl exec --tty -i bonah-kafka-client --namespace kafka -- bash

 

kafka-console-producer.sh \
--broker-list bonah-kafka-0.bonah-kafka-headless.kafka.svc.cluster.local:9092 \
--topic test

 

kafka-console-consumer.sh \
--bootstrap-server bonah-kafka.kafka.svc.cluster.local:9092 \
--topic test \
--from-beginning

1. curl 명령어로 get_helm.sh 받아옴

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh

2. chmod로 execute 할 수 있는 권한 주기 및 실행

chmod 700 get_helm.sh
./get_helm.sh

3. service account인 tiller 생성

kubectl -n kube-system create sa tiller

4. tiller로 초기화? 흠..

helm init --service-account tiller --upgrade

 

ps. 권한문제 발생시, 다음형식의 yaml파일 생성 (ex: tiller-clusterrolebinding.yaml)

vi tiller-clusterrolebinding.yaml

작성

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: ""

 

kubectl create -f tiller-clusterrolebinding.yaml
helm init --service-account tiller --upgrade

이러면 성공할꺼임..

1. argo를 담을 namespace 생성

kubectl create namespace argo

2. argo를 apply한다(github 주소를 통해)

kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo/stable/manifests/install.yaml

3. namespace argo에서 service 목록을 보면, argo web page에 나온 것 처럼 argo-ui가 아닌, argo-server로 표기되어있다. 현재, external IP가 존재하지 않으므로, Load Balancer를 patch 해줌으로써 해결한다. (patch 또는 edit 둘다 가능할듯)

kubectl patch svc argo-server -n argo -p '{"spec": {"type": "LoadBalancer"}}'

그럼 다음과 같이, 20.194.12.66:2746 으로 인터넷을 통해 접속할 수 있다.

Argo Web 화면 예시

4. argo 권한문제

rolebinding을 통해 해결해준다. (정확한 이유는 잘 모르겠음, service account가 argo 또는 default에 clsuter-admin 권한을 부여시켜서 argo가 kubernetes resource에 접근 가능하도록 하는 느낌)

kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=argo:default -n argo
# 또는
kubectl create rolebinding argo-admin --clusterrole=admin --serviceaccount=default:default -n argo

5. argo 예제 실행해보기

argo submit -n argo --watch https://raw.githubusercontent.com/argoproj/argo/master/examples/hello-world.yaml

argo submit 명령어를 사용하면 shell에서 볼 수 있고

kubectl create -n argo https://raw.githubusercontent.com/argoproj/argo/master/examples/hello-world.yaml

kubectl 명령어로도 실행 가능하다

 

웹에서도 workflow가 실행됨을 확인할 수 있음.

'IT > Argo' 카테고리의 다른 글

argo role 문제  (0) 2020.08.11

+ Recent posts