๊ฒฉ๋ฆฌ๋ ์ปจํ ์ด๋๋ฅผ ํจ์จ์ ์ด๊ณ ์์ ํ๊ฒ ์์ํ๊ธฐ ์ํด Amazon์ ์ฐธ์ฌ๋ก ๊ฐ๋ฐ๋ Linux ๋ฐฐํฌํ Bottlerocket 1.1.0์ด ์ถ์๋์์ต๋๋ค. ๋ฐฐํฌํ์ ๋๊ตฌ์ ์ ์ด ๊ตฌ์ฑ ์์๋ Rust๋ก ์์ฑ๋์์ผ๋ฉฐ MIT ๋ฐ Apache 2.0 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. Amazon ECS ๋ฐ AWS EKS Kubernetes ํด๋ฌ์คํฐ์์ Bottlerocket ์คํ์ ์ง์ํ๊ณ ์ปจํ ์ด๋์ ๋ํ ๋ค์ํ ์ค์ผ์คํธ๋ ์ด์ ๋ฐ ๋ฐํ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ฌ์ฉ์ ์ง์ ๋น๋ ๋ฐ ์๋์ ์์ฑ์ ์ง์ํฉ๋๋ค.
๋ฐฐํฌํ์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ ๊ตฌ์ฑ ์์๋ง ํฌํจํ์ฌ Linux ์ปค๋๊ณผ ์ต์ ์์คํ ํ๊ฒฝ์ ํฌํจํ๋ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๋ ๋ถํ ํ ์ ์๋ ์์คํ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ๊ฒฝ์๋ systemd ์์คํ ๊ด๋ฆฌ์, Glibc ๋ผ์ด๋ธ๋ฌ๋ฆฌ, Buildroot ๋น๋ ๋๊ตฌ, GRUB ๋ถํธ ๋ก๋, ์ฌ์ ํ ๋คํธ์ํฌ ๊ตฌ์ฑ์, ๊ฒฉ๋ฆฌ๋ ์ปจํ ์ด๋๋ฅผ ์ํ ์ปจํ ์ด๋ ๋ฐํ์, Kubernetes ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ, aws-iam-authenticator ๋ฐ Amazon์ด ํฌํจ๋ฉ๋๋ค. ECS ์์ด์ ํธ.
์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋๊ณ API ๋ฐ AWS SSM ์์ด์ ํธ๋ฅผ ํตํด ๊ด๋ฆฌ๋๋ ๋ณ๋์ ๊ด๋ฆฌ ์ปจํ ์ด๋๋ก ์ ๊ณต๋ฉ๋๋ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง์๋ ๋ช ๋ น ์ ธ, SSH ์๋ฒ ๋ฐ ํด์๋ ์ธ์ด(์: Python ๋๋ Perl ์์)๊ฐ ์์ต๋๋ค. ๊ด๋ฆฌ ๋๊ตฌ ๋ฐ ๋๋ฒ๊น ๋๊ตฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด ์๋ ๋ณ๋์ ์๋น์ค ์ปจํ ์ด๋์ ๋ฐฐ์น๋ฉ๋๋ค.
Fedora CoreOS, CentOS/Red Hat Atomic Host์ ๊ฐ์ ์ ์ฌํ ๋ฐฐํฌํ๊ณผ์ ์ฃผ์ ์ฐจ์ด์ ์ ๊ฐ๋ฅํ ์ํ์ผ๋ก๋ถํฐ ์์คํ ๋ณดํธ๋ฅผ ๊ฐํํ์ฌ OS ๊ตฌ์ฑ ์์์ ์ทจ์ฝ์ ์ ์ ์ฉํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ ์ปจํ ์ด๋ ๊ฒฉ๋ฆฌ๋ฅผ ์ฆ๊ฐ์ํค๋ ๋งฅ๋ฝ์์ ์ต๋ ๋ณด์์ ์ ๊ณตํ๋ ๋ฐ ์ฃผ์ ์ด์ ์ ๋ง์ถ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. . ์ปจํ ์ด๋๋ ํ์ค Linux ์ปค๋ ๋ฉ์ปค๋์ฆ(cgroup, ๋ค์์คํ์ด์ค ๋ฐ seccomp)์ ์ฌ์ฉํ์ฌ ์์ฑ๋ฉ๋๋ค. ์ถ๊ฐ ๊ฒฉ๋ฆฌ๋ฅผ ์ํด ๋ฐฐํฌํ์ "๊ฐ์ " ๋ชจ๋์์ SELinux๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฃจํธ ํํฐ์ ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋ง์ดํธ๋๊ณ , /etc ์ค์ ํํฐ์ ์ tmpfs์ ๋ง์ดํธ๋์ด ์ฌ์์ ํ ์๋ ์ํ๋ก ๋ณต์๋ฉ๋๋ค. /etc/resolv.conf ๋ฐ /etc/containerd/config.toml๊ณผ ๊ฐ์ /etc ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์ง์ ์์ ํ๋ ๊ฒ์ ์ง์๋์ง ์์ต๋๋ค. ์ค์ ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๋ ค๋ฉด API๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๊ธฐ๋ฅ์ ๋ณ๋์ ์ปจํ ์ด๋๋ก ์ด๋ํด์ผ ํฉ๋๋ค. dm-verity ๋ชจ๋์ ๋ฃจํธ ํํฐ์ ์ ๋ฌด๊ฒฐ์ฑ์ ์ํธํ ๋ฐฉ์์ผ๋ก ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๋ธ๋ก ์ฅ์น ์์ค์์ ๋ฐ์ดํฐ ์์ ์๋๊ฐ ๊ฐ์ง๋๋ฉด ์์คํ ์ด ์ฌ๋ถํ ๋ฉ๋๋ค.
๋๋ถ๋ถ์ ์์คํ ๊ตฌ์ฑ ์์๋ After Free ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ ๋ฐ ๋ฒํผ ์ค๋ฒ๋ฐ์ผ๋ก ์ธํ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Rust๋ก ์์ฑ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋ํ ๋ ์ปดํ์ผ ๋ชจ๋ "-enable-default-pie" ๋ฐ "-enable-default-ssp"๋ ์คํ ํ์ผ ์ฃผ์ ๊ณต๊ฐ(PIE)์ ๋ฌด์์ํ๋ฅผ ํ์ฑํํ๊ณ ์นด๋๋ฆฌ์ ๋์ฒด๋ฅผ ํตํ ์คํ ์ค๋ฒํ๋ก๋ก๋ถํฐ ๋ณดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. C/C++๋ก ์์ฑ๋ ํจํค์ง์ ๊ฒฝ์ฐ "-Wall", "-Werror=format-security", "-Wp,-D_FORTIFY_SOURCE=2", "-Wp,-D_GLIBCXX_ASSERTIONS" ๋ฐ "-fstack-clash" ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ํ์ฑํ -๋ณดํธ".
์ ๋ฆด๋ฆฌ์ค์์:
- Kubernetes 8์ ์ง์ํ๋ ๋ ๊ฐ์ง ์๋ก์ด ๋ฐฐํฌ ์ต์ aws-k1.20s-8 ๋ฐ vmware-k1.20s-1.20์ด ์ ์๋์์ต๋๋ค. ์ด๋ฌํ ๋ณํ๊ณผ โโ์ ๋ฐ์ดํธ๋ ๋ฒ์ aws-ecs-1์ ์๋ก์ด Linux ์ปค๋ 5.10 ๋ฆด๋ฆฌ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ ๊ธ ๋ชจ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก "๋ฌด๊ฒฐ์ฑ"์ผ๋ก ์ค์ ๋ฉ๋๋ค(์ฌ์ฉ์ ๊ณต๊ฐ์์ ์คํ ์ค์ธ ์ปค๋์ ๋ณ๊ฒฝํ ์ ์๋ ๊ธฐ๋ฅ์ ์ฐจ๋จ๋ฉ๋๋ค). Kubernetes 8๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ aws-k1.15s-1.15 ๋ณํ์ ๋ํ ์ง์์ด ์ค๋จ๋์์ต๋๋ค.
- Amazon ECS๋ awsvpc ๋คํธ์ํฌ ๋ชจ๋๋ฅผ ์ง์ํ๋ฏ๋ก ๊ฐ ์์ ์ ๋ณ๋์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ ๋ด๋ถ IP ์ฃผ์๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค.
- QPS, ํ ์ ํ, AWS ์ด์ธ์ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฅ ๋ฑ ๋ค์ํ Kubernetes ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ดํ๋ โโ์ค์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ถํธ์คํธ๋ฉ ์ปจํ ์ด๋๋ SELinux๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ํํฉ๋๋ค.
- resize2fs ์ ํธ๋ฆฌํฐ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru