Job / Cron Job 은 일반적으로 시스템의 batch 에 해당하는 항목이다.

Job 은 단순 batch 파일 / Cron Job 은 Cron Job 에 해당

 

<Sample> Job : 파이의 주기율을 2000번째까지 구하는 코드

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

일반적으로 사용되는 옵션 설멍

restartPolicy = OnFailure : 파드가 비정상적으로 종료 되었을때, 파드는 실패한 노드에서 재실행 

restartPolicy = Never : Job 완료 시 다시 실행 하지 않음, 작업이 실패 되었을때 스케줄러에 의해 재실행

backoffLimit = N : 작업 실패 시 N 번만큼만 재실행

parallelism = N : Job 파드를 병렬로 N 개 실행 한다(동시에 N 개 까지 수행 가능)

completions = N : 작업 완료된 후 N 번 수행(완료 -> 재실행 -> 완료 -> 재실행 -> .....-> N 번)

activeDeadlineSeconds : 제한시간

 

CronJob Schedule : "* * * * *"

  • Min
  • Hours
  • Day
  • Month
  • Da of the week (요일)

 

 

https://kubernetes.io/ko/docs/concepts/workloads/controllers/job/

 

잡에서 하나 이상의 파드를 생성하고 지정된 수의 파드가 성공적으로 종료될 때까지 계속해서 파드의 실행을 재시도한다. 파드가 성공적으로 완료되면, 성공적으로 완료된 잡을 추적한다. 지정

kubernetes.io

 

'k8s > CKAD' 카테고리의 다른 글

ingress 개념 정리  (1) 2024.01.21
NetworkPolicy 개념 정리  (0) 2024.01.20
[CKAD] Secret 생성 후 Pod 에 env 로 사용  (0) 2023.12.01
[CKAD]Docker image build  (0) 2023.09.09

Docker Image Build

  사용자가 원하는 Docker image 를 생성하기 위해 Dockerfile 로 직접 만들 수 있다.

 

 

Dockerfile 생성

  vi dockerfile 로 아래와 같은 구문의 텍스트 작성

FROM centos:7.5.1804
RUN yum install httpd -y
RUN echo "hello" > /var/www/html/index.html
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]

   명령어 참고

  • From : docker 를 생성할 base image 로써 일반적으로 dockerhub 에 있는 이미지를 주로 사용(centos, ubuntu, nodejs, python 등)
  • WORKDIR : 쉘의 cd 명령어와 동일한 기능으로, 작업 디렉토리를 정할때 사용
  • RUN : 쉘에서 커맨드를 실행하는 것과 동일한 기능
  • ENTRYPOINT : 컨테이너가 실행될때 수행되는 커맨드를 지정할때 사용. 이 커맨드로 실행된 프로세스가 죽을때 컨테이너가 같이 종료됨
  • CMD : 이미지를 컨테이너로 띄울때 실행할 커맨드를 지정
  • EXPOSE : 컨테이너 리스닝 포트를 지정할때 사용. docker run -p 옵션과 동일한 기능

 

Docker image buld

  Dockerfile 이 있는 경로에서 아래 명령어 수행

  -t 옵션으로 태그를 지정할 수 있다

docker build -t web:v1 .

  명령어 수행 후 이미지 생성 확인

 

Docker run

  생성한 이미지가 정상적으로 실행 되는지 확인

##web 이미지 실행
docker run -d --name web web:v1

##web 이미지 실행 확인
docker ps -a | grep web

##web 이미지 IP 정보 확인
docker inspect web | grep -i ipaddress

  curl 명령어를 사용하여 이미지 검증

'k8s > CKAD' 카테고리의 다른 글

ingress 개념 정리  (1) 2024.01.21
NetworkPolicy 개념 정리  (0) 2024.01.20
[CKAD] Secret 생성 후 Pod 에 env 로 사용  (0) 2023.12.01
[CKAD]k8s Job / CronJob  (0) 2023.09.10

k8s를 사용하는 가장 간단한 방법은 EKS 를 사용하는 것이다. 하지만 CKA 연습을 위해, 혹은 비용문제로 인해 EKS 를

