์ฟ ๋ฒ๋คํฐ์ค๋ ๋ฌด์์ผ๊น์?๐คจ
ํ๋ง๋๋ก ๋งํด์ "์ปจํ
์ด๋๋ฅผ ์ฌ๋ฌ ๋
ธ๋์์ ์ด์ํ ์ ์๋๋ก ์ปจํธ๋กค ํด์ฃผ๋ ์ค์ผ์คํธ๋ ์ด์
ํด" ์
๋๋ค.
์ฌ๊ธฐ์ ๋งํ๋ "๋ ธ๋"๋, ํ๋์ ์ปดํจํฐ/์๋ฒ๋ฅผ ์ง์นญํฉ๋๋ค.
Docker๋ Docker Composer๋ ํ๋์ ๋
ธ๋์์๋ง ์ฌ์ฉํ์์ฃ ,
์ง๊ธ๋ถํฐ๋ ์ฌ๋ฌ๋์ ๋
ธ๋๋ฅผ ์ฌ์ฉํ ์์ ์
๋๋ค. :)
์ฌ๋ฌ๊ฐ์ง ๊ฐ๋
์ด ๋ง ๋์ค๊ฒ ์ง๋ง, ์ฟ ๋ฒ๋คํฐ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปจํ
์ด๋ ๋ฐํ์์ด ์ค์น ๋์ด์์ด์ผ ํฉ๋๋ค.
๋ฆฌ๋
์ค ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์๋ ์ฟ ๋ฒ๋คํฐ์ค์ ์ปจํ
์ด๋ ๋ฐ ํ์์ containerd, CRI-O, Docker ์
๋๋ค.
์ ๋ Docker ๋ฐํ์์ ์ค์นํ๋๋ก ํฉ๋๋ค.
์ฌ๊ธฐ ๋ฅผ ํด๋ฆญํ์ฌ ๋์ปค ์ค์น๋ถํฐ ํ์ธํ ์ ์์ต๋๋ค.
์ ๋ ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ Step by Step์ผ๋ก ์ค์น๋ฅผ ๋ณด์ฌ๋๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค.!
์ ๊ฐ ๊ตฌ์ฑํ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๊ตฌ์ฑ๋์ ๋๋ค. :)
1. ์ปจํ ์ด๋ ๋ฐํ์(docker-ce) ์ค์น
์ด์ ์ปจํ
์ด๋ ๋ฐํ์์ผ๋ก Docker-ce๋ฅผ ๋์ด์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
Containerd๋ฅผ ์ฌ์ฉํ๋ฉฐ, https://github.com/containerd/containerd/blob/main/docs/getting-started.md ์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํด์ Containerd ๋ฅผ ์ค์นํ ์ ์์ต๋๋ค :)
๊ฐ ๋
ธ๋์ Docker-ce๋ฅผ ์ค์นํฉ๋๋ค.
๋ชจ๋ ๋
ธ๋์ ๋์ผํ๊ฒ ์์
ํด์ฃผ์ธ์ :)
์๋ ๋๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ํ์ธํ์ธ์๐ฅณ
Docker-ce ์ค์น์ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
[root@kube-manager /]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
๋์ปค ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
[root@kube-manager /]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
์ด์ OS๋ฅผ ์ ๋ฐ์ดํธ ํ๊ณ ํ์ํ Docker-ce ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
[root@kube-manager /]# sudo yum update -y && sudo yum install -y containerd.io docker-ce docker-ce-cli
๋์ปค ์ค์ ํ์ผ์ด ๋ด๊ธธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
[root@kube-manager /]# sudo mkdir /etc/docker
๊ทธ๋ฆฌ๊ณ ์๋ ๋์ปค ๋ฐ๋ชฌ ์ค์ ํ์ผ์ ์์ฑํฉ๋๋ค.
[root@kube-manager /]# 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",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
/etc/docker/daemon.json ํ์ผ์ด ์ ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
[root@kube-manager /]# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
์, ์ด์ ๋ชจ๋ ์ค๋น๊ฐ ์๋ฃ๋์์ต๋๋ค.
๋์ปค๋ฅผ ์ฌ์์ํ๊ณ ๋ถํ
์ docker ์๋น์ค๊ฐ ์์ ๋๋๋ก ์ค์ ํฉ๋๋ค!
[root@kube-manager /]# sudo systemctl daemon-reload
[root@kube-manager /]# sudo systemctl restart docker
[root@kube-manager /]# sudo systemctl enable docker
์ฌ๊ธฐ๊น์ง ์๋ฃ ๋์์ผ๋ฉด ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋๋ค :)
2. Kubeadm ์ค์น ์ ํ์ธ
์ค์นํ๊ธฐ ์ , OS๊ฐ Centos 7 ๋ฒ์ ์ด์, RAM 2GB ์ด์, ์ค์ ๋น ํ์ฑํ๋ฅผ ํ์ธ ํฉ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ค์น ์กฐ๊ฑด์ ์ฌ๊ธฐ์ ์์ธํ ๋์์์ผ๋, ๋ค์ํ๋ฒ ์ ๊ฒํด๋ณด์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. :)
๋ชจ๋ ๋
ธ๋์ ๋์ผํ๊ฒ ์์
ํด์ฃผ์ธ์ :)
์๋ ๋๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ํ์ธํ์ธ์๐ฅณ
2-1) OS ํ์ธ
๋จผ์ , OS์ ๋ฒ์ ์ ํ์ธํฉ๋๋ค.
- Ubuntu 16.04 ์ด์
- Debian 9 ์ด์
- CentOS 7
- RHEL (Red Hat Enterprise Linux) 7
- Fedora 25 ์ด์
- HypriotOS v1.0.1 ์ด์
- Flatcar Container Linux (2512.3.0์ผ๋ก ํ ์คํธ ๋จ)
์ ๋ Centos 7 ๋ก ์กฐ๊ฑด์ ๋ง์กฑ ํฉ๋๋ค.
[root@kube-manager /]# rpm -qa | grep release
centos-release-7-7.1908.0.el7.centos.x86_64
centos-release-7-9.2009.0.el7.centos.x86_64
2-2) ๋ฉ๋ชจ๋ฆฌ ํ์ธ
์ด์ RAM์ ํ์ธํฉ๋๋ค.
[root@kube-manager /]# free -h
total used free shared buff/cache available
Mem: 3.6G 232M 1.5G 16M 1.9G 3.1G
Swap: 0B 0B 0B
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์์ ํ๊ฐ์ง ๋ ์ฃผ์๊น๊ฒ ๋ด์ผํ ๋ถ๋ถ์ swap ๋ถ๋ถ์
๋๋ค.
Kubelet์ ์ค์์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ, ๋นํ์ฑํ ๋์ด์์ด์ผ ์ ์์ ์ผ๋ก ๋์ํฉ๋๋ค.
๋ง์ฝ free ๋ช
๋ น์ด ๊ฒฐ๊ณผ์ Swap ๊ฐ์ด ๋์๋ค๋ฉด ์๋ ๋ช
๋ น์ด๋ก ์ค์์ ๋๊ณ , fstab์ ์ค์ ๋ถ๋ถ์ ์ฃผ์ ์ฒ๋ฆฌ ํฉ๋๋ค.
[root@kube-manager /]# swapoff -a
[root@kube-manager /]# cat /etc/fstab | grep swap
#/dev/mapper/cl-swap swap swap defaults 0 0
2-3) iptables ์ค์
iptables ๋ฅผ ์ค์ ํ๊ธฐ ์ ์ br_netfilter ๋ชจ๋์ด ๋ก๋ ๋์๋์ง ํ์ธํฉ๋๋ค.
๋ง์ฝ ์๋์ฒ๋ผ ์๋์ด์๋ค๋ฉด #sudo modprobe br_netfilter ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
[root@kube-manager /]# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 151336 1 br_netfilter
์ด์ iptables ์ค์ ์ ๋ฃ์ด์ค๋๋ค.
[root@kube-manager /]# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
์ค์ ์ด ์ ๋์๋์ง ํ์ธํฉ๋๋ค.
[root@kube-manager /]# cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
์ด์ , sysctl ๋ช ๋ น์ด๋ก ์ค์ ์ ๋ก๋ ํฉ๋๋ค.
[root@kube-manager /]# sudo sysctl --system
2-4) SELinux ์ค์
SELinux๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ SELinux๋ฅผ ๋๊ณ , ์ฌ๋ถํ
๋๋๋ผ๋ ์ฌ์ฉํ์ง ์๋๋ก ์ค์ ์ ๋ณ๊ฒฝํฉ๋๋ค.
[root@kube-manager /]# sudo setenforce 0
[root@kube-manager /]# sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
์ค์ ํ์ผ ํ์ธ ์ ์๋ ์ฒ๋ผ "SELINUX=permissive"๋ก ๋์ค๋ฉด ๋ฉ๋๋ค. :)
[root@kube-manager /]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
์ด์ ์ด๋ฒ ๋จ๊ณ๋ ์๋ฃ ๋์์ต๋๋ค.
๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋๋ค!
3. Kubeadm ์ค์น
๊ฐ ๋
ธ๋์ dockeradm๋ฅผ ์ค์นํฉ๋๋ค.
์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ๋
ธ๋์ ๋์ผํ๊ฒ ์์
ํด์ฃผ์ธ์ :)
์๋ ๋๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ํ์ธํ์ธ์๐ฅณ
๋จผ์ , ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ฑ๋กํฉ๋๋ค.
[root@kube-manager /]# cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
์ ๋ฑ๋ก๋์๋์ง ํ์ธํด๋ด ๋๋ค.
[root@kube-manager /]# cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
์ด์ ์ง์ง ์ค์นํด๋ด ์๋ค!
[root@kube-manager /]# sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
์ค์น๊ฐ ์ ๋์๋์ง rpm๋ช ๋ น์ด๋ก ํ์ธํด๋ด ์๋ค. :) ์ค์น๊ฐ ์ ๋์๋ค์!
[root@kube-manager /]# rpm -qa | grep kube
kubeadm-1.19.4-0.x86_64
kubernetes-cni-0.8.7-0.x86_64
kubectl-1.19.4-0.x86_64
kubelet-1.19.4-0.x86_64
์, ์ด์ kubelet ๋ฐ๋ชฌ์ ์ฌ์์ ๋๋๋ผ๋ ์ฌ์ฉํ ์ ์๋๋ก enable ํฉ๋๋ค.
[root@kube-manager /]# sudo systemctl enable --now kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
์ฌ๊ธฐ๊น์ง๊ฐ Kubenetes ์ค์น ๊ณผ์ ์ด์์ต๋๋ค.
๋ค์ ๊ณผ์ ์์ ์ปจํธ๋กคํ๋ ์ธ ๊ตฌ์ฑ์ ํด๋ด ์๋ค!!