
์๋ก ์ฐ ๋งฅ๋ถ์ผ๋ก โ๋ ์ฝ๊ฒโ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๊ตฌ์ฑํ๊ธฐ
์๋ก ์ฐ ๋งฅ๋ถ์ผ๋ก โ๋ ์ฝ๊ฒโ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๊ตฌ์ฑํ๊ธฐ ๊ด๋ จ
์ง๋ ๊ธ ์๋ก ์ฐ ๋งฅ๋ถ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๊ตฌ์ฑํ๊ธฐ์์๋, ๋ฒ ์ด๊ทธ๋ฐํธ(Vagrant)์ VM์จ์ด ํจ์ (VMware Fusion)์ ํ์ฉํด ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ ๋ฐ ์์ต๋๋ค. ๋ค๋ง ์ด ๋ฐฉ์์ ์ค์น ์ ์ ์ฌ์ ์ค๋น๊ฐ ํ์ํ๊ณ , ์ค์ ์ฌ์ฉํ๊ธฐ์๋ ์ฌ๋ฌ ๋ถํธํจ์ด ์์์ต๋๋ค. ํนํ VM์จ์ด ํจ์ ์ ๋ผ์ด์ ์ค ๋ฌธ์ ๋ ์๊ณ , ๊ณต์ ํ์ผ์ ๋ด๋ ค๋ฐ์ผ๋ ค๋ฉด ํ์ ๊ฐ์ ์ ํด์ผ ํ๋ค๋ ๋ฌธ์ ๋ ์์์ต๋๋ค.

์ด๋ฐ ์ํฉ์์ x86-64 ํ๊ฒฝ๋ง ์ง์ํ๋ ๋ฒ์ถ์ผ๋ฐ์ค(VirtualBox)๊ฐ ์ต๊ทผ arm64 ๊ธฐ๋ฐ ๋งฅ๋ถ์ ์ ๋๋ก ์ง์ํ๊ธฐ ์์ํ์ต๋๋ค. (์ ํํ ๋งํ์๋ฉด, ์ค๋ ๊ธฐ๊ฐ arm64 ์ง์์ ์ค๋นํด ์จ ๋ฒ์ถ์ผ๋ฐ์ค๊ฐ ์ด์ ์์ผ ์คํํ ๊ฒ์ ๋๋ค.) ๋๋ถ์ ํ์ฌ๋ VM์จ์ด ํจ์ ๋์ ๋ฒ์ถ์ผ๋ฐ์ค๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ ์ ์๊ฒ ๋์์ต๋๋ค.

์ด๋ฅผ ํตํด ๊ธฐ์กด์ ๋ถํธํจ์ด ๋๋ถ๋ถ ํด์๋์์ผ๋ฉฐ, ์๋์ ๋งฅOS ๊ธฐ๋ฐ ํ๊ฒฝ ๋ชจ๋ ๋์ผํ ์ฝ๋๋ก ๋ฐฐํฌ์ ์คํ์ ํ ์ ์์ด์ก์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ฒ ๊ธ์์๋ ๋ฒ์ถ์ผ๋ฐ์ค๊ฐ arm64๋ฅผ ์ง์ํ๊ธฐ๊น์ง์ ๊ณผ์ ์ ์ดํด๋ณธ ๋ค์, ์ด๋ฅผ ํ์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ฒ ์ต๋๋ค. ๊ตฌ์ฑ ๋ฐฉ๋ฒ๋ถํฐ ํ์ธํ๊ณ ์ถ์ ๊ฒฝ์ฐ, ์๋๋ก ๊ธ์ ๋ด๋ ค ๋ฐ๋ก ๋ณผ ์๋ ์์ต๋๋ค.
๋ฒ์ถ์ผ๋ฐ์ค์ arm64 ์ง์ ์๋๋ค
๋ฒ์ถ์ผ๋ฐ์ค๋ ์๋ x86-64 ๊ธฐ๋ฐ ๊ฐ์ํ ๊ธฐ์ ๋ก, VT-x/AMD-V์ ๊ฐ์ ํ๋์จ์ด ๊ฐ์ํ ๊ธฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋๊ณ ์์ต๋๋ค. ์ด ๋๋ฌธ์ arm ๋๋ arm64๋ก์ ์ด์ ์ด ์ฝ์ง ์์์ต๋๋ค. ์ค์ ๋ก ๊ฐ๋ฐํ์ x86-64๋ง์ ์ง์ํ ๊ฒ์ด๋ผ๊ณ ๊พธ์คํ ์๊ธฐํด ์์ต๋๋ค.