사용 하지 못하는 경우가 있다. 이때 VM ware 를 사용하는 것도 방법이지만 EC2에서 직접 k8s 를 설치 하여 사용하는 방법도 고려할 수 있다.


참고사항 

 

  • k8s를 기동하기 위해서는 2core, 2mem 가 최소 사양이 되므로, 인스턴스 타입을 고려해서 EC2 생성
  • k8s 가 버전이 올라가면서 docker runtime 을 지원하지 않게 됨에 따라, CRI(container runtime interface) 를 직접 설치 해야 한다 // 1.24 버전부터 지원이 안되는 것으로 알고 있다
  • k8s 는 CNI(container network interface)도 기본 지원을 하지 않는다. 따라서 사용할 CNI 또한 직접설치해야 한다.

스펙 상세

 

EC2 : t3a.medium 

Disk : gp3 15 GiB

OS : Ubuntu22.04

k8s : 1.2.0

CRI : crio-o

CNI : calico

 


설치 상세 내용

 


1. sudo -i 로 root 로 k8s 를 설치 진행 한다

 

2. ubuntu 기본 apt 업데이트 진행

sudo apt-get update
sudo apt-get upgrade -y

3. k8s 설치를 위해 필요한 인증관련 도구 설치

sudo apt-get install -y apt-transport-https ca-certificates curl

4. swap off 설정

sudo swapoff -a

5. cri-o 설치를 위한 변수 지정

export OS_VERSION_ID=xUbuntu_$(cat /etc/os-release | grep VERSION_ID | awk -F"=" '{print $2}' | tr -d '"')
export CRIO_VERSION=1.28

 

 

6. cro-o 설치

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS_VERSION_ID/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS_VERSION_ID/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS_VERSION_ID/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS_VERSION_ID/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -


sudo apt-get update
sudo apt-get install cri-o cri-o-runc cri-tools -y

sudo systemctl daemon-reload
sudo systemctl enable crio --now

※cri-o 를 설치하게 되면 cri-o 기본 설정으로 cni 가 설치가 되는데, 여기서 우리는 calico 를 사용할 예정이므로 아래 경로에 있는 파일 삭제

/etc/cni/net.d 

 

7. k8s 설치및 사용을 위한 kube 관련 도구 설치

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

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

8. kubeadm init 을위 환경 설정

modprobe br_netfilter

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward

9. k8s cluster 생성

아래 내용을 샘플로 본인에 맞는 cidr 및 version install
sudo kubeadm init --pod-network-cidr=10.85.0.0/16 --kubernetes-version 1.28.0


sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version 1.28.0 --node-name master-node

생성이 완료되면 아래와 같은 내용이 출력 된다

아래 내용중 kubeadm join 부분을 꼭 저장해 두자

-> 추후 노드 추가할때 해당 부분이 필요

10. kube 명령어 설정 및 kube 설정 확인

  • 아래와 같이 coredns 가 pending 인 상태가 된것을 확인 할 수 있다.
  • 해당 부분은 cni 를 설치하고 나면 정상적으로 running 상태로 변경된다
  • coredns 가 running이 되면 node 가 ready 상태로 변경 된다
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
alias k=kubectl

k get no
k get po -A

11. calico cni 설치

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml


wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml

위 파일을 다운로드 받은 후 vi 로 아래 사진과 같이 13번째줄의 cidr 을 수정 해야함
kubeadm init 시 pod cidr 를 192.168.0.0/16 로 지정 했으면 수정없이 배포하면 됨

k apply -f custom-resources.yaml

12. node 및 pod 확인

  • 시간이 지나면 아래와 같이 pod 와 node 가 running 이 되는 것을 확인 할 수 있다
watch kubectl get po -A -o wide
kubectl get no

 

13. calico 후속작업

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

 

여기까지하면 k8s master cluster 는 설치가 완료 된다.

이제 설치한 k8s cluster 에 node 를 추가하는 방법을 진행해 보겠습니다.



 

클러스터 생성시 진행한 1~8 번 까지의 과정을 반복한다

