반응형
Notice
Recent Posts
Recent Comments

05-02 13:55
관리 메뉴

SaevOps

[k8s] Kubernetes에 ELK(Elasticsearch+Kibana) 구축하기 본문

클라우드/Kubernetes

[k8s] Kubernetes에 ELK(Elasticsearch+Kibana) 구축하기

세브웁스 2024. 3. 27. 08:00
반응형
테스트 환경

 

 장비 부족으로 마스터 노드 1대로 kubernetes 구성

 사설IP : 172.16.10.184

 OS : Rocky Linux 8.7 ( Green)

 CPU : 3Core

 Memory : 16GB

 최종 테스트 날짜 : 2024.03.26

 

쿠버네티스 설정

 

# swap 끄기 & hostname 설정

# swap 끄기
sudo swapoff -a
sudo sed -i -e '/swap/d' /etc/fstab

# hostname 설정
hostname kubemaster
su -


# hosts 파일에 추가

vi /etc/hosts

...
172.16.10.184 kubemaster


# dnf 레포지토리 등록

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo


# dnf 업데이트

sudo dnf update -y --nobest


# 충돌나는 패키지를 교체(ex, podman)

sudo dnf install -y docker-ce docker-ce-cli containerd.io --allowerasing


# 도커 버전 확인

docker --version


# 도커 상시 시작 확인

sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker


# 도커용 폴더 생성 & 데몬설정

sudo mkdir -p /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 daemon-reload
sudo systemctl restart docker


# 컨테이너 추가 설정 

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF


# 커널 overlay 모듈 br_netfilter 모듈 로드  

  1.   1.  overlay : 오버레이 파일 시스템을 사용하기 위해 필요
  2. - br_netfilter : 브리지 네트워킹 시스템에서 패킷 필터링을 위해 필요
sudo modprobe overlay sudo modprobe br_netfilter

 

 

# 커널 매개변수 조정

  1. net.bridge.bridge-nf-call-iptables = 1: 이 설정은 리눅스 커널이 브리지 네트워크 트래픽을 iptables로 보내도록 하는 것을 제어함. 브리지 네트워크는 두 개 이상의 네트워크를 연결하는 데 사용되며, 이 설정이 활성화되면 브리지 트래픽이 iptables를 통과하여 방화벽 규칙이 적용됨
  2. net.ipv4.ip_forward = 1: 이 설정은 리눅스 커널에서 IPv4 패킷을 전달하는 기능을 활성화함 즉, 이 설정이 활성화되면 리눅스 시스템이 패킷을 라우팅할 수 있음. 이것은 라우터 또는 게이트웨이로서의 역할을 수행하도록 시스템을 설정하는 데 사용됨.
  3. net.bridge.bridge-nf-call-ip6tables = 1: 이 설정은 리눅스 커널이 IPv6 브리지 네트워크 트래픽을 ip6tables로 보내도록 하는 것을 제어함. IPv6 패킷에 대한 방화벽 규칙을 적용하기 위해 사용됨
# 커널 매개변수 조정
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

# 변경사항 적용
sudo sysctl --system



# 쿠버네티스 레포지토리 추가
- 2024년 3월 26일 기준 베이스주소가 기존 k8s -> pkgs로 변경

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl
EOF


# 쿠버네티스 설치 및 자동재기동

sudo dnf -y install kubelet kubeadm kubectl --disableexcludes=kubernetes epel-release
sudo systemctl enable --now kubelet


# 컨테이너 데몬 설정파일 수정

sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

sudo vi /etc/containerd/config.toml
---------------------------
......
        [plugins."io.containerd.grpc.v1.cri".containerd.default_runtime.options]
          SystemdCgroup = true
......
---------------------------


컨테이너 재기동 및 kubelet 재기동

systemctl restart containerd
systemctl restart kubelet

 

 

# kubeadm 실행

- pod-network-cidr : Kubernetes 클러스터 내의 Pod 네트워크의 CIDR (Classless Inter-Domain Routing)를 지정

- apiserver-advertise-address : Kubernetes API 서버가 사용할 IP 주소를 지정 (접속할때 IP -노드IP )

- upload-certs : TLS 인증서를 클러스터 저장소에 업로드하는 데 사용

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.16.10.184    --upload-certs



