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 하나만 연결됨,, 아무튼 이렇게 하면 된다! 일단 작성해놓고 보면서 이 문제를 해결해봐야지..
'Tech > DevOps' 카테고리의 다른 글
[IntelliJ] 테스트 커버리지(Test coverage), 테스트 코드 측정하기 (0) | 2024.03.26 |
---|---|
[Docker] 도커로 Mysql 컨테이너 접속하기 (0) | 2024.02.13 |
[CI/CD][Docker] VM 환경에 Docker Engin 설치 (1) | 2023.12.08 |
[CI/CD] Vagrant란? (0) | 2023.12.07 |
[CI/CD][Cloud] 1. Virtualization이란? (1) | 2023.12.07 |
댓글