티스토리 뷰

728x90
반응형

kubeadm 설치 방법을 정리해둡니다..

개발 환경

OS : WIndows 11 pro
가상화 프로그램 : VMware Workstation 16 Player
가상화 OS : Ubuntu Server 20.04.3 LTS

쿠버네티스 클러스터

  • master 1대, worker 3대
  • 4대 전부 CPU 2core, RAM 4GB, VOLUME 64GB
  • Network Adapter : Bridged(Connected directly to the physical network)
  • 리눅스 설치시에 고정 IP 설정

잘 안될 때는 맨 밑의 참고한 사이트를 확인해주세요!!



kubeadm, kubelet, kubectl로 Kubernetes 클러스터 구축 - Master Node

사전 환경 구성

# apt update, upgrade
$ sudo apt-get update && sudo apt-get upgrade -y
# net-tool 설치
$ sudo apt-get install net-tools -y
# br_netfilter 모듈 로드
$ sudo modprobe br_netfilter
# 확인
$ lsmod | grep br_netfilter
# bridge 네트워크를 통해 송수신 되는 패킷(컨테이너 패킷)이 iptables 설정에 따라 제어되도록 설정
$ 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 -i
$ swapoff -a
$ exit
$ sudo vi /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-9bIFeXm3cMFjjN8UlgAzt6HLAAE8kQqNfW26d4eZKPu52lQ5c23arpGu3UzmJIvV / ext4 defaults 0 1
# /boot was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/065f0876-2fcc-48b6-a9a5-c5ee4be8ee1e /boot ext4 defaults 0 1
# /swap.img     none    swap    sw      0       0 이거 주석처리!!!!!
$ sudo reboot


쿠버네티스 컨테이너 런타임을 위한 도커 설치

# 쿠버네티스 컨테이너 런타임을 위해 도커 설치
$ sudo apt-get update
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ 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
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo usermod -aG docker $USER 
$ sudo reboot
# 도커 구동 확인
$ docker ps
# 컨테이너의 cgroup 관리에 systemd를 사용하도록 도커 데몬을 구성
$ 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


kubeadm, kubelet 및 kubectl 설치

# kubeadm, kubelet 및 kubectl 설치
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
$ 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
$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl
# 버전을 고정시킴
$ sudo apt-mark hold kubelet kubeadm kubectl 
# 확인
$ kubelet --version 
# 확인
$ kubeadm version
# kubectl은 나중에 확인함


kubeadm init 하기전에 하기

# 컨테이너의 cgroup 관리에 systemd를 사용하도록 다시 한번 구성
$ sudo systemctl enable docker
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
# kubelet의 상태를 확인하고, exited 되어 있으면 다시 실행
# 여기서 에러가 많이 난다..
# kubelet이 잘 실행된 상태에서 kubeadm init을 해야됨
$ sudo systemctl status kubelet
$ sudo systemctl start kubelet

Master Node 초기화

# control(master) 노드 초기화
$ sudo kubeadm init --apiserver-advertise-address={마스터노드 호스트 IP 주소}
[addons] Applied essential addon: kube-proxy

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/](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 192.168.35.183:6443 --token uvgs7x.377t85wmf1zaxw1p \
--discovery-token-ca-cert-hash sha256:52ea64f82aa73f5dbf637857b939d6ba8f0b8643065154616b850dcb3215a0cd
# 나온 내용 복사해놓기


kubectl 설정

# 일반 사용자가 kubectl을 사용할 수 있게 설정
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl version
# kubectl refused 에러가 뜰 경우, 밑에 확인
# kubectl 6443, 8080 port 에러 해결(가상 메모리 비활성화 한번더)
$ sudo -i
$ swapoff -a
$ exit
$ strace -eopenat kubectl version
$ kubectl version 
# 그래도 안되면 worker 노드 설치 후 다시 확인해보기


POD 네트워크 애드온 calio 설치

# Pod 네트워크 애드온 calico 설치
$ curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
$ kubectl apply -f calico.yaml


Master Node 정상적인지 확인

$ kubectl get nodes



kubeadm, kubelet, kubectl로 Kubernetes 클러스터 구축 - Worker Node

사전 환경 구성

# apt update, upgrade
$ sudo apt-get update && sudo apt-get upgrade -y
# net-tool 설치
$ sudo apt-get install net-tools -y
# br_netfilter 모듈 로드
$ sudo modprobe br_netfilter
# 확인
$ lsmod | grep br_netfilter
# bridge 네트워크를 통해 송수신 되는 패킷(컨테이너 패킷)이 iptables 설정에 따라 제어되도록 설정
$ 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 -i
$ swapoff -a
$ exit
$ sudo vi /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-9bIFeXm3cMFjjN8UlgAzt6HLAAE8kQqNfW26d4eZKPu52lQ5c23arpGu3UzmJIvV / ext4 defaults 0 1
# /boot was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/065f0876-2fcc-48b6-a9a5-c5ee4be8ee1e /boot ext4 defaults 0 1
# /swap.img     none    swap    sw      0       0 이거 주석처리!!!!!
$ sudo reboot


쿠버네티스 컨테이너 런타임을 위한 도커 설치

# 쿠버네티스 컨테이너 런타임을 위해 도커 설치
$ sudo apt-get update
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ 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
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo usermod -aG docker $USER 
$ sudo reboot
# 도커 구동 확인
$ docker ps
# 컨테이너의 cgroup 관리에 systemd를 사용하도록 도커 데몬을 구성
$ 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


kubeadm, kubelet 설치

Worker 노드는 kubectl 설치 안해도 된다.

# kubeadm, kubelet 설치
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
$ 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
$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm
# 버전을 고정시킴
$ sudo apt-mark hold kubelet kubeadm
# 확인
$ kubelet --version 
# 확인
$ kubeadm version


Woker Node 초기화

# Master Node 초기화할 때 나온 명령어
$ sudo kubeadm join 192.168.35.183:6443 --token uvgs7x.377t85wmf1zaxw1p \
--discovery-token-ca-cert-hash sha256:52ea64f82aa73f5dbf637857b939d6ba8f0b8643065154616b850dcb3215a0cd



참고한 사이트

containerd를 CRI 런타임으로 하는 Kubernetes 클러스터 구축
kubeadm 설치 공식 문서
kubeadm 구성
kubeadm 구성
kubeadm 구성
kubeadm 구성
calio 공식 문서
깔끔하게 kubeadm reset
http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused 에러
kubectl 6443 에러
kubeadm join 실패 token 만료시
kubectl bash 자동 완성

728x90
반응형
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/04   »
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
Total
Today
Yesterday
링크