본문 바로가기
Tech/DevOps

[CI/CD] Kubernetes Cluster 환경 구축

by 싱브이 2023. 12. 13.
728x90
반응형

IT관련 종사자들은 하나의 OS, 하나의 시스템에서만 작업하는 것이 아니다. 다양한 플랫폼과 운영 체제, 개발, 운영 환경을 사용하고 있다. 이런 멀티 플랫폼이나 개발 및 운영 환경을 구축하기 위해 물리적인 시스템을 도입하는 것은 돈이 많이 든다! 그래서 하나의 시스템이 가지고 있는 환경이나 리소스를 분할해서 사용하는 것이 필요한데, 이 개념이 바로 Virtualization(가상화 환경)이다.

 

가상화 환경 구축을 위해 필요한 기본적인 개념 및 소프트웨어에 설치하고 사용 방법에 대해서 알아보자.

 

1. Virtualization이란?

2. Vargrant를 이용한 가상화 구성 (+Virtual Box)

3. VM 환경에 Docker Engine 설치

4. Kubernetes Cluster 구축


 

Kubernetes(k8s) 설치

kubernetes : docker와 같은 컨테이너 가상화 엔진을 관리해주는 오케스트레이션 도구로서 가상화 컨테이너들의 라이프 사이클, 일정 관리, 리소스 관리를 해주는 컨테이너 관리 플랫폼

 

1. 이전에 연결했던 Terminus로 SSH 접속한다. 
   - k82-master, k82-node01, k82-node02 다 연결할 것!

나는 참고로 3개 다 실행시키니까 용량이 딸려서 컴퓨터가 멈추는 현상이 있었다.. 그래서 임의로 자원을 줄여서 사용했다.

 

2. Ubuntu 서버에 Kubernetes(Master+Worker) 설치 

다 설치가 되었다면 kubectl get nodes를 입력했을 때 현재 작업에 참여하고 있는 노드의 역할이 보임!

 

master는 컨트롤 플레인의 역할을 하는 것이다. 즉, 전체 워커노드를 관리하기 위한 컨트롤인 것이다!

설치할 것이 달라서 집중해야한다.

master : kubeadm, kubelet, kubectl, 설정이 달라짐

node : kubeadm, kubelet, kubectl, 노드 연결

 

 

설치하기

master와 node 모두 - 설치

1. kubeadm, kubelet, kubectl 설치 및 활성화
apt-get install -y apt-transport-https ca-certificates curl

 

2. Key 추가 및 apt update

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

apt-get update 

 

3. 최신 버전 설치

apt-get install -y kubelet kubeadm kubectl

 

4. 버전 확인

kubeadm version
kubelet --version
kubectl version

 

5. 최신 버전 업데이트 방지

apt-mark hold kubelet kubeadm kubectl

 

6. (K8s 1.22부터) systemd와 cgroup을 맞추는 작업 필요

sudo mkdir /etc/docker

cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

 

7. containerd 및 kubeadm 최신 업데이트

rm /etc/containerd/config.toml
systemctl restart containerd
kubeadm config images pull

 

master - 설정

1. 초기화(apiserver-advertise-address는 Master ipaddress -> 192.168.56.10)

kubeadm reset
kubeadm init --pod-network-cidr=10.96.0.0/16 --apiserver-advertise-address=192.168.56.10

 

*나는 cpu를 1개로 설정했기 때문에 어쩔 수 없이 kubeadm init --ignore-preflight-errors=all --apiserver-advertise-address=192.168.56.10 를 입력했다.

 

2. Kubeadm 실행 후 생성 된 아래 명령어를 복사해 놓고, Worker Node에서 실행 (생성되는 IP, Token 값은 본인의 환경에 따라 다름

kubeadm join 10.0.2.15:6443 --token ri6ibi.1dbfj6lmlgf3x3j2 \
        --discovery-token-ca-cert-hash sha256:eea3563675028bbf0ff48f402268e532dc6f9cbc4cdad83ec289bf976f5e1ca6

 

3. kubectl을 root 계정없이 실행 (반드시 실행)

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

 

4. Network add-on - Calico 기본 설치

curl https://docs.projectcalico.org/archive/v3.25/manifests/calico.yaml -O --insecure
kubectl apply -f calico.yaml
kubectl get pods --all-namespaces

 

 

node - 연결

1. (Master의 init 작업에서 복사 한 커맨드를 사용) 연결

kubeadm join 192.168.56.10:6443 --token 9q3cgq.xwn70d8u5urqz4pg \
        --discovery-token-ca-cert-hash sha256:eea3563675028bbf0ff48f402268e532dc6f9cbc4cdad83ec289bf976f5e1ca6

 

* 오류가 났다면 kubeadm reset 으로 초기화 후 다시 실행

 

2. master에서 확인

kubectl get nodes

 

 

 

테스트

1. Pod 실행

kubectl run nginx-test --image=nginx --port 80

 

2. Service 실행

kubectl expose pod nginx-test 
kubectl get services

 

3. Service Type 변경

kubectl edit service nginx-test # (ClusterIp -> NodePort)

4. 확인 (port는 service에서 forwarding된 port 사용)

 

 

 

 

 

* 나는 해보니 리소스 부족으로 잘 안된다 ㅜㅜ master 하나만 연결됨,, 아무튼 이렇게 하면 된다! 일단 작성해놓고 보면서 이 문제를 해결해봐야지..

 

 

참고 : 멀티 OS 사용을 위한 가상화 환경 구축 가이드 (Docker + Kubernetes)

728x90
반응형

댓글