설치 버전
kubernetes : 1.23.0d
OS : Ubuntu 20.04.6
설치 사양
2GB 이상의 RAM
2 core 이상의 CPU
클러스터의 모든 시스템 간의 전체 네트워크 연결(사설, 공용 상관없음)
필요포트 확인
-> k8s 구성요소가 서로 통신하려면 필수포트를 열어야한다.
설치 준비
일반적으로 쿠버네티스 노트는 홀수개를 배정하지만 교육을 목적으로 하기 때문에 마스터,워커 노드 각각 1개만 설치한다.
hostname 확인
일부 VM은 동일한 값을 가질 수 있지만, 하드웨어 장치는 고유한 주소를 가질 가능성이 있다.
k8s는 이러한 고유한 주소를 사용하여 클러스터의 노드를 식별한다.
#마스터노드와 워커노드를 설치할 서버의 호스트명 변경
$ sudo hostnamectl set-hostname master
$ sudo hostnamectl set-hostname worker
# -h : 기가 단위로 출력
$ free -h
$ sudo swapoff -a
$ free -h
서버를 재실행하였을 때 swap이 자동으로 실행될수 있기 때문에 재시작 후에도 비활성화 되도록 설정한다.
$ 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-2VtOYiju25RuGgN2dXHMbNzs7UDSq84N138E4crV75sDHfb1o04sUE3RjJ 7kXzi8 / ext4 defaults 0 0 # /boot was on /dev/sda2 during curtin installation /dev/disk/by-uuid/3931f847-0d09-4688-a2d3-4d819720b3b8 /boot ext4 defaults 0 0 #밑의 라인을 주석처리 /swap.img none swap sw 0 0
$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
$ sudo sysctl --system
#Docker의 공식 container.io설치
#1.기존 Docker제거
$ sudo apt-get remove docker docker-engine docker.io containerd runc
#2. 저장소 업데이트
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg lsb-release
#3. gpg키 등록
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#4. 저장소 설정
$ 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
#5. 설치
$ sudo apt-get update
$ sudo apt-get install containerd.i
#컨테이너 구성
$ sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml
#컨테이너 재시작
$ sudo systemctl restart containerd
$ vi /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
#해당 위치에 SystemdCgroup = true 추가
#재시작
$ sudo systemctl restart containerd
#apt 패키지 업데이트 후 필요 패키지 설치
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl
#GPG Key 다운
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
#k8s apt 저장소 추가
$ 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
#apt 패키지 인덱스 업데이트, install kubelet, kubeadm and kubectl, and pin their version
$ sudo apt-get update
#버전별 설정
##### 최신버전 설치
$ sudo apt-get install -y kubelet kubeadm kubectl
##### 1.23.0 버전 설치
$ sudo apt-get install -y kubelet=1.23.0-00 kubeadm=1.23.0-00 kubectl=1.23.0-00
#자동 업데이트 hold
$ sudo apt-mark hold kubelet kubeadm kubectl