일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Java IO
- 리스트
- Collection
- 쿠버네티스
- Thread
- 인프런
- 자바 입출력 스트림
- 실전 자바 고급 1편
- 도커 엔진
- filewriter filereader
- java
- java socket
- 컨테이너
- 알고리즘
- 쓰레드
- container
- Docker
- java network
- 자바 io 보조스트림
- 시작하세요 도커 & 쿠버네티스
- 자료구조
- 스레드 제어와 생명 주기
- 동시성
- Kubernetes
- 자바
- 김영한
- 스레드
- LIST
- 도커
- 멀티 쓰레드
- Today
- Total
쌩로그
[Kubernetes] 쿠버네티스 설치 본문
목차
- 포스팅 개요
- 본론
2-1. 쿠버네티스 설치 개요
2-2. minikube로 쿠버네티스 설치
2-3. 여러 서버로 구성된 쿠버네티스 클러스터 설치(with. Oracle Virtualbox) - 요약
1. 포스팅 개요
이 포스팅은 위키북스 출판사의 '시작하세요! 도커/쿠버네티스'의 제 5장 쿠버네티스 설치
에 대한 내용이다.
설치 개요 및 minikube로 쿠버네티스 설치 그리고 여러 서버로 구성된 클러스터를 설치하는 내용이다.
2. 본론
2-1. 쿠버네티스 설치 개요
- 쿠버네티스는 클라우드 플랫폼에서만 사용할 수 있는 기능이 일부 포함돼 있다.
- 따라서 로컬 개발 환경 이나 온프레미스 서버에서 쿠버네티스를 설치해 사용할 경우 로드 밸런서(LoadBalancer) 또는 퍼시스턴트 볼륨(Persistent Volume) 등의 기능을 사용하지 못할 수도 있다.
- 이러한 기능들은 kops(AWS) 또는 GKE를 이용해 생성한 쿠버네티스를 기준으로 설명한다.(참고로 필자는 AWS 및 GKE에서 쿠버네티스를 사용법은 생략한다.)
참고로 개발 용도로 사용하기 위한 Docker Desktop for Mac/Windows의 쿠버네티스와 Minikube의 사용 방법을 먼저 다룬다.
그다음 온프레미스 환경과 클라우드 인프라에서 쿠버네티 스를 설치하는 방법을 설명한다.
책은 1.23 버전을 사용하지만, 필자는 그냥 최신 버전을 사용한다.
참고로 필자 OS 환경은 윈도우다.
그리고 Minikube
를 사용한다.
Docker Desktop for Mac / Windows에서 쿠버네티스 사용
- Docker Desktop for Mac이나 Docker Desktop for Windows로 도커를 설치했다면 쿠버네티스를 별도로 설치하지 않아도 된다.
- 도커 트레이 아이콘에서 쿠버네티스를 활성화하기만 하면 손 쉽게 쿠버네티스를 사용할 수 있다.
- 설치 확인을 하려면,
kubectl version --short
를 해보면 된다.
참고 kubectl
- 참고로
kubectl
은 쿠버네티스의 API를 사용하기 위한 명령어이다. - 도커에서의
docker
명령어와 유사한 역할이다.
2-2. Minikube로 쿠버네티스 설치
- Minikube는 로컬에서 가상 머신이나 도커 엔진을 통해 쿠버네티스를 사용할 수 있는 환경을 제공한다.
- Docker Desktop for Mac/Windows에 내장된 쿠버네티스와 마찬가지로 쿠버네티스의 기능을 간단히 사용해볼 수 있다는 장점은 있지만, 실제 운영 환경에는
Minikube
를 적용하기 힘들 뿐더러 쿠버네티스의 몇몇 기능을 사용할 수 없다는 단점이 있다. - 따라서 가능하다면 여러 대의 서버로 쿠버네티스 클러스터를 구성하는 것이 좋다.
- Docker Desktop for Mac/Windows에 내장된 쿠버네티스와 마찬가지로 쿠버네티스의 기능을 간단히 사용해볼 수 있다는 장점은 있지만, 실제 운영 환경에는
Minikube
는 가상 머신 또는 도커를 통해 쿠버네티스를 설치하기 때문에 버추얼 박스 또는 도커 엔진이 미리 설치돼 있어야 한다.- 이번 절에서는 기본 설정을 이용해 버추얼 박스로
Minihibe
를 설치하는 방법과 리눅스 서버에서 가상 머신 없이 도커만으로Minikube
를 설치하는 방법을 알아본다.
버추얼박스 설치
- 먼저 버추얼 박스가 설치되어 있어야 한다.
- 없다면 설치하자.
- 다음 명령어로
minikube
가상 머신을 생성할 수 있다.minikube
는 자동으로minikube
의 ISO 파일을 내려받아 설치한다.minikube start --driver=virtualbox
- 참고로
hyper-v
옵션이 켜져 있으면 위 명령어는 성공하지 않는다.hyper-v
가 켜져있으면bcdedit /set hypervisorlaunchtype off
이라는 명령어를 입력하여hyper-v
옵션일 비활성화시키고 재부팅하여 위의 명령어를 다시 입력하면 된다. (출처 : 챗 GPT)- 혹은
hyper-v
를 끄지 않고minikube start
를 할 수도 있다.- 그러면
hyper-v
위에 쿠버네티스가 설치된다.
- 그러면
> kubectl version
Client Version: v1.32.0
Kustomize Version: v5.5.0
Server Version: v1.32.0
삭제하려면 minikube delete
를 하면 된다.
참고로 virtualbox로 하면 아래와 같이 나온다.

