Cloud/Kubernetes

[kubeadm] Hyper-V를 사용한 Kubernetes 설치

WindowsHyper-V를 사용하여 Ubuntu 운영체제를 설치하고, DockerKubeadm을 사용한 Kubernetes의 설치를 다룹니다.

개요

kubeadm을 사용한 설치 방법입니다. kubernetes의 주요 구성요소들을 Pods로 배포하고 실행합니다.

  • Windows
    • Hyper-V
      • VMs(ControlPlane, Node01, Node02)
        • Ubuntu
          • Kubeadm
            • Kubernetes
              • Docker

Hyper-V

이미지 다운로드

 

Get Ubuntu Server | Download | Ubuntu

Get Ubuntu Server one of three ways; by using Multipass on your desktop, using MAAS to provision machines in your data centre or installing it directly on a server.

ubuntu.com

Option 2 - Manual server installation > Download Ubuntu Server 20.04.2 LTS

가상 스위치 생성

(외부 유형 스위치를 사용하실 분은 이 단계를 생략하고 외부 스위치를 사용하시면 됩니다.)

내부 스위치 생성

가상 스위치 관리자 > 유형 : 내부 > 가상 스위치 만들기 > 이름 : Kubernetes

IP설정

설정 > 네트워크 및 인터넷 > 어댑터 옵션 변경 > vEthernet (Kubernetes) > 속성 > 인터넷 프로토콜 버전 4(TCP/IPv4)  > 속성 > 다음 IP 주소 사용

 

IP 주소 : 172.23.10.1

서브넷 마스크 : 255.255.240.0

NAT 설정

Windows PowerShell(관리자)

New-NetNAT -Name "Kubernetes" -InternalIPInterfaceAddressPrefix 172.23.0.0/20

가상 컴퓨터 생성

새로 만들기 > 가상 컴퓨터

이름 및 위치 지정

이름 : controlplane(node01, node02)

세대 지정

2세대

메모리 할당

시작 메모리 : 2048MB(최소)

네트워킹 구성

연결 : Kubernetes

가상 하드 디스크 연결

크기 : 20GB

설치 옵션

부팅 가능 이미지 파일에서 운영 체제 설치 > 이미지 파일 : ubuntu-20.04.2-live-server-amd64.iso

요약

 

가상 컴퓨터 설정

controlplane(node01, node02) > 설정

보안

보안 부팅 사용 : 체크 해제

프로세서

가상 프로세서 수 : 2(최소)

가상 컴퓨터 시작

controlplane(node01, node02) > 연결 > 시작

Ubuntu

설치

(세팅이 필요한 부분만 설명하겠습니다. 나머지는 기본값으로 넘어가시면 됩니다.)

Network connections

eth0 > Edit IPv4 > IPv4 Method : Manual

 

Subnet : 172.23.0.0/20

Address : 172.23.10.xxx (controlplane : 100, node01 : 101, node02 : 102)

Gateway : 172.23.10.1

Name server : 8.8.8.8

Profile setup

Your server's name : controlplane(node01, node02)

Pick a username : [username]

Choose a password : [userpassword]

Confirm your password : [userpassword]

SSH setup

Install OpenSSH server : 체크

Install complete!

Reboot Now

Failed

Enter로 넘어가시면 됩니다.

사전설정

(여기부터는 설정 완료된 IP로 SSH 접속하여 작업합니다. 가상 컴퓨터가 시작되어 있기만 하면, 가상 컴퓨터 연결 창은 닫으셔도 됩니다.)

br_netfilter 모듈 활성화

sudo modprobe br_netfilter

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

swap 비활성화

sudo swapoff -a

sudo vi /etc/fstab

# 재시작시 마운트되는 swap 부분 주석처리
# /swap.img       none    swap    sw      0       0

docker 설치

sudo apt-get update && sudo apt-get install -y \
apt-transport-https ca-certificates curl software-properties-common gnupg2
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key --keyring /etc/apt/trusted.gpg.d/docker.gpg add -

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 -y \
containerd.io=1.2.13-2 \
docker-ce=5:19.03.11~3-0~ubuntu-$(lsb_release -cs) \
docker-ce-cli=5:19.03.11~3-0~ubuntu-$(lsb_release -cs)
  
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 mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker

Kubernetes

kubeadm, kubelet, kubectl 설치

controlplane

sudo apt-get update && sudo apt-get install -y apt-transport-https curl
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
sudo apt-mark hold kubelet kubeadm kubectl

node01, node02

(kubectl을 제외하고 설치합니다.)

sudo apt-get update && sudo apt-get install -y apt-transport-https curl
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
sudo apt-mark hold kubelet kubeadm

kubeadm 설정

(sudo kubeadm init 이후 출력을 복사하여 붙여넣으시면 됩니다.)

controlplane

sudo kubeadm init

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

node01, node02

sudo kubeadm join 172.23.10.100:6443 --token 8kryi1.z20ua921miymj7tv \
    --discovery-token-ca-cert-hash sha256:e11e3ee0402e2dfeb90045a53b7804f83ff424783e71e4dade4ddca43ebdcebe

network plugin 설치

controlplane

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

kubectl 설정

controlplane

echo 'source <(kubectl completion bash)' >>~/.bashrc
source ~/.bashrc

설치확인

docker --version
kubeadm version
kubectl get nodes
kubectl get pod -n kube-system

테스트

kubectl run nginx --image=nginx
kubectl expose pod nginx --type=NodePort --name=nginx-service --port=80
kubectl get service

생성된 port 확인
접속 테스트

테스트 삭제

kubectl delete service nginx-service
kubectl delete pod nginx