쿠버네티스 클러스터 구성 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
온프레미스 환경에서는 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
kubeadm reset
sudo apt-get purge kubeadm kubectl kubelet kubernetes-cni kube*
sudo apt-get autoremove
sudo rm -rf ~/.kube
kubeadm reset
ip route del default via 192.168.59.1