# 이때 출력되는 연결 명령어 기록

- 2024-03-21
kubeadm join 172.16.10.184:6443 --token ee5ekv.vw8nowkcstbhgmfp \
        --discovery-token-ca-cert-hash sha256:78611d8e21170c1b04ce5be8bf38254c082533d474ee7656d33e35f045875fe8


# 별칭 설정

# 단순 설정
alias k=kubectl

# 영구 설정
vi ~/.bashrc
…
alias k=kubectl


# 설정파일 복제 및 권한 부여

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


# 마스터노드가 워커노드 역할도 수행하게 설정

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


##  워커노드 별도로 존재시 카피 

scp /etc/kubernetes/admin.conf 172.16.10.184:/root/.kube/config


# 임시폴더 생성 후 파일 가져오기

 

cd /usr/local/imsi
curl https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml -O
# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml


# calico 설정 파일 수정 (수정이 어려울시 밑의 파일 사용)

vi calico.yaml
---------------------------
            - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16 (파드가 사용할 IP)
---------------------------

calico.yaml
0.23MB

 

 


# calico 설정파일 기반 설치

kubectl apply -f calico.yaml

kubectl get pods -o wide -A

# calico-kube-controllers 가 Pending 상태이면 아래명령을 수행하자.
sudo systemctl restart containerd


# pv 생성
- slave node에 폴더 생성 (클러스터용 3개 생성)

mkdir -p /data/volumes/pv1
mkdir -p /data/volumes/pv2
mkdir -p /data/volumes/pv3

 

# pv 생성 (pvall.yaml파일 )

[root@kubemaster pvctest]# k apply -f pvall.yaml

pvall.yaml
0.00MB

 

 



# 헬름설치

[root@kubemaster ~]#wget https://get.helm.sh/helm-v3.7.0-linux-amd64.tar.gz
[root@kubemaster ~]#tar -zxvf helm-v3.7.0-linux-amd64.tar.gz
[root@kubemaster ~]#sudo mv linux-amd64/helm /usr/local/bin/helm
[root@kubemaster ~]#helm version



# 헬름 레포지토리에 elastic 추가

helm repo add elastic https://helm.elastic.co

 

# 프로젝트를 위한 elk namespace 생성

k create ns elk


# Elasticsearch / kibana 설치

ela_values.yaml
0.01MB

 

 

 

kib_values.yaml
0.00MB

 

 

 

# install 명령어
helm install elasticsearch elastic/elasticsearch -n elk --values ela_values.yaml 
helm install kibana elastic/kibana -n elk --values kib_values.yaml

# uninstall 명령어
helm uninstall elasticsearch -n elk

 

# 관련 명령어

# 패스워드 조회
kubectl get secrets --namespace=elk elasticsearch-master-credentials -ojsonpath='{.data.password}' | base64 -d

# 토큰 발급
kubectl get secrets --namespace=elk kibana-kibana-es-token -ojsonpath='{.data.token}' | base64 -d

# 인덱스조회
https://172.16.10.184:30000/_cat/indices?v
설명 및 후기

 

- elasticsearch 기본 계정은 yaml 파일에서 설정가능하다.

- helm은 이미지 보관소이며, values 파일에서 기타 설정값들을 변경후 설치하면 간편하게 설치가능하다.

- 2부에서는 실제 고객사나 사내시스템에 beat 설치하고, elasticsearch와 kibana에서 값을 받아오는것을 포스팅할 예정이다.

- 근데 이걸로 회사내 서비스용서버에 깔아두고, 유지보수하는 업체에 beat 깔아서 모니터링하면 유지보수가 쉽게 되지 않을까? 관제 가능할거같은데? 라는 생각이 든다.

반응형

'클라우드 > Kubernetes' 카테고리의 다른 글

[CKA] 자격증 문제  (0) 2025.02.10
[RKE2] KTCloud 서버 ElasticSearch 설치  (1) 2024.12.31
[ELK] ElasticSearch 설치  (1) 2023.10.17
[k8s] 명령어 자동 완성 / 별칭 / 약어 정리  (0) 2023.02.16
[OCI] OKE 구성  (0) 2022.11.25
Comments