<์ถ์ฒ: Stack Exchange>
๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ค์ง์, ์๋ก์ด ์ ํ ๊ธฐ๊ธฐ์ ๋ฑ์ฅ์ผ๋ก ๋ฌ๋ผ์ง๋๋ค. 2020๋ 11์ ์ถ์๋ ์ ํ ์ค๋ฆฌ์ฝ ๋งฅ M1์ ํญ๋ฐ์ ์ธ ์ธ๊ธฐ๊ฐ ์์ง ์์๊ณ , 2022๋ 6์ ๊ณต๊ฐ๋ ํ์์ M2๋ ์์ฅ ์ฅ์ ๋ ฅ์ ๋๋ ธ๊ธฐ ๋๋ฌธ์ ๋๋ค.
M1๊ณผ M2๊ฐ ์ธ๊ธฐ๋ฅผ ์ป์ผ๋ฉฐ ์ปค๋ฎค๋ํฐ๋ฅผ ์ค์ฌ์ผ๋ก ๋์จ ๊พธ์คํ ์๊ตฌ์ ๋ฐ๋ผ, ๋ฒ์ถ์ผ๋ฐ์ค ๊ฐ๋ฐํ์ ๋ฒ์ถ์ผ๋ฐ์ค๋ฅผ ์ง์ํ ์ฌ๋ฌ ์๋๋ฅผ ์ด์ด๊ฐ์ต๋๋ค. ๊ทธ๋ฐ ์์ค, 2022๋ ๊ฐ๋ฐ์ ํ๋ฆฌ๋ทฐ(Developer Prev1ew) ๋ฒ์ ์ ๊ณต๊ฐํ๋ฉฐ ์ด์ ์ง์์ ํ ์ ์๋ค๊ณ ๋ฐํํ์ต๋๋ค.

<์ถ์ฒ: ๋ฒ์ถ์ผ๋ฐ์ค>
์ด๊ธฐ ํ๋ฆฌ๋ทฐ ๋ฒ์ ์ ๋ฒ๊ทธ์ ํด๊ฒฐ๋์ง ์์ ๋ฌธ์ ๊ฐ ๋์ณ๋ฌ์ง๋ง, ์๊ฐ์ด ์ง๋๋ ํด๊ฒฐ๋ ๊ธฐ๋ฏธ๋ ๋ณด์ด์ง ์์์ต๋๋ค. ๊ฐ๋ฐ ์๋ ์์ฒด๋ ์ง์ฒ์ด ์์์ต๋๋ค. ๊ฒฐ๊ตญ ํ๋ฆฌ๋ทฐ ๋ฒ์ ๋ค์ด๋ก๋ ๋งํฌ๋ง์ ์ฌ๋ผ์ง๋ฉฐ, arm ๊ธฐ๋ฐ ๋งฅ์์ ๋ฒ์ถ์ผ๋ฐ์ค๋ฅผ ์ฌ์ฉํ๋ ์ผ์ ์ฌ๋๋ค์ ๊ธฐ์ต์์ ์ํ๋ ๋ฏ ํ์ต๋๋ค.

<์ถ์ฒ: ๋ฒ์ถ์ผ๋ฐ์ค>
๊ทธ๋ ๊ฒ ์ฌ์ค ์ ๋ ๊ฑฐ์ ํฌ๊ธฐํ๊ณ VM์จ์ด ํจ์ ์ ์ฌ์ฉํ๊ธฐ๋ก ํ์ต๋๋ค. ๋๋ง์นจ ๋ผ์ด์ ์ค ์ ์ฑ ์ด ๊ฐ์ธ ์ฌ์ฉ์์๊ฒ ์ ๋ฆฌํ๊ฒ ๋ฐ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฌ๋ค ๊ฐ์๊ธฐ ๋ฒ์ถ์ผ๋ฐ์ค๋ 2024๋ 9์, ๋ฒ์ v7.1๋ถํฐ arm์ ๊ณต์ ์ง์ํ๋ค๊ณ ๋ฐํํ์ต๋๋ค.

