[Kubernetes] Install Kubernetes(v1.29.x) on Multipass

Multipass 설명 참고 {: .prompt-info }

cloud-init yaml 구성 #

master.yaml #

 1package_update: true
 2package_upgrade: true
 3packages:
 4  - docker.io
 5  - apt-transport-https
 6  - ca-certificates
 7  - curl
 8  - ntpdate
 9
10runcmd:
11  - sudo swapoff -a
12  - sudo ntpdate ntp.ubuntu.com
13  - sudo systemctl enable containerd
14  - sudo systemctl start containerd
15  - sudo mkdir -p /etc/apt/keyrings
16  - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
17  - echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
18  - sudo apt update
19  - sudo apt install -y kubelet kubeadm kubectl
20  - sudo apt-mark hold kubelet kubeadm kubectl
21  - sudo systemctl enable kubelet
22  - sudo kubeadm init
23  - mkdir -p /home/ubuntu/.kube
24  - sudo cp -i /etc/kubernetes/admin.conf /home/ubuntu/.kube/config
25  - sudo chown -R ubuntu:ubuntu /home/ubuntu/.kube
26  - sudo kubeadm token create --print-join-command > /home/ubuntu/kubeadm_join_cmd.sh
27  - sudo chown ubuntu:ubuntu /home/ubuntu/kubeadm_join_cmd.sh
28  - chmod +x /home/ubuntu/kubeadm_join_cmd.sh
29  - |
30    sudo bash -c 'cat <<EOF > /home/ubuntu/k8s-post-init.sh
31    #!/bin/bash
32    export KUBECONFIG=/home/ubuntu/.kube/config
33    sleep 60
34    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
35    kubectl taint nodes --all node-role.kubernetes.io/control-plane-
36    EOF'
37  - sudo chown ubuntu:ubuntu /home/ubuntu/k8s-post-init.sh
38  - sudo chmod +x /home/ubuntu/k8s-post-init.sh
39  - sudo -u ubuntu /home/ubuntu/k8s-post-init.sh

kubeadm 세부 설정 참고 #

  • pod 네트워크 CIDR 설정
    • Calico 기반 구축

      • pod-network-cidr=192.168.0.0/16
    • Flannel 기반 구축

      • pod-network-cidr=10.244.0.0/16
    • Cilium 기반 구축

      • pod-network-cidr=10.0.0.0/8
1sudo kubeadm init --pod-network-cidr=10.244.0.0/12 --apiserver-advertise-address=192.168.0.55
  • --pod-network-cidr : pod 간 통신할 IP 주소를 지정
  • --apiserver-advertise-address : Control-plane의 api-server가 사용할 IP 주소. 지정하지 않으면 default network interface 주소를 사용
  • --service-cidr : Cluster 내에서 Application 간 통신을 위해 사용되며, 고유한 IP 주소를 가지게 된다. 기본값으로 10.96.0.0/12을 가진다.
  • --pod-network-cidr--service-cidr 주소를 겹치지 않게 설정. 겹칠 경우 Kubernetes가 중복되지 않게 배치함

worker.yaml #

 1package_update: true
 2package_upgrade: true
 3packages:
 4  - docker.io
 5  - apt-transport-https
 6  - ca-certificates
 7  - curl
 8  - ntpdate
 9
10runcmd:
11  - sudo swapoff -a
12  - sudo ntpdate ntp.ubuntu.com
13  - sudo systemctl enable containerd
14  - sudo systemctl start containerd
15  - sudo mkdir -p /etc/apt/keyrings
16  - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
17  - echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
18  - sudo apt update
19  - sudo apt install -y kubelet kubeadm kubectl
20  - sudo systemctl enable kubelet

Instance 생성 #

1multipass launch focal --name mp-master --memory 4G --disk 50G --cpus 2 --cloud-init mp-master.yaml
2multipass launch focal --name mp-master --memory 4G --disk 50G --cpus 2 --network name=multipass,mode=manual
3
4multipass launch focal --name mp-worker-1 --memory 4G --disk 50G --cpus 2 --cloud-init mp-worker.yaml
5multipass launch focal --name mp-worker-1 --memory 4G --disk 50G --cpus 2 --network name=multipass,mode=manual
6
7multipass launch focal --name mp-worker-2 --memory 4G --disk 50G --cpus 2 --cloud-init mp-worker.yaml
8multipass launch focal --name mp-worker-2 --memory 4G --disk 50G --cpus 2 --network name=multipass,mode=manual

