쿠버네티스 클러스터 구성 Step 2: docker, kubernetes 설치

bo-yoon·2021년 5월 25일
1

kubernetes

목록 보기
2/10

쿠버네티스 클러스터 구성 Step 1: vm 설정 에 이어지는 글입니다.

스왑 오프를 해서 클러스터 기능을 최적화 하기

# swap 해제
 sudo swapoff -a // 현재 커널에서 스왑 기능 끄기
➢ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 

도커 & 쿠버네티스 설치

# 패키지 도구 업데이트
sudo apt update
sudo apt-get update

# 기존에 있는 도커 삭제
sudo apt-get remove docker docker-engine docker.io


# 도커 라이브러리 설치
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y


# curl 명령어를 통해 gpg key 내려받기
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 키를 잘내려받았는지 확인
sudo apt-key fingerprint 0EBFCD88

# 패키지 관리 도구에 도커 다운로드 링크 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 패키지 관리 도구 업데이트
sudo apt-get update


# 도커 설치
sudo apt-get install docker-ce=18.06.2~ce~3-0~ubuntu -y

# 도커 테스트 실행
sudo docker run hello-world

# 도커 데몬 수정
sudo cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

# 도커 재부팅
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker

# 다시 업데이트
sudo apt-get update
sudo apt-get upgrade

# 쿠버네티스 설치
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
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

# 만약 특정 버전으로 설치하고 싶다면 
# 다음과 같이 apt-cache 로 검색한 뒤, 버전을 지정하고 설치하면 된다.
     apt-cache madison kubeadm
     apt-get install kubeadm=1.20.8-00
     apt-cache madison kubelet
     apt-get install kubelet=1.20.8-00
     apt-cache madison kubectl
     apt-get install kubectl=1.20.8-00

# 패키지가 자동으로 업데이트 안되게 하게 홀드
sudo apt-mark hold kubelet kubeadm kubectl

# 설치 완료 확인
kubeadm version
kubelet --version
kubectl version

만약에, localhost:8080 이 커넥션안된다고 나오면서 kubectl 서버 버전이 안나오면 일단 아래 마스터 노드를 세팅하자. .kube 폴더가 없어서 그런것이다.

마스터 노드 세팅

쿠버네티스를 설치하고 쿠버네티스 마스터노드를 세팅한다음 워커노드랑 연결해주는 설정을 한다. 여기서 아직 워커노드를 만들지 않았는데 그 이유는 .kube 폴더랑 그 밑 파일이 없으면 나중에 kubeadm 명령어를 칠때 귀찮아지기 때문이다. 그래서 일단 마스터 노트세팅을 먼저 하고 한다.

192.168.59.102는 앞에서 설정한 마스터 노드 아이피로 한다 cidr 을 앞에 포스팅에서 설정한 것을 참고한다.

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.59.102

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

쿠버네티스 네트워크 구성하기

만약 위와 같이 따라했다면

이렇게 coredns 가 계속 생성 중인 것을 확인 할 수 있다. describe 로 까보면

FailedCreatePodSandBox 가 되어 있는 것을 확인 할 수 있다.

네트워크가 구성 되어 있지 않아서인데 네트워크 에드온을 이용하여서 한번 연결해보자

다음 경로에 있는 내용 복사 후 kube-flannel.yml 에 넣어주기
https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml


vi kube-flannel.yml

kubectl apply -f kube-flannel.yml

워커 노드 세팅

마스터 노드를 잠시 멈춘다음 복제한다

여기서 중요한것은 모든 네트워크 어댑터의 새 MAC 주소 생성을 꼭 설정해주자

네트워크 세팅은 다음과 같다.

마찬가지로 네트워크 세팅을 해준다.

# 이름 바꿔주기
hostnamectl set-hostname node01


# 네트워크 세팅
root@node01:~# cd /etc/netplan/
root@node01:/etc/netplan# vi 01-network-manager-all.yaml

root@node01:/etc/netplan# netplan apply



hostname -I

그리고 나서 워커노드에 다음 명령어를 추가한다.

kubeadm reset 
yes

마스터 노드가 세팅 되어있기 때문에 초기화 해주어야 한다.

kubeadm join 192.168.59.102:6443 --token kdsafj.fasodkfjasl     --discovery-token-ca-cert-hash sha256:dfadadfakdjgalkhjalkjdtqkjekjraskjdfaksdjfaksjdfaksaxfdsfadf





(선택사항) load balancer : metallb

온프레미스 환경에서는 lb 를 따로 생성을 해줘야 한다.

만약, 어플리케이션을 띄우고 lb 를 할당해서 화면을 띄우고 싶다면 사용한다.

참고 : https://metallb.universe.tf/installation/


kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/namespace.yaml

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/metallb.yaml

kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

config 설정

root@master:~/metal# vi metalConfigmap.yaml
root@master:~/metal# cat metalConfigmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.59.50-192.168.59.90

: 여기에서 addresses 를 worker node, master node 의 ip 랑 겹치지 않게 범위를 잡아 준다.

그리고


kubectl apply -f metalConfigmap.yaml




  • 쿠버네티스 우분투 apt 설치 망했을때 삭제하는 방법
kubeadm reset
sudo apt-get purge kubeadm kubectl kubelet kubernetes-cni kube*   
sudo apt-get autoremove  
sudo rm -rf ~/.kube
  • 쿠베 어드민 망했을때 리셋
kubeadm reset
  • 갑자기 인터넷이 안될때 ping 8.8.8.8 에서 연결 안될경우
ip route del default via 192.168.59.1
profile
개발 로그 🍎 🍎 🍎

0개의 댓글