์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ต์ ๋ฒ์ ์ธ v7.1.10์ ์ค์ ๋ก ๊ฒ์ฆํด ๋ณธ ๊ฒฐ๊ณผ, ๋ฒ๊ทธ๋ ๊ฑฐ์ ์์๊ณ , ์ฑ๋ฅ๊ณผ ์ฌ์ฉ ํธ์์ฑ ๋ชจ๋ ์ข์ ์์ค์ด์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์ ๋ ๋ค์ ์ ์ฝ์ด ๋ง์๋ VM์จ์ด ํจ์ ๋์ , ๋ฒ์ถ์ผ๋ฐ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ๊ทน ์ถ์ฒํฉ๋๋ค.
๋ฒ์ถ์ผ๋ฐ์ค๋ก arm64 ๊ธฐ๋ฐ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๊ตฌ์ฑํ๊ธฐ
๊ทธ๋ผ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฒ์ถ์ผ๋ฐ์ค๋ก arm64 ๊ธฐ๋ฐ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ๋ ๊ณผ์ ์ ์์๋ณด๊ฒ ์ต๋๋ค. ํฌ๊ฒ ์ธ ๋จ๊ณ๋ก ์งํ๋ฉ๋๋ค.
- arm64 ๊ธฐ๋ฐ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋ฐฐํฌ๋ฅผ ์ํ ์ํํธ์จ์ด ์ค์น
- ์ค์นํ ์ํํธ์จ์ด๋ฅผ ํ์ฉํ ํด๋ฌ์คํฐ ๊ตฌ์ฑ
- ๊ตฌ์ฑํ ํฐ๋ฏธ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ํ์ธํ๊ณ , ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ
์ด์ ์ด 3๋จ๊ณ์ ๋ฐ๋ผ arm64 ํ๊ฒฝ์์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์ค์ ๋ก ๊ตฌ์ฑํ๊ณ , ๋์ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ฒ ์ต๋๋ค.