Network - Static IP #

Network for Windows #

  • 관리자 권한 파워쉘에서 실행.
1# 고정된 Switch와 인터넷 통신을 위한 NAT 를 생성한다. 172.16.0.1/16
2New-VMSwitch -SwitchName "MySwitch" -SwitchType Internal
3New-NetIPAddress -IPAddress 172.16.0.1 -PrefixLength 16 -InterfaceAlias "vEthernet (MySwitch)"
4New-NetNat -Name "NATNetwork" -InternalIPInterfaceAddressPrefix "172.16.0.1/16"
5
6# mutipass launch 시 network 를 추가한다.
7multipass launch -n mp-master -c 2 -m 2G -d 20G --network name=MySwitch focal
  • 생성한 VM 접속하여 아래와 같이 설정 및 추가

    1sudo vi /etc/netplan/50-cloud-init.yaml
     1network:
     2    ethernets:
     3        eth0:
     4            dhcp4: true
     5            match:
     6                macaddress: 52:54:00:f1:f0:e8
     7            set-name: eth0
     8--- 추가
     9        eth1:
    10            addresses: [192.168.0.55/24]
    11            routes:
    12              - to: default
    13                via: 192.168.0.1
    14            nameservers:
    15                addresses: [8.8.8.8, 1.1.1.1]
    16---
    17    version: 2
  • --network name=multipass,mode=manual

     1network:
     2    ethernets:
     3        eth0:
     4            dhcp4: true
     5            dhcp6: true
     6            match:
     7                macaddress: 52:54:00:80:6b:21
     8            set-name: eth0
     9--- 추가
    10        eth1:
    11            addresses: [192.168.0.55/24]
    12            gateway4: 192.168.0.1
    13            dhcp4: no
    14---
    15    version: 2
  • --network name=multipass

     1network:
     2    ethernets:
     3        default:
     4            dhcp4: true
     5            match:
     6                macaddress: 52:54:00:25:1d:ab
     7        extra0:
     8            dhcp4: true
     9            dhcp4-overrides:
    10                route-metric: 200
    11            match:
    12                macaddress: 52:54:00:09:13:61
    13            optional: true
    14
    15--- 추가
    16        eth1:
    17            addresses: [192.168.0.55/24]
    18            gateway4: 192.168.0.1
    19            dhcp4: no
    20---
    21    version: 2
  • worker Node에도 추가

     1network:
     2    ethernets:
     3        eth0:
     4            dhcp4: true
     5            dhcp6: true
     6            match:
     7                macaddress: 52:54:00:80:6b:21
     8            set-name: eth0
     9--- 추가
    10        eth1:
    11            addresses: [192.168.0.56/24]
    12            gateway4: 192.168.0.1
    13            dhcp4: no
    14---
    15    version: 2

Restart Network #

  • 아래와 같이 network 적용 또는 instance를 재시작
    1sudo netplan apply

Network for MacOS #

  • Mac Terminal에서 아래와 같이 설정 및 추가
     1sudo vi /var/db/dhcpd_leases
     2
     3{
     4  name=mp-master
     5  ip_address=192.168.64.55
     6  hw_address=ff,f1:f5:dd:7f:0:2:0:0:ab:11:fa:4c:c0:e7:17:a6:ae:9a
     7  identifier=ff,f1:f5:dd:7f:0:2:0:0:ab:11:fa:4c:c0:e7:17:a6:ae:9a
     8  lease=0x671d9fc1
     9}
    10{
    11  name=mp-worker-1
    12  ip_address=192.168.64.56
    13  hw_address=ff,f1:f5:dd:7f:0:2:0:0:ab:11:50:ed:1b:91:59:3e:45:b4
    14  identifier=ff,f1:f5:dd:7f:0:2:0:0:ab:11:50:ed:1b:91:59:3e:45:b4
    15  lease=0x671daf7a
    16}

Restart Instance #

1multipass restart mp-master
2multipass restart mp-worker-1

Add Cluster Node : Join #

  • kubeadm_join_cmd.sh 파일 받아서 worker로 전송

    1multipass transfer mp-master:/home/ubuntu/kubeadm_join_cmd.sh ./
    2multipass transfer kubeadm_join_cmd.sh mp-worker-1:/home/ubuntu
    3multipass transfer kubeadm_join_cmd.sh mp-worker-2:/home/ubuntu
  • 각 worker 접속하여 join

    1sudo ./kubeadm_join_cmd.sh
Advertisement