2-3. 여러 서버로 구성된 쿠버네티스 클러스터 설치
참고로 바로 위의 2-2. Minikube로 쿠버네티스 설치
와는 별개의 내용이다.
책에선 AWS 혹은 구글 클라우드 플랫폼을 통해 쿠버네티스를 설치하는 방법도 나와있지만 생략한다.
- 사용할 서버의 개수는 각자의 환경에 맞게 준비하면 되지만. 쿠버네티스의 각종 기능을 제대로 사용하려면 최소한 3대 이상의 서버를 준비하는 것이 좋다.
- 1개의 마스터와 3개의 워커 노드로 구성된 테스트용 쿠버네티스 클러스터를 설치하는 방법을 설명한다.
- 참고로 필자는 그냥 마스터 1개에 2개의 워커 노드만 구성할 것이다.
- 만약 처음 쿠버네티스를 접하면서, 단어가 낯설다면 한 개의 서버당 한 개의 노드라고 생각하면 된다.
- 각 노드의 역할과 쿠버네티스 컴포넌트 구성에 대해서는 뒤에서 나온다.
- 참고로 필자는 그냥 마스터 1개에 2개의 워커 노드만 구성할 것이다.
- 각 서버에서 아래의 항목들이 준비됐는지 확인한 후에 설치를 진행해야 한다.
- 모든 서버의 시간이 ntp를 통해 동기화돼 있는지 확인해야한다.
- NTP : 네트워크로 구성된 환경에서 구동되는 시스템들의 시간을 동기화하기 위한 규약( Protocol )이다.
- 모든 서버의 맥(MAC) 주소가 다른지 확인해야한다.
- 가상 머신을 복사해 사용할 경우. 같은 맥 주소를 가지는 서버가 존재할 수 있다.
- 모든 서버가 2GB 메모리, 2 CPU 이상의 충분한 자원을 가지고 있는지 확인해야한다.
- 사용하는 설치 도구에 따라 요구하는 최소 자원의 크기가 조금씩 다를 수 있다.
- 다음 명령어를 사용해 모든 서버에서 메모리 스왑(Swap)을 비활성화해야 한다.
- 메모리 스왑이 활성화돼 있으면 컨테이너의 성능이 일관되지 않을 수 있기 때문에 대부분의 쿠버네티스 설치 도구는 메모리 스왑을 허용하지 않는다.
- 모든 서버의 시간이 ntp를 통해 동기화돼 있는지 확인해야한다.
$ sudo swapoff -a
스왑 비활성화 방법
참고로 스왑 비활성화 방법은 다음과 같다.
참고 : https://suzuworld.tistory.com/447
## 일시적 비활성화하기(이건 재부팅 시 초기화되므로 아래 자동 비활성화를 사용하자)
# 스왑 상태 확인
$ free -h
# 스왑 일시적 비활성화
$ sudo swapoff -a
# 스왑 상태 재확인
$ free -h
# 출력
Swap: 0B 0B 0B
######################################################################
## 자동 비활성화
# 부팅 시 자동으로 비활성화하는 것이 좋다.
$ sudo vi /etc/fstab
# 주석처리 하기
# /.swapfile none swap sw,comment=cloudconfig 0 0
# 시스템 재부팅
$ sudo reboot
# 스왑 상태 재확인
$ free -h
# 출력
Swap: 0B 0B 0B
kubeadm
,kops
,GKE
는 모두 서비스 운영 환경에서 사용할 수 있는 좋은 방법이지만, 지금 설명하는 설치 및 클러스터 구성은 쿠버네티스의 기능을 테스트하기 위한 간소화된 방법이다.- 예를 들어 쿠버네티스를 실제 서비스 운영 단계에 적용하려면 마스터 노드의 다중화와 같은 추가적인 설정이 필요할 수도 있다.
- 참고로 지금 설명하는 간소화된 구성으로 쿠버네티스 클러스터를 설치해도 쿠버네티스의 핵심 기능을 사용하는 데에는 지장이 없다.
kubeadm으로 쿠버네티스 설치
- 쿠버네티스는 일반적인 서버 클러스터 환경에서도 쿠버네티스를 쉽게 설치할 수 있는
kubeadm
이라는 관리 도구를 제공한다. kubeadm
은 쿠버네티스 커뮤니티에서 권장하는 설치 방법 중 하나이므로 쿠버네티스를 처음 시작하는 사람도 쉽게 쿠버네티스 클러스터를 설치할 수 있다는 장점이 있다.- 또한
Minikube
및kubespray
와 같은 설치 도구도 내부적으로는kubeadm
을 사용하고 있기 때문에 현재도 활발히 개발되고 있는 쿠버네티스 설치 도구다.kubeadm
은 온프레미스 환경, 클라우드 인프라 환경에 상관없이 일반적인 리눅스 서버라면 모두 사용할 수 있다.
필자는 버추얼박스에서 VM 2대로 마스터 노드 1개와 워커 노드 2개를 진행한다.
(참고로 필자는 우분투 OS이다.)
먼저 각 노드가 될 서버에 도커를 설치하자.
도커 설치
참고로 공식 문서에서 긁어왔다.
# 책에 나오는 명령어인데 이 명령어로는 설치가 되지 않는 거 같다.
# $ wget -qO- get.docker.com | sh
# 충돌하는 모든 패키지 제거
$ for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
# 필수 패키지 설치
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl
$ sudo install -m 0755 -d /etc/apt/keyrings
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc
# 도커 저장소에 Apt source를 추가한다.
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
# 도커 패키지 설치
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 도커 설치 확인
$ docker --version
도커를 통해 설치된 containerd의 설정 파일은 기본적으로 컨테이너 런타임 인터페이스가 비활성화되어 있으므로 이를 containerd 기본 설정값으로 덮어씌운 뒤 containerd 를 재시작해야한다.
$ containerd config default | sudo tee /etc/containerd/config.toml
$ sudo vi /etc/containerd/config.toml
# 찾아서 flase -> true로 변경 : line 139번이다.
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
# 재시작
$ sudo service containerd restart
쿠버네티스 저장소 추가
쿠버네티스를 설치할 모든 노드에서 다음 명령어를 차례대로 입력해 쿠버네티스 저장소를 추가한다.
(현재 책의 버전과 맞지 않아 구글링한 명령어를 첨부한다. 구글링보단 쿠버 잘 아시는 분 글이다.)
# 우분투 24에서는 apt-key가 deprecated 되어서 주석 아래의 명령어를 쓰자. 책에 나와있는 명령어가 적용되지 않아 주석처리했다.
#$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
$ echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
2. containerd 및 kubeadm 설치
- 쿠버네티스는 컨테이너 런타임 인터페이스(CRI)를 지원하는 구현체를 통해 컨테이너를 사용한다.
- containerd, cri-o(크라이-오) 등이 컨테이너 런타임 인터페이스를 통해 컨테이너를 제어할 수 있는 방법을 제공한다.
- 이 책에서는 containerd를 설치해 쿠버네티스와 연동하는 방법을 설명한다.
- 도커를 설치하면 containerd가 함께 설치되므로 도커에 포함된 containerd를 쿠버네티스와 연동해 사용한다.
- 모든 노드에서 도커를 먼저 설치해야 한다.
참고
그냥 읽고 가면 좋다.
- 컨테이너 런타임 인터페이스는 쿠버네티스가 컨테이너를 제어할 때 사용하는 일종의 프로토콜이다.
- 간단히 생각해서 "컨테이너를 생성한다”, “컨테이너를 삭제한다” 등을 인터페이스로서 정의한 표준화된 규격을 컨테이너 런타임 인터페이스라고 생각하면 된다.
- 따라서 이론적으로는 containerd가 아니더라도 컨테이너 런타임을 지원하는 도구라면 무엇이든지 쿠버네티스와 연동해 사용할 수 있다.

- 도커를 실습할 때는 containerd나 컨테이너 런타임 인터페이스에 대한 설명 없이 단순히 docker 라는 명령어로 컨테이너를 사용했었다.
- 앞서 설명한 것처럼 도커를 설치하면 자동으로 containerd를 사용하도록 설정되지만 docker 명령어를 사용할 때는 위의 그림처럼 컨테이너 런타임 인터페이스를 직접적으로 사용하지는 않는다.
- 도커만 사용하는 사용자의 입장에서는 containerd 및 컨테이너 런타임 인터페이스의 존재를 몰라도 도커를 사용하는 데는 큰 지장이 없다.
- 앞서 설명한 것처럼 도커를 설치하면 자동으로 containerd를 사용하도록 설정되지만 docker 명령어를 사용할 때는 위의 그림처럼 컨테이너 런타임 인터페이스를 직접적으로 사용하지는 않는다.

하지만 쿠버네티스는 컨테이너 런타임 인터페이스를 사용하므로 containerd
나 crictl
같은 도구를 통해 컨테이너를 제어하도록 설정해야 한다.
때문에 위의 그림처럼 쿠버네티스는 도커 엔진을 사용하지 않을 수도 있으며, 도커 없이 containerd
만 설치해도 문제 없이 쿠버네티스를 사용할 수 있다.
이처럼 컨테이너 런타임 인터페이스를 사용하는 경우에는 docker
대신 crictl
이라는 명령어를 통해 컨테이너를 제어할 수 있다.