<์ถ์ฒ: ์ฟ ๋ฒ๋คํฐ์ค>
1. arm64
๊ธฐ๋ฐ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋ฐฐํฌ๋ฅผ ์ํ ์ํํธ์จ์ด ์ค์น
๋จผ์ , ์์ฌ์ด ์ค์น๋ฅผ ์ํด ์ด๋ฏธ ๊ตฌ์ฑ์ด ์๋ฃ๋ ๊นํ ์์ค๋ฅผ ๋ก์ปฌ ํ๊ฒฝ์ ํด๋ก (clone
)ํฉ๋๋ค.
git clone https://github.com/sysnet4admin/_Lecture_k8s_learning.kit.git
#
# C10ning into '_Lecture k8s_Iearning.kit'
# remote: Enumerating objects: 5897, done.
# [์๋ต]
์ฐ์ ์ค์นํด์ผ ํ ์ํํธ์จ์ด๋ ๋ค์ ์ธ ๊ฐ์ง์ ๋๋ค.
- ๋ฒ์ถ์ผ๋ฐ์ค(VirtualBox)
- ๋ฒ ์ด๊ทธ๋ฐํธ(Vagrant)
- ํ๋น(Tabby)
cd _Lecture_k8s_learning.kit/ch2/2.4
ls -1
#
# controlplane_node.sh
# extra_k8s_pkgs.sh
# k8s_env_build.sh
# k8s_pkg_cfg โข sh
# tabby-v1.0.2ร7
# VagrantfiIe
# vagrant-v2.4.7
# v1rtua1box-v7.1.10
# worker_nodes.sh
๋ฒ์ถ์ผ๋ฐ์ค๋ brew install
๋ช
๋ น์ด๋ก๋ ์ค์นํ ์ ์์ง๋ง, ํธํ์ฑ ์ ์ง๋ฅผ ์ํด ๋ฏธ๋ฆฌ ์ค๋น๋ .rb
ํ์ผ์ ์ฌ์ฉํด ๊ณ ์ ๋ฒ์ (v7.1.10)์ ๋ฒ์ถ์ผ๋ฐ์ค๋ฅผ ์ค์นํฉ๋๋ค. VM์จ์ด ํจ์ ๊ณผ ๋ฌ๋ฆฌ, ์ถ๊ฐ ๊ตฌ์ฑ์ ํ์ํ์ง ์์ต๋๋ค.
brew install --cask ./virtualbox-v7.1.10/virtualbox.rb
#
# ==> Downloading
# https://download.virtualbox.org/virtualbox/7.1.10/VirtualBox-7.1.10-169112-macOSArm64.dmg
# Already downloaded:
# /Users/hj/Library/Caches/Homebrew/down10ads/cIร847be12cf61160d18b66cf2be3cce1143d8a2b0b1ๅๅc046a0a235892dc4c4-VirtualBox-7.1.10-169112-macOSArm64.dmg
# => lnstalling Cask virtualbox
# => Running installer for virtualbox with sudo; the password may be necessary.
Password: <์ํธ ์
๋ ฅ>
#
# installer: Package name is Orac1e V1rtua1Box
# installer: choices changes file
# '/private/tmp/choices20250624-38604-4w8fu5.xm1' applied
# installer: lnstalling at base path /
# installer: The install was successful.
# ้ฌฑ vmware-fusion was successfully installed!
๋ฒ ์ด๊ทธ๋ฐํธ ์ญ์ ๊ณ ์ ๋ฒ์ ์ค์น๋ฅผ ์ํด .rb
ํ์ผ์ ์ฌ์ฉํด v2.4.7์ ์ค์นํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก VM์จ์ด ํจ์ ์ ์ฌ์ฉํ ๋๋ ๋ฒ ์ด๊ทธ๋ฐํธ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐ๋ก ์ค์นํด์ผ ํ์ง๋ง, ๋ฒ์ถ์ผ๋ฐ์ค ํ๊ฒฝ์์๋ ํ๋ฌ๊ทธ์ธ์ด ํ์ํ์ง ์์ผ๋ฏ๋ก ๋ฐ๋ก ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
brew install --cask ./vagrant-v2.4.7/vagrant-v2.4.7/vagrant.rb
#
# ==> Downloading
# https://re1eases.hashicorp.com/vagrant/2.4.7/vagrant_2.4.7_darwin_arm64.dmg
# Already downloaded:
# /Users/hj/Library/Caches/Homebrew/down10ads/3d87ee0b909cfd886c1232aa833f37c3beebaIdabd0ๅa72292aๅ0d74c896123d-โ
ดagrant-2.4.7_darwin_arm64.dmg
# => lnstalling Cask vagrant
# => Running installer for vagrant with sudo; the password may be necessary
Password: <์ํธ ์
๋ ฅ>
#
# installer: Package name is Vagrant
# installer: Upgrading at base path /
# installer: The upgrade was successful.
# ==> Linking Bash Comp1etion 'completion.sh' to
# '/opt/homebrew/etc/bash_completion.d/vagrant'
# ==> Linking Zsh Comp1etion '_vagrant' to
# '/opt/homebrew/share/zsh/site-functions/_vagrant'
# ้ฌฑ vagrant was successfully installed!
๋ง์ง๋ง์ผ๋ก, ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๋ฐฐํฌํ ๋ค์ ์ ์์ ๋๋ ํฐ๋ฏธ๋ ํ๋ก๊ทธ๋จ ํ๋น(Tabby)๋ฅผ ์ค์นํฉ๋๋ค. ์ญ์ .rb
ํ์ผ์ ์ด์ฉํด v1.0.207์ ์ค์นํฉ๋๋ค.
brew install --cask ./tabby-v1.0.207/tabby.rb
#
# ==> Downloading
# https://github.com/Eugeny/tabby/re1eases/down10ad/v1.e.207/tabby-1.0.207-macos-arm64.zip
# Already downloaded:
# /Users/hj/Library/Caches/Homebrew/down10ads/6ac0899dd17d84fb668f23226094b674bๅ7ๅ5615155b29ba53a109c4d519e782--tabby-1.0.207-macos-arm64.zip
# => lnstalling Cask tabby
# => Moving App 'Tabby.app' to '/App1ications/Tabby.app
# ้ฌฑ tabby was successfully installed!
์ค์น ํ์๋ ์ ์ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์
๋ ฅํด ๋ ํ์ผ(config.yaml
)์ ๋ณต์ฌํด ๋ฐ๋ก ์
๋ ฅํ๋ ๋ฒ๊ฑฐ๋ก์์ ์ค์
๋๋ค.
cp ./tabby-v1.0.2ร7/config.yaml ~/Library/App1ication\ Support/tabby
2. ์ค์นํ ์ํํธ์จ์ด๋ฅผ ํ์ฉํ ํด๋ฌ์คํฐ ๊ตฌ์ฑ
์ด์ ์์ ์ค์นํ ์ํํธ์จ์ด๋ฅผ ํ์ฉํด ์ฟ ๋ฒ๋คํฐ์ค(Kubernetes) ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ ์ฐจ๋ก์ ๋๋ค. ๊ณผ์ ์ ๊ฐ๋จํ ๊ทธ๋ฆฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

