본문 바로가기
도커_쿠버네티스

3. 우분투에 도커/쿠버네티스 설치하기(feat. 에러 해결)

by 어쩌다개발 2023. 3. 20.
반응형

0. 우분투에서 터미널 실행

우분투 설치 참고 : https://devmango.tistory.com/177

2. Oracle VM VirtualBox에 Ubuntu 설치하기

Oracle VM VirtualBox 설치 : https://devmango.tistory.com/176 1. oracle vm virtualBox 설치하기(Feat. 설치 시 에러) 1. https://www.virtualbox.org/wiki/Downloads 에서 Windows hosts 를 다운받는다. 2. 다운르도 받은 파일을 설치하

devmango.tistory.com

 

1. 저장소 설정

 
1) Docker를 설치하기 위해 apt 패키지를 업데이트한다.
(특정한 패키지를 다운로드 받기 전에 항상 해주는 것이 좋은데, Debian 서버와의 최신 싱크를 마추기 위한 것으로 패키지들을 최신으로 업데이트하는 것이 아닌 설치 가능한 리스트를 업데이트 하는 것이다.)

sudo apt-get update
 
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

!참고) sudo apt-get update 시 E: /var/lib/apt/lists/ 디렉터리를 잠글 수 없습니다 가 뜨는 경우 에러가 뜨는 경우 하단 error 해결 참고
2) Docker's 공식 GPG key를 추가한다. (GPG란 GNU Privacy Guard로 해당 키는 암호화해주는 프로그램으로 개인-머신, 개인-개인, 머신-머신 사이에 교환되는 메시지나 파일을 암호화 하거나 서명을 추가하여 작성자를 확인하고 변조 유무를 식별할 수 있게 해준다.)

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

 
3) Stable repository 설정을 해준다.

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

2. Docker 엔진 설치

 
1) 최신버전의 Docker Engine 및 containerd를 설치

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

 
2) 도커 버전 확인

sudo docker version

 
3) Docker 서비스 등록 및 실행

sudo systemctl enable docker
sudo systemctl start docker

 

3. Kubernetes 설치

1) 설치 전 확인 사항

sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab

 
 

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
 
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

 
 

sudo ufw disable
방화벽이 비활성 되었으며 시스템이 시작할 때 사용되지 않습니다

 

4. kubelet, kubeadm, kubectl 설치 (master, node)

1) 필수 패키지 추가

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

2) 구글 클라우드 퍼블릭 키 다운로드

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

3) 쿠버네티스 설치를 위해 쿠버네티스 저장소 추가

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

4)  kubelet, kubeadm, kubectl 설치를 순차적으로 진행
- kubeadm : 클러스터를 부트스트랩하는 명령어
- kubelet : 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트
- kubectl : 클러스터와 통신하기 위한 커맨드 라인 유틸리티

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

5) 쿠버네티스 서비스 등록 및 재시작 수행

sudo systemctl daemon-reload
sudo systemctl restart kubelet

 

5. Control-plane 구성 (master only)

 
1) ! 해당 작업은 꼭 master 서버에서만 진행 필요

kubeadm init

 
2) 아래와 같은 형식의 토큰이 발행되면 복사해둔다.

kubeadm join 111.11.111.11:6443 --token zbgv72.v9ac8xhex128xjwp \
        --discovery-token-ca-cert-hash sha256:2193f25bad65918edbc41b543e22327741bdd99748b1

 
3) 모든 사용자 kube 명령어 사용

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

 

6. pod network 애드온 설치(!! master 서버만

1) Pod간 네트워크 통신을 위한 작업

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

 

7. Worker node 구성 (worker node 서버에서만!!)

1) 5.-2)에서 복사한 토큰을 붙여넣기 한다.

kubeadm join 111.11.111.11:6443 --token zbgv72.v9ac8xhex128xjwp \
        --discovery-token-ca-cert-hash sha256:2193f25bad65918edbc41b543e22327741bdd99748b1

 

8. Master에서 노드 확인

1) 노드가 연결되었는지 확인(master에서)

kubectl get nodes -o wide //또는 kubectl get nodes

2) Kubectl 명령어를 tab하여 자동완성 설정(master에서만)

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

 

! 에러 참고

1. user is not runnig as root error
root에서 작업을 안 해서 뜨는 에러인듯, SUDO를 붙이거나 root 경로로 이동하면 된다.
(그래도 해결 안 되는 경우 https://min0114.tistory.com/30 를 참고)

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all

2. Port 10250 is in use error
내가 이해를 잘 못 해서 마스터 서버에서도 kubeadm join을 해서 뭔가 해줘야 되는지 알고 계속 입력했는데, 이미 마스터에 쿠버네티스가 설치된 상황에서 내가  join을 시도해서 그런거였다. join은 워커노드에서만 하는 작업이다.

3. unknown service runtime.v1.RuntimeService error
Ubuntu 20.04 / containerd.io 1.3.7 이상에서 발생하는 문제로 해당 블로그 참고 : https://musclebear.tistory.com/165

sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
sudo kubeadm init

4. kubectl get nodes -o wide 명령어로 확인 시 NotReady인 경우 해결 방법

해결 방법 참고: https://nirsa.tistory.com/292
5. sudo apt-get update 시 E: /var/lib/apt/lists/ 디렉터리를 잠글 수 없습니다 가 뜨는 경우

sudo apt-get update

E: /var/lib/apt/lists/ 디렉터리를 잠글 수 없습니다
//모든 프로세스를 kill
sudo killall apt apt-get


//진행중인 프로세스가 없으면, 아래와 같이 하나하나씩 디렉토리를 삭제
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*

sudo dpkg --configure -a
sudo apt-get update

해결 방법 참고 : https://simsim231.tistory.com/34
6. [preflight] Runninig pre-flight checks 에서 멈추면서 5분뒤쯤 connect: connection refused 에러 발생

이 에러로 진짜 고생했다. 우선 공유기를 쓰는데 10.0.2.15로 잡히는게 의심됐고, 두번째로는 서버들 복제를 했을 때 전부 아이피가 10.0.2.15로 똑같이 잡히는게 문제로 보였다. (ifconfig로 확인)
vm 아이피 변경도 해보고 정말 삽질을 많이 했는데 VM VritualBox 설정 > 네트워크 > 어댑터1 > 어댑터에 브리지로 변경하니 해결됐따.
찾아봤을 땐 NAT는 VM에서 자체적으로 IP를 할당하는거다보니 원래 10.0.2.15 형식으로 뜨는 듯 했다.

그리고, 이건 확실한지 모르겠지만 찾아봤을 땐 쿠버네티스 사용하려면 할당 IP가  192.168...형식이어야 한다고 해서 브리지로 변경 후 확인 해보니 각 서버마다 아이피가 다르게 잡혔고 IP 형식도 192.168.. 형태였다.
결론적으로 connect: connection refused 에러가 해결됐다.
참고) 기존에 이미 서버에 설치된 쿠버네티스는 아이피를 바꾸니 토큰이랑 다 꼬여서 안 된다. 수정하는 시간보다는 그냥 복제해서 새로 설치하는게 빠르다. 그리고 복제 후 꼭 미리 ifconfig로 아이피가 각 서버마다 다른지 확인하고 설치하는게 좋다. 

포스팅 참고
https://confluence.curvc.com/pages/releaseview.action?pageId=98048155
https://dongminkim94.tistory.com/74

sudo apt-get update 이유

Ubuntu 사용시 해당 명령어를 특정한 패키지를 다운로드 받기 전에 항상 해주는 것이 좋다. 왜냐하면 Debian 서버와의 최신 싱크를 맞추기 위함이다.(패키지들을 최신으로 업데이트하는 것이 아닌

dongminkim94.tistory.com



뽀모도로 타이머(Pomodoro Timer) - Google Play 앱

뽀모도로(Pomodoro)공부법은 단시간 집중력 향상을 위한 자기주도 학습법입니다.

play.google.com

조상님LOTTO - Google Play 앱

무료로 로또 당첨 확률을 높일 수 있습니다.

play.google.com

반응형

댓글