VM Ubuntu / kubernetes(k8s) 설치

윤동기·2023년 4월 18일
0

Linux

목록 보기
9/9
  • 설치 버전
    kubernetes : 1.23.0d
    OS : Ubuntu 20.04.6

  • 설치 사양
    2GB 이상의 RAM
    2 core 이상의 CPU
    클러스터의 모든 시스템 간의 전체 네트워크 연결(사설, 공용 상관없음)
    필요포트 확인
    -> k8s 구성요소가 서로 통신하려면 필수포트를 열어야한다.

1. Kubernetes설치

  • 설치 준비
    일반적으로 쿠버네티스 노트는 홀수개를 배정하지만 교육을 목적으로 하기 때문에 마스터,워커 노드 각각 1개만 설치한다.

  • hostname 확인
    일부 VM은 동일한 값을 가질 수 있지만, 하드웨어 장치는 고유한 주소를 가질 가능성이 있다.
    k8s는 이러한 고유한 주소를 사용하여 클러스터의 노드를 식별한다.

    #마스터노드와 워커노드를 설치할 서버의 호스트명 변경
    $ sudo hostnamectl set-hostname master
    $ sudo hostnamectl set-hostname worker
  • 스왑 비활성화
    메모리를 확인하고 swap 메모리 비활성화한다.
    # -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

  • 런타임 설치 (Letting iptables see bridged traffic)
$ 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
  • 런타임 설치 (container run time 설치)
#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
  • 런타임 설치 (systemd cgroup 드라이버 사용)
$ 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

2. Installing kubeadm, kubelet and kubectl

#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

3. kubeadm으로 클러스터 생성

3.1 control-plane node(=master node)

profile
꿈꾸는 개발자

0개의 댓글