๋จผ์ ๋ฒ ์ด๊ทธ๋ฐํธ์์ ๋ฒ์ถ์ผ๋ฐ์ค๋ก ์์ฒญํ ๋ด์ฉ์ ๋ด์ B/B.001/U
๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค. ๊ธฐ์กด์๋ 2.4 ๋๋ ํฐ๋ฆฌ์์๋ ์ค์นํ ์ ์์์ง๋ง, ํด๋น ๋ฒ์ ์ ์ฟ ๋ฒ๋คํฐ์ค v1.30์ ์ค์นํ๋ฏ๋ก, ์ต์ v1.33 ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ B/B.001/U
๋ก ์ด๋ํด์ผ ํฉ๋๋ค.
ํด๋น ๋๋ ํฐ๋ฆฌ์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
cd ../../B/B.001/U/
ls -1
#
# README.md
# Vagrantfile
# controlplane_node.sh
# extra_k8s_pkgs.sh
# k8s_env_build.sh
# k8s_pkg_cfg.sh
# worker_nodes.sh
๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ๊ณ , vagrant up
๋ช
๋ น์ด๋ฅผ ์คํํด ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ์์ํฉ๋๋ค. ์ฐธ๊ณ ๋ก, ์ด๋๋ VM์จ์ด ํจ์ ๊ณผ ๋ค๋ฅด๊ฒ ๊ตฌ์ฑ ํ๋ฉด์ด ๊ณ์ ํ์
๋์ง ์์ต๋๋ค.
vagrant up
#
# Bringing machine 'cp-k8s-1.33.2' up with 'virtualbox' provider
# Bringing machine 'w1-k8s-1.33.2' up with 'virtualbox' provider
# Bringing machine 'w2-k8s-1.33.2' up with 'virtualbox' provider
# Bringing machine 'w3-k8s-1.33.2' up with 'virtualbox' provider
# ==> cp-k8s-1.33.2: Importing base box 'sysnet4admin/Ubuntu-k8s'...
# ==> cp-k8s-1.33.2: Matching MAC address for NAT networking...
# ==> cp-k8s-1.33.2: Checking if box 'sysnet4admin/Ubuntu-k8s' version '0.8.6' is up to date...
# ==> cp-k8s-1.33.2: Setting the name of the VM: cp-k8s-1.33.2(github_SysNet4Admin)
# ==> cp-k8s-1.33.2: Clearing any previously set network interfaces...
# ==> cp-k8s-1.33.2: Preparing network interfaces based on configuration...
# cp-k8s-1.33.2: Adapter 1: nat
# cp-k8s-1.33.2: Adapter 2: hostonly
# ==> cp-k8s-1.33.2: Forwarding ports...
# cp-k8s-1.33.2: 22 (guest) => 60010 (host) (adapter 1)
# ==> cp-k8s-1.33.2: Running 'pre-boot' VM customizations...
# ==> cp-k8s-1.33.2: Booting VM...
# ==> cp-k8s-1.33.2: Waiting for machine to boot. This may take a few minutes...
# cp-k8s-1.33.2: SSH address: 127.0.0.1:60010
# ==> cp-k8s-1.33.2: SSH username: vagrant
#
# [์ค๋ต]
#
# ==> w3-k8s-1.33.2: Running provisionerL: shell..
# w3-k8s-1.33.2: Running /var/folders/wf/p21p461x4kj0zyyv2fwtcpl40000gn/T/vagrant-shell20250624-40848-89mgq2.sh
# w3-k85-1.33.2: [preflight] Running pre-flight checks
# w3-k85-1.33.2: [preflight] Reading configuration from the "kubeadm-config" ConfigMap in namespace "kube-system"...
# w3-k85-1.33.2: [preflight] Use 'kubeadm init phase upload-config -config your-config-file' tO re-upload it.
# w3-k85-1.33.2: [kubelet-start] Writing kubelet configuration tO file "/var/lib/kubelet/config.yaml"
# w3-k85-1.33.2: [kubelet-start] Writing kubelet environment file with flags tO file "/var/lib/kubelet/kubeadm-flags.env"
# w3-k85-1.33.2: [kubelet-start] Starting the kubelet
# w3-k85-1.33.2: [kubelet-check] Waiting a healthy kubelet at http://127.0.0.1:10248/healthz. This can take up tO 4m05
# w3-k85-1.33.2: [kubelet-check] The kubelet is healthy after 1.000734493s
# w3-k85-1.33.2: [kubelet-start] Waiting the kubelet tO perform the TLS Bootstrap
# w3-k85-1.33.2: This node has joined the cluster:
# w3-k85-1.33.2: * Certificate signing request was sent tO apiserver and a response was received
# w3-k85-1.33.2: * The Kube1et was informed Of the new secure connection details.
# w3-k85-1.33.2: Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
# w3-k85-1.33.2:
์์ ์ฝ๋์ฒ๋ผ, vagrant up
๋ชจ๋ ๊ณผ์ ์ด ์๋ฃ๋ ๊ฒ์ ํ์ธํ๋ฉด, ๊ฐ๋จํ ๊ตฌ์ฑ์ด ๋๋ฉ๋๋ค.
3. ๊ตฌ์ฑํ ํฐ๋ฏธ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ํ์ธํ๊ณ , ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ
๋ฐฐํฌ๋ฅผ ๋ง์น ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ๋ ธ๋์ ์ ์ํ๊ธฐ ์ํด, ํฐ๋ฏธ๋ ํ๋ก๊ทธ๋จ ํ๋น(Tabby)๋ฅผ ์คํํฉ๋๋ค.
ํ๋น๋ฅผ ์คํํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ํ๋กํ ์ ํ ํ๋ฉด์ด ๋ํ๋ฉ๋๋ค. ์ด ์ค cp-k8s
๋ฅผ ์ ํํฉ๋๋ค.