하나하나 입력하면 귀찮으니 아래 스크립트로 진행

#! /bin/sh

sudo apt-get update
sudo apt-get upgrade -y

sudo apt-get install -y apt-transport-https ca-certificates curl
sleep 1
sudo swapoff -a

sleep 1
export OS_VERSION_ID=xUbuntu_$(cat /etc/os-release | grep VERSION_ID | awk -F"=" '{print $2}' | tr -d '"')
export CRIO_VERSION=1.28

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS_VERSION_ID/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
sleep 1
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS_VERSION_ID/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list

sleep 1
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS_VERSION_ID/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -

sleep 1
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS_VERSION_ID/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -

sudo apt-get update

sleep 1
sudo apt-get install cri-o cri-o-runc cri-tools -y
sleep 1
rm /etc/cni/net.d/*


sleep 1

sudo systemctl daemon-reload
sudo systemctl enable crio --now

sleep 1
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sleep 1
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sleep 1
sudo apt-mark hold kubelet kubeadm kubectl

modprobe br_netfilter

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward

 

이제 클러스터 생성시 저장해둔 kubeadm join 명령어를 입력

 

마스터노드에서 아래와 같이 조회해 보면 정상적으로 클러스터 구성이 된 것을 볼 수 있다

주의사항

root 가 아닌 다른 계정에서 k8s 를 사용하기 위해서는 아래 명령어 입력 필요

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

'k8s' 카테고리의 다른 글

k8s CoreDNS Configmap DNS 변경  (0) 2023.06.11

개요 : EC2 에서 k8s 를 구성하여 사용중 pod 에서 AWS Network 대역대 DNS 를 찾지 못한 현상이 발생하여, k8s CoreDns 에 지정된 DNS 조회 주소를 변경

 


방법 : CoreDns ConfigMap 수정 후 pod 재실행


 

기본 설정된 내용은 아래와 같습니다.

  • 아래 yaml 파일중 forward . /etc/resolv.conf 부분을 forward . 169.254.169.253 로 변경
  • 169.254.169.253 IP 는 AWS Private Subnet 에서 사용하는 DNS 서버 IP 입니다.
k edit cm -n kube-system coredns
##기본 설정된 내용
apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health {
           lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf  {
           max_concurrent 1000
        }
        cache 30
        loop
        reload
        loadbalance
    }

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html

1. 컨트롤 플레인 노드 업그레이드

master node 에서 실행
yum install -y kubeadm-1.26.x-0 --disableexcludes=kubernetes

다운로드 결과 조회
kubeadm version

업그레이드 계획 확인
sudo kubeadm upgrade plan v.1.2x.x

2. kubeadm upgrade

sudo kubeadm upgrade apply v1.2x.x

결과 확인
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.26.x". Enjoy!

[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.

3. node drain

kubectl drain <node-to-drain> --ignore-daemonsets

4. kubelet and kubectl upgrade

yum install -y kubelet-1.2x.x-0 kubectl-1.2x.x-0 --disableexcludes=kubernetes

5. kubelet reolad and uncordon

sudo systemctl daemon-reload
sudo systemctl restart kubelet

kubectl uncordon <node-to-drain>

6. workernode upgrade

wokernode 에서
yum install -y kubeadm-1.2x.x-0 --disableexcludes=kubernetes

sudo kubeadm upgrade node

7. node drain and kubelet/kubectl upgrade

kubectl drain <node-to-drain> --ignore-daemonsets

yum install -y kubelet-1.2x.x-0 kubectl-1.2x.x-0 --disableexcludes=kubernetes

8. kubelet restart

sudo systemctl daemon-reload
sudo systemctl restart kubelet

kubectl uncordon <node-to-drain>

 

'k8s > CKA' 카테고리의 다른 글

[연습]9. etcd backup AND restore  (0) 2023.03.04
[연습]7. pod_mount  (0) 2023.03.04
[연습]6. Pod run with env  (0) 2023.03.02
[연습]5. Pod run  (0) 2023.03.02
[연습]4. expose AND service  (0) 2023.03.02

+ Recent posts