쿠버네티스의 기능들은 대부분 kubectl
로 사용할 수 있으므로 crictl
을 사용하는 경우는 그다지 많지 않다.
결론은 "컨테이너 런타임 인터페이스를 사용할 경우 crictl
명령어를 사용할 수도 있다” 정도를 알고 있으면 된다.
패키지 내려받기
모든 노드에서 쿠버네티스에 필요한 패키지를 내려받는다.
참고로 설치시 별도의 버전을 명시하지 않으면 최신 버전의 쿠버네티스가 설치된다.
# 우분투 기준이다.
$ sudo apt update
# 리눅스에서 쿠버네티스의 주요 패키지인 kubelet kubeadm kubectl kubernetes-cni 을 설치한다.
$ sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni
# kubelet, kubeadm, kubectl 패키지들을 자동 업데이트에서 제외시켜, 업데이트나 업그레이드 중에 해당 패키지가 변경되지 않도록 한다.
$ sudo apt-mark hold kubelet kubeadm kubectl kubernetes-cni
참고 : 특정 버전 설치
특정 버전의 쿠버네티스를 설치하지 않는 경우라면 넘기자
특정 버전의 쿠버네티스를 설치하려면 다음과 같이 kubelet의 버전을 명시해야한다.
사용할 수 있는 버전은 apt-cache policy kubelet
명령어로 확인할 수 있다.
$ apt-get install kubelet=1.23.6-00 kubeadm kubectl kubernetes-cni
3. 쿠버네티스 클러스터 초기화
마스터 노드로 사용할 호스트에서 다음 명령어로 클러스터를 초기화한다.
※ 주의 : 지금까지 마스터 노드, 워커 노드 둘 다 적용된 명령어지만, 아래의 명령어는 마스터 노드로 사용할 호스트에서만 사용하자.
# 앞에 sudo를 붙히자.
# root라서 sudo를 표기하지 않았다.
root@kube-master1:/$ kubeadm init --apiserver-advertise-address <마스터 노드로 쓰는 호스트의 IP> --pod-network-cidr=<쿠버네티스에서 사용할 컨테이너의 네트워크 대역> --cri-socket /run/containerd/containerd.sock
root 권한을 가지지 않는다고 error가 나올 수 있다.
sudo
를 잘 붙여주자.
--apiserver-advertise-address
옵션의 인자에 다른 누드가 마스터에게 접근할 수 있는 IP 주소를 환경에 맞게 입력한다.- 위 예시는 kube-master01 호스트(유저 이름 쪽 확인)에 접근할 수 있는 IP 주소를 써주면 된다.
- 쉽게 이야기 하면 마스터 노드로 쓸 호스트의 IP를 써주면 된다.
--pod-network-cidr
은 쿠버네티스에서 사용할 컨테이너(파드)의 가상 네트워크 대역이며, 각 서버의 네트워크 대역과 중복되지 않게 적절히 선택해야 한다.- 가상 네트워크 대역이다.
- 실제 대역을 주지 않도록 주의하자. -> 실제 대역과 겹치지 않도록 해야한다!
- 예: 172.200.10.0/24
특정 버전의 쿠버네티스를 설치하려면 명령어 뒤
--kubernetes-version 1.23.6
과 같이kubeadm init
명령어에 버전 옵션을 추가하면 된다.- 이전 단계에서 특정 쿠버네티스 버전을 설치하기 위해
apt-get install kubelet=1.23.6-00
과 같은 명령어를 사용했었다면 이 옵션을 사용해야한다.
- 이전 단계에서 특정 쿠버네티스 버전을 설치하기 위해
--cri-socket /run/containerd/containerd.sock
옵션을 사용하면 쿠버네티스가 containerd의 컨테이너 런타임 인터페이스를 통해 컨테이너를 사용하도록 설정할 수 있다.- 쿠버네티스는 도커와 containerd 양쪽이 모두 사용 가능할 경우 도커를 우선적으로 선택해 사용하므로 명시적으로 containerd 를 사용하도록 설정했다.
만약에 테스트 중인데, 메모리 부족의 경고가 나오면 위의 명령어에 다음 옵션을 추가하자.
(메모리가 부족하므로, 아래 옵션을 넣으라고 친절히 설명해준다.)
--ignore-preflight-errors=Mem
초기화가 완료되면 다음과 같은 출력 결과를 확인할 수 있습니다.
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join <IP>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<Hash Token>
- 중간에 출력된 3줄의 명령어를 복사해 마스터 노드에서 실행한다.
- 맨 마지막에 출력된 명령어인
kubeadm join ...
은 마스터를 제외한 노드인 워커 노드들에서 실행한다.- 단, 아래처럼
--cri-socket /run/containerd/containerd.sock
옵션을 명령어 마지막에 추가해 실행한다.
- 단, 아래처럼
지금까지 따라왔다면 아래와 같이 나올것이다.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kuber-master NotReady control-plane 3m9s v1.32.2
kuber-work1 NotReady <none> 2m14s v1.32.2
kuber-work2 NotReady <none> 2m15s v1.32.2
지금 STATUS
를 보면 NotReady
라고 되어있는데, Ready
가 되어야 잘 구성된 것이라고 할 수 있다.NotReady
를 Ready
로 바꾸기 위해 아래의 과정을 진행하자.
참고로 네트워크가 정상적으로 설치되면 아래와 같이 나온다.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kuber-master Ready control-plane 9m38s v1.32.2
kuber-work1 Ready <none> 8m43s v1.32.2
kuber-work2 Ready <none> 8m44s v1.32.2
아! 참고로 control-plane 이 마스터 노드다
4. 컨테이너 네트워크 애드온 설치
쿠버네티스의 컨테이너 간 통신을 위해 flannel
, weaveNet
등 여러 오버레이 네트워크를 사용할 수 있다.
지금은 calico
를 사용한다.
마스터 노드에서 아래의 명령어들로 calico(칼리코) 네트워크 플러그인을 설치하면 된다.
※참고
- 현재 책에서 Calico를 진행 중인데, 출판된 지가 좀 되었는지 명령어가 먹히지 않는다.
- 위에 언급한 flannel 로 진행하려면, https://suzuworld.tistory.com/447 이 사이트를, 확인하면 된다.
필자는 지금 되도록 책을 따라 가려고 Calico를 사용하려고 하는데, https://jh-labs.tistory.com/484 << 이 블로그가 잘 정리 되어있는 거 같아 참고하려고 한다.
$ curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O --insecure
# 필요에 따라 CALICO_IPV4POOL_CIDR 수정하면 된다.
# 처음엔 주석처리 되어있다.
# 필자는 생략한다.
$ vi calico.yaml
$ kubectl apply -f calico.yaml
$ sudo systemctl restart containerd
설치가 정상적으로 완료됐는지 확인하기 위해, 다음 명령어로 쿠버네티스 핵심 컴포넌트들의 실행 목록을 확인한다.
전부 Running
이라는 문구가 출력됐다면 정상적으로 설치가 완료된 것이다.
kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-689744956f-gct7v 1/1 Running 0 2m50s
calico-node-2d5t6 1/1 Running 0 2m50s
calico-node-49rmx 1/1 Running 0 2m50s
calico-node-58j6q 1/1 Running 0 2m50s
coredns-668d6bf9bc-dtvd2 1/1 Running 0 9m2s
coredns-668d6bf9bc-vbrd7 1/1 Running 0 9m2s
etcd-kuber-master 1/1 Running 1 9m9s
kube-apiserver-kuber-master 1/1 Running 3 9m9s
kube-controller-manager-kuber-master 1/1 Running 1 9m9s
kube-proxy-9n6zk 1/1 Running 0 8m17s
kube-proxy-nxqsk 1/1 Running 0 9m2s
kube-proxy-thmml 1/1 Running 0 8m18s
kube-scheduler-kuber-master 1/1 Running 1 9m9s
만약 아래와 같이 Pending
이 나온다면 설치가 제대로 되지 않은 것이다..
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
coredns-668d6bf9bc-2tfm8 0/1 Pending 0 20m
coredns-668d6bf9bc-v62jh 0/1 Pending 0 20m
etcd-kuber-master 1/1 Running 0 20m
kube-apiserver-kuber-master 1/1 Running 0 20m
kube-controller-manager-kuber-master 1/1 Running 0 20m
kube-proxy-lmtq6 1/1 Running 0 20m
kube-scheduler-kuber-master 1/1 Running 0 20m
kubectl get nodes
명령어를 사용하면 쿠버네티스에 등록된 모든 노드를 확인할 수 있다.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kuber-master Ready control-plane 9m38s v1.32.2
kuber-work1 Ready <none> 8m43s v1.32.2
kuber-work2 Ready <none> 8m44s v1.32.2
참고로 필자는 워커 노드는 진행하지 않았다.
kubeadm
으로 설치된 쿠버네티스는 각 노드에서 다음 명령어를 사용해 삭제할 수 있다.
쿠버네티스 설치 도중 오류가 발생했거나 테스트용 쿠버네티스 클러스터를 삭제할 때 사용하면 된다.
$ kubeadm reset
- 이전에 설치했던 쿠버네티스의 파일들이
/etc/kubernetes
디렉터리에 남아있는 경우kubeadm reset
명령어로 초기화한 뒤에도 설치에 실패할 수 있다. - 따라서
kubeadm reset
명령어를 사용한 뒤에 설치 오류가 발생한다면/etc/kubernetes
디렉터리를 다른 곳으로 옮기거나 삭제한 뒤 다시 설치를 시도해야 한다.- 삭제 후 처음부터 진행하려면
2. containerd 및 kubeadm 설치
윗 단락인 쿠버네티스 저장소 추가부터 다시 진행하면 된다. - 참고하라고 명령어 두 개 더 붙여넣는다.
sudo rm -rf /etc/cni/net.d
sudo rm -rf /etc/kubernetes
`
- 삭제 후 처음부터 진행하려면
※ 참고
- 쿠버네티스 버전 1.23까지는 도커 엔진 자체를 컨테이너 런타임 인터페이스로 사용할 수도 있었다.
- 단 도커 엔진은 컨테이너 런타임 인터페이스를 구현하지 않았으므로
dockershim
이라고 불리는 별도의 중간 단계를 걸쳐야만 했다.- 이 경우에는 쿠버네티스가 생성하는 컨테이너들을
docker
명령어로도 동일하게 확인할 수 있다.
- 이 경우에는 쿠버네티스가 생성하는 컨테이너들을

하지만 쿠버네티스 1.24 버전부터는 도커 엔진을 사용할 수 없게 변경었으며 반드시 containerd
, cri-o
등을 사용해야만 한다.
쿠버네티스가 도커 엔진을 더이상 사용하지 않는 이유에 대해서는 쿠버네티스 공식 문서를 참고하면 된다.
3. 요약
설치 자체는 얼마 걸리지 않지만, 책이 나온지 좀 되었으므로, 들어가지 않는 명령어가 좀 있다.
그걸 찾느라 애먹었다.
그리고 현재의 설치 방법보단 아래의 고참 블로그를 보는 게 더욱 좋을 것이다.
정말 깔끔하게 잘 해놨기 때문이다.
해당 포스팅을 통해서 쿠버네티스는 어떤 환경에서 사용해야 하는지,
어떤 쿠버네티스의 도구가 있는지를 알아봤고,
설치도 해봤다.
사실 이미 워커 노드도 구성해본 적은 있지만, 따라하려다보니 일단 마스터 노드로만 구성했다.
이제 다음 쿠버네티스 포스팅은 각각의 오브젝트를 살펴본다.
(참고로 자바의 Object랑은 조금 거리가 살짝은 있다.)
참고
https://suzuworld.tistory.com/447
https://jh-labs.tistory.com/484
'Deploy > Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 디플로이먼트(Deployment) (0) | 2025.03.04 |
---|---|
[Kubernetes] 쿠버네티스 레플리카셋(ReplicaSet) (14) | 2025.02.25 |
[Kubernetes] 쿠버네티스 파드(Pod) (4) | 2025.02.25 |
[Kubernetes] 쿠버네티스 시작 전 알고가기 (1) | 2025.02.25 |
[Kubernetes] 쿠버네티스의 특징 (0) | 2025.02.24 |