cp-k8s
๋ฅผ ์ ํํ๋ฉด ํธ์คํธ ํค ํ์ธ ๋ฉ์์ง๊ฐ ๋ํ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ โํ์ฉ ํ ํค ์ ์ฅโ์ ์ ํํ๊ณ ์งํํฉ๋๋ค.
(๋ง์ฝ ์ํธ๋ฅผ ๋ฌผ์ด๋ณธ๋ค๋ฉด, vagrant
๋ฅผ ์
๋ ฅํฉ๋๋ค.)

cp-k8s
์ ์ ์ํ ๋ค์, k get nodes
, ๊ทธ๋ฆฌ๊ณ k get po -A
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด ๋ฐฐํฌ๊ฐ ์ ์์ ์ผ๋ก ์ด๋ค์ก๋์ง ํ์ธํฉ๋๋ค.
k get nodes
#
# NAME STATUS ROLES AGE VERSION
# cp-k8s Ready control-plane 6m1s v1.33.2
# w1-k8s Ready 4m42s v1.33.2
# w2-k8s Ready 3m49s v1.33.2
# w3-k8s Ready 2m55s v1.33.2
k get PO -A
#
# NAMESPACE NAME READY STATUS RESTARTS AGE
# default nfsโc1ientโprovisionerโ6ff67fc8f4โtkbf2 1/1 Running 0 6m55s
# ingressโngxnx ingressโnginxโadmissionโcreateโvjwqq 0/1 Comp1eted 0 6m55s
# ingressโngxnx ingressโnginxโadmissionโpatchโcdksq 0/1 Comp1eted 0 6m55s
# ingressโngxnx ingressโnginxโcontrollerโ6bd79f4d5โ9b2bg 1/1 Running 0 6m55s
# kubeโsystem calicoโkubeโcontrollersโ7c5bbf5ff4โrd6mf 1/1 Running 0 6m55s
# kubeโsystem calicoโnodeโcz4wv 1/1 Running 0 5m15s
# kubeโsystem calicoโnodeโppkbf 1/1 Running 0 6m56s
# kubeโsystem calicoโnodeโrfq6n 1/1 Running 0 6m9s
# kubeโsystem calicoโnodeโttwck 1/1 Running 0 4m22s
# kubeโsystem corednsโ674b8bbfcfโ5h852 1/1 Running 0 6m55s
# kubeโsystem corednsโ674b8bbfcfโnwpnt 1/1 Running 0 6m55s
# kubeโsystem etcdโcpโk8s 1/1 Running 1 (7m21s ago) 7m26s
# kubeโsystem kubeโapiserverโcpโk8s 1/1 Running 1 (7m20s ago) 7m26s
# kubeโsystem kubeโcontr011erโmanagerโcpโk8s 1/1 Running 1 (7m20s ago) 7m26s
# kubeโsystem kubeโproxyโ91kd8 1/1 Running 0 5m15s
# kubeโsystem kubeโproxyโcq857 1/1 Running 0 4m22s
# kubeโsystem kubeโproxyโkptpk 1/1 Running 0 6m56s
# kubeโsystem kubeโproxyโwwhbk 1/1 Running 0 6m9s
# kubeโsystem kubeโschedu1erโcpโk8s 1/1 Running 1 (7m20s ago) 7m26s
# kubeโsystem metricsโserverโ566c54b84fโ6kg84 1/1 Running 0 6m55s
# metallbโsystem contr011erโbb5f47665โtbgvq 1/1 Running 0 6m55s
# metallbโsystem speakerโgbcsw 1/1 Running 0 6m44s
# metallbโsystem speakerโsjks8 1/1 Running 0 5m48s
# metallbโsystem speakerโsxwj5 1/1 Running 0 4m28s
# metallbโsystem speakerโxkj9n 1/1 Running 0 4m4s
๋ํ, ๋ก๋๋ฐธ๋ฐ์ ์์ฑ์ ์ง์ํ๋ MetalLB์ IP Pool ๋์ ์ฌ๋ถ๋ ํ์ธํฉ๋๋ค. k get ipaddresspools.metallb.io -A
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๊ณ , ์๋์ ๊ฐ์ ์๋ต์ด ๋์ค๋์ง ํ์ธํฉ๋๋ค.
๋ค๋ง, ์ด ๋ด์ฉ์ ์ ์๊ณผ ํจ๊ป ๋ฐ๋ก ๋ํ๋์ง๋ ์์ต๋๋ค. cp-k8s
๋ฐฐํฌ๊ฐ ๋๋๊ณ ์ฝ 10๋ถ์ด ์ง๋ ๋ค์ ๋์ํ๋๋ก ์ค๊ณ๋์ด ์์ผ๋, ์กฐ๊ธ ๋ ๊ธฐ๋ค๋ ค ๋ณผ ์ ์์ต๋๋ค.
k get ipaddresspools.metallb.io -A
#
# NAMESPACE NAME AUTO ASSIGN AVOID BUGGY IPS ADDRESSES
# metallb-system k8s-svc-pool true false ["192.168.1.11-192.168.1.99"]
์ด์ arm64
ํ๊ฒฝ์์ ํด๋ฌ์คํฐ๊ฐ ์ ์ ๋์ํ๋์ง ๊ฒ์ฆํ๊ธฐ ์ํด, sysnet4admin/chk-info
์ปจํ
์ด๋๋ฅผ ๋ํ๋ก์ด๋จผํธ(Deployment)๋ก ๋ฐฐํฌํฉ๋๋ค. ๋ฐฐํฌ๋ ๋ํ๋ก์ด๋จผํธ๋ ๋ก๋๋ฐธ๋ฐ์ ์๋น์ค๋ก ๋
ธ์ถ์ํต๋๋ค.
k create deploy chk-info --image=sysnet4admin/chk-info
#
# deployment.apps/chk-info created
k expose deploy chk-info --type=LoadBa1ancer --port 80
#
# service/chk-info exposed
๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด, ํ๋(Pod)์ ์๋น์ค ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
k get po,svc
#
# NAME READY STATUS RESTARTS AGE
# pod/chk-info-5df5b8ff74-96jzn 1/1 Running 0 26s
# pod/nfs-c1ient-provisioner-6ff67fc8f4-tkbf2 1/1 Running 0 10m
#
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# service/chk-info LoadBalancer 10.104.129.5 192.168.1.11 80:31189/TCP 9s
# service/kubernetes ClusterIP 10.96.0.1 443/TCP 13m
๋ง์ง๋ง์ผ๋ก, ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ , ๋ถ์ฌ๋ ๋ก๋๋ฐธ๋ฐ์ IP(์: 192.168.1.11)๋ฅผ ์ ๋ ฅํฉ๋๋ค. ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋์ค๋ฉด ์ฑ๊ณต์ ๋๋ค.

