Kubernetes · Cluster ·
[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.shkubeadm 세부 설정 참고 #
- 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 kubeletInstance 생성 #
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=manualNetwork - 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.yaml1network: 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=manual1network: 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=multipass1network: 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: 2worker 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-1Add 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