์ด์ ์ฌ๋ฌ๋ถ๋ arm64 ํ๊ฒฝ์์ ๋์ํ๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค. ์ถํ๋๋ฆฝ๋๋ค.
์ถ๊ฐ๋ก ์๋ํด ๋ณผ๋งํ ์์ : ํค๋๋จํ ์ค์น
์ด๋ ๊ฒ ๊ตฌ์ถํ ๋๋ง์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ํ๊ฒฝ์์, ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ๋ ์์ฝ๊ฒ ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง๋ ํค๋๋จํ(Headlamp) (kubernetes-sigs/headlamp
)๋ผ๋ ํ๋ก์ ํธ๋ฅผ ์ค์นํด ๋ณด๊ฒ ์ต๋๋ค.

joaquimrocha
)์ ํ์ (``hoonjo`)์ค์ตํ ์ ์๋ ํด๋ฌ์คํฐ๋ฅผ ์ด๋ฏธ ๊ตฌ์ฑํ์ผ๋ฏ๋ก, ํค๋๋จํ๋ฅผ ์ค์นํด ํ์ฌ ํด๋ฌ์คํฐ ์ํ๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. ํค๋๋จํ๋ฅผ ์ค์นํ๋ ค๋ฉด, B/B.011๋ก ์ด๋ํด์ผ ํฉ๋๋ค. ์ด์ด brew install
๋ช
๋ น์ด๋ก ํค๋๋จํ ๋ฒ์ 0.31.1์ ์ค์นํฉ๋๋ค.
cd ../../B.011/
brew install --cask ./headlamp-v0.31.1/headlamp.rb
#
# ==> Auto-updating Homebrew.
# Adjust how often this is run with HOMEBREW_AUTO UPDATE_SECS or disable with HOMEBREW NO_AUTO UPDATE. Hide these hints with HOMEBREW NO ENV HINTS (see `man brew`).
# ==> Auto-updated Homebrew!
# Updated 1 tap (homebrew/cask).
#
# You have 54 outdated formulae and 2 outdated casks installed.
#
# ==> Downloading https://github.com/headlamp-k8s/headlamp/releases/download/v0.31.1/Headlamp-0.31.1-mac-arm64.dmg
# ==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/220546758/8f3e9374-96de-46d6-a7
#
# ==> lnstalling Cask headlamp
# ==> Moving App 'Headlamp.app' to '/App1ications/Headlamp.app'
# ้ฌฑ headlamp was successfully installed!
ํค๋๋จํ๋ฅผ ์คํํ๊ธฐ ์ ์๋, ๋ก์ปฌ ํ๊ฒฝ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. flatted_kubeconfig.sh
์คํฌ๋ฆฝํธ์ ๊ถํ์ ๋ถ์ฌํ๊ณ ์คํํ๊ฒ ์ต๋๋ค.
chmod +โ
น flatted kubeconfig.sh
sudo ./flatted kubeconfig.sh
#
# SuccessfuIIy flatten kubeconfig
ํค๋๋จํ๋ฅผ ์คํํ๊ณ , ํ์๋๋ ํ๋ฉด์์ kubernetes-admin@kubernetes
๋ฅผ ํด๋ฆญํฉ๋๋ค.

๋ง์ฝ โ์ฑ์ด ์์๋์ด ์ด ์ ์๋คโ๋ ๋ฉ์์ง๊ฐ ๋จ๋ ๊ฒฝ์ฐ, sudo xattr -rd com.apple.quarantine /Applications/Headlamp.app
๋ช
๋ น์ด๋ก ์คํ ๊ถํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
ํ์ฌ ์ํ๋ฅผ ํ์ธํ๋ ค๋ฉด, ์๋ ํ๋ฉด์์ ์ผ์ชฝ Map ๋ฉ๋ด๋ฅผ ๋๋ฆ ๋๋ค.

์ด๋์ผ๋ก ๋ํ๋๋ ํ๋ฉด์์ DaemonSet์ ๋๋ฆ ๋๋ค.

๋ง์ง๋ง์ผ๋ก GUI์์ ํ์ฌ ๋ฐฐํฌ๋ DaemonSet์ ๊ตฌ์ฑ์ ํ์ธํฉ๋๋ค.

๋ง์น๋ฉฐ
์ด๋ฒ ๊ธ์์๋ ๋ฒ ์ด๊ทธ๋ฐํธ(Vagrant)์ ๋ฒ์ถ์ผ๋ฐ์ค(VirtualBox)๋ฅผ ํ์ฉํด arm64 ๊ธฐ๋ฐ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์์ฝ๊ฒ ๊ตฌ์ถํด ๋ณด์์ต๋๋ค. ์ด๋ ๊ฒ ๊ตฌ์ฑํ ์ ์ฉ ํด๋ฌ์คํฐ ํ๊ฒฝ์์ ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ณ , ๋ฐ์ํ๋ ๋ค์ํ ๋ฌธ์ ๋ฅผ ์ง์ ํด๊ฒฐํ๋ ๊ณผ์ ์ ์ค๋ฌด ์ญ๋์ ํค์ฐ๋ ๋ฐ ํฐ ๋์์ ์ค๋๋ค.
๊ตฌ์ฑํ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ชฉ์ ์ ๋ง๋ ๋ค์ํ ์ค์ต์ ์งํํด ๋ณผ ์ ์์ต๋๋ค. ๋ชฉ์ ์ ๋ง๊ฒ ์์ ๋กญ๊ฒ ์ฌ์ฉํ๋ฉฐ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ ฅ ํฅ์์ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.