OpenShift ๊ฐ์ํ(์
์คํธ๋ฆผ ํ๋ก์ ํธ - Kubernetes: KubeVirt, ์ฐธ์กฐ)
์ด ๊ธฐ์ฌ์์๋ VM๊ณผ ์ปจํ
์ด๋๋ฅผ ๋จ์ผ ์ํฐํฐ๋ก ๊ด๋ฆฌํ๋ ๋จ์ผ ํ๋ซํผ ๋ด์์ ๊ณต์กดํ ์ ์๊ฒ ํด์ฃผ๋ OpenShift ๊ฐ์ํ์ ๊ธฐ์ ์ ์ธก๋ฉด์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ณ์ฐ ์์
์ปจํ ์ด๋๋ ๋ค์์คํ์ด์ค ๋ฐ cgroup๊ณผ ๊ฐ์ Linux ์ปค๋ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ธ์ค๋ Python, Java ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ์คํ ํ์ผ๋ก ์ดํด๋์ง๋ง ์ค์ ๋ก๋ bash, Emacs ๋๋ vim๊ณผ ๊ฐ์ ๋ชจ๋ ํ๋ก์ธ์ค์ผ ์ ์์ต๋๋ค.
๊ฐ์ ๋จธ์ ์ด๋ ๋ฌด์์ ๋๊น? ํ์ดํผ๋ฐ์ด์ ์ ๊ด์ ์์ ๋ณด๋ฉด ์ด ์ญ์ ํ๋์ ๊ณผ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก์ธ์ค๊ฐ ์๋๋ผ ํน์ VM ์คํ์ ๋ด๋นํ๋ KVM ํ๋ก์ธ์ค์ ๋๋ค.
์ปจํ ์ด๋ ์ด๋ฏธ์ง์๋ KVM ๊ฐ์ ๋จธ์ ์ ํ์ํ ๋ชจ๋ ๋๊ตฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ์ผ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์คํ ์ค์ธ VM์ ํฌ๋๋ฅผ ๊ฒ์ฌํ๋ฉด ๋์ฐ๋ฏธ์ qemu-kvm ํ๋ก์ธ์ค๊ฐ ํ์๋ฉ๋๋ค. ๋ํ qemu-img, qemu-nbd ๋ฐ virsh์ ๊ฐ์ ๊ฐ์ ๋จธ์ ๊ด๋ฆฌ๋ฅผ ์ํ KVM ๋๊ตฌ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
๊ฐ์ ๋จธ์ ์ ํฌ๋์ด๋ฏ๋ก Kubernetes์์ ํฌ๋์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์๋์ผ๋ก ์์ํฉ๋๋ค. ์ผ๋ฐ ํฌ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก VM ํฌ๋์๋ ์ค์ผ, ํ์ฉ, ์ ํธ๋, ๋ฐ์นํ์ฑ๊ณผ ๊ฐ์ ์ค์ผ์ค๋ฌ ๊ตฌ์ฑํ ๋ฐ ๊ธฐ์ค์ด ์ ์ฉ๋ฉ๋๋ค. ๊ณ ๊ฐ์ฉ์ฑ ๋ฑ์ ์ด์ ๋ ์ป์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ ๊ฐ์ง ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ์ผ๋ฐ ํฌ๋๋ ์ผ๋ฐ์ ์ธ ์๋ฏธ์์ ํธ์คํธ์์ ํธ์คํธ๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋์ง ์์ต๋๋ค. ๋ ธ๋๊ฐ ์คํ๋ผ์ธ ์ํ๊ฐ ๋๋ฉด ํด๋น ๋ ธ๋์ Pod๊ฐ ์ข ๋ฃ๋๊ณ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋ ธ๋์ ๋ค์ ํ ๋น๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ๋จธ์ ์ ๊ฒฝ์ฐ ๋ผ์ด๋ธ ๋ง์ด๊ทธ๋ ์ด์ ์ด ๋ํ๋ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
์ด๋ฌํ ๊ฒฉ์ฐจ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ์ ๋ ธ๋ ๊ฐ VM์ ์ค์๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ด๊ธฐํ, ๋ชจ๋ํฐ๋ง ๋ฐ ๊ด๋ฆฌํ๋ ์ค์๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ๋ฉ์ปค๋์ฆ์ ์ค๋ช ํ๋ ์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค ์ ์(CDR)๊ฐ ์์ฑ๋์์ต๋๋ค.
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstanceMigration
metadata:
name: migration-job
spec:
vmiName: fedora
๋ ธ๋๊ฐ ๋นํ์ฑํ๋๋ฉด ์ ๊ฑฐ ์ ๋ต์ผ๋ก ์ค์๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ค์ ๋ ๊ฐ์ ๋จธ์ ์ ๋ํ ๋ง์ด๊ทธ๋ ์ด์ ์์ ์ด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํด๋ฌ์คํฐ ๋ ธ๋ ๊ฐ์ ์ด๋ํ ๋ ๊ฐ์ ๋จธ์ ์ ๋์์ ์ ์ดํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ํฌ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค์๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ตฌ์ฑํ๊ณ VM์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๋คํธ์ํฌ
๋ชจ๋ Kubernetes ์์คํ ์ ์ํํธ์จ์ด SDN ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ํฌ๋ ๊ฐ์ ํต์ ์ ์ ๊ณตํฉ๋๋ค. OpenShift๋ ์์ธ๋ ์๋๋ฉฐ ๋ฒ์ 3๋ถํฐ ์ด๋ฅผ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก OpenShiftSDN์ ์ฌ์ฉํฉ๋๋ค. ๋ํ OpenShift 4์๋ Multus๋ผ๋ ๋ ๋ค๋ฅธ ์๋ก์ด ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ์ฌ๊ธฐ์ ํฌ๋๋ฅผ ๋์์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๊ด๋ฆฌ์๋ Multus๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ CNI ๋คํธ์ํฌ๋ฅผ ์ ์ํ ์ ์์ผ๋ฉฐ, ์ด ๋คํธ์ํฌ๋ ํน์ ํด๋ฌ์คํฐ ๋คํธ์ํฌ ์ด์์์ ์ํด ํด๋ฌ์คํฐ์ ๋ฐฐํฌ ๋ฐ ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํฌ๋๋ ์ด๋ฌํ ๋คํธ์ํฌ ์ค ํ๋ ์ด์(์ผ๋ฐ์ ์ผ๋ก ํ์ค OpenShiftSDN ๋ฐ ์ถ๊ฐ ์ธํฐํ์ด์ค)์ ์ฐ๊ฒฐ๋ฉ๋๋ค. VM์ ํ์ํ ๊ฒฝ์ฐ SR-IOV ์ฅ์น, ํ์ค Linux ๋ธ๋ฆฌ์ง, MACVLAN ๋ฐ IPVLAN ์ฅ์น๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ ๊ทธ๋ฆผ์ eth1 ์ธํฐํ์ด์ค์์ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ์ ๋ํด Multus CNI๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
apiVersion: operator.openshift.io/v1
kind: Network
metadata:
name: cluster
spec:
additionalNetworks:
- name: multus1
rawCNIConfig: '{ "cniVersion": "0.3.1", "type": "bridge", "master": "eth1", "ipam":
{ "type": "static", "addresses": [ { "address": "191.168.1.1/24" } ] } }'
type: Raw
OpenShift ๊ฐ์ํ์ ๊ด๋ จํ์ฌ ์ด๋ SDN์ ์ฐํํ์ฌ VM์ ์ธ๋ถ ๋คํธ์ํฌ์ ์ง์ ์ฐ๊ฒฐํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ด๋ Red Hat Virtualization ๋๋ VMware vSphere์์ OpenShift๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋ ๊ฐ์ ๋จธ์ ์ ๊ฒฝ์ฐ ์ค์ํฉ๋๋ค. ๋ ๋ฒ์งธ OSI ๊ณ์ธต์ ์ก์ธ์คํ ์ ์์ผ๋ฉด ๋คํธ์ํฌ ์ค์ ์ด ๋ณ๊ฒฝ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ ๋ํ VM์ SDN์ ์ฐํํ๋ ๋คํธ์ํฌ ์ฃผ์๊ฐ ์์ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ํน์ ๋คํธ์ํฌ ์ด๋ํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์คํ ๋ฆฌ์ง ์์คํ ์ ์ง์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
OpenShift ๊ฐ์ํ ๊ฐ์ ๋จธ์ ์ ์์ฑํ๊ณ ๋คํธ์ํฌ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
์ ์ฅ
OpenShift ๊ฐ์ํ ๋ด์์ ๊ฐ์ ๋จธ์ ๋์คํฌ ์ฐ๊ฒฐ ๋ฐ ๊ด๋ฆฌ๋ StorageClasses, PertantVolumeClaim(PVC) ๋ฐ PertantVolume(PV)๊ณผ ๊ฐ์ Kubernetes ๊ฐ๋ ๊ณผ Kubernetes ํ๊ฒฝ์ ๋ํ ํ์ค ์คํ ๋ฆฌ์ง ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. ์ด๋ Kubernetes ๊ด๋ฆฌ์์ ์ ํ๋ฆฌ์ผ์ด์ ํ์๊ฒ ์ปจํ ์ด๋์ ๊ฐ์ ๋จธ์ ์ ๋ชจ๋ ๊ด๋ฆฌํ๋ ๊ณตํต์ ์ด๊ณ ์น์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ ๊ฐ์ํ ํ๊ฒฝ ๊ด๋ฆฌ์์๊ฒ ์ด ๊ฐ๋ ์ OpenStack ๋ฐ ๊ธฐํ ์ฌ๋ฌ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ์ฌ์ฉ๋๋ VM ๊ตฌ์ฑ ํ์ผ๊ณผ ๋์คํฌ๋ฅผ ๋ถ๋ฆฌํ๋ ๋์ผํ ์์น์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ต์ํ๊ฒ ๋ค๋ฆด ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํ์ดํผ๋ฐ์ด์ ์์ OpenShift๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋จ์ํ ๋งค๋ฒ VM์ฉ ์ ๋์คํฌ๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค. ์, ์ VM์ ๋ฐฐํฌํ๋๋ผ๋ ์ฒ์๋ถํฐ ๋ง๋๋ ๊ฒ๋ณด๋ค ํ ํ๋ฆฟ์์ ์ํํ๋ ๊ฒ์ด ํญ์ ๋ ๋น ๋ฆ ๋๋ค. ๋ฐ๋ผ์ ๊ธฐ์กด ๋์คํฌ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค.
์ด ์์ ์ ๋จ์ํํ๊ธฐ ์ํด OpenShift ๊ฐ์ํ๋ CDI(Containerized Data Importer) ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ์ฌ ์ฌ๋ฌ ์์ค์์ ๋์คํฌ์ ๋์คํฌ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ์ PVC ํญ๋ชฉ ์์ฑ์ผ๋ก ์ค์ ๋๋ค.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: "fedora-disk0"
labels:
app: containerized-data-importer
annotations:
cdi.kubevirt.io/storage.import.endpoint: "http://10.0.0.1/images/Fedora-Cloud-Base-31-1.9.x86_64.qcow2"
spec:
storageClassName: ocs-gold
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
CDI๋ฅผ ํ์ฑํํ๊ณ ์๋ ๊ทธ๋ฆผ์ ํ์๋ ์ผ๋ จ์ ์์ ์ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒ์ ์ด ํญ๋ชฉ์ ๋๋ค.
CDI๊ฐ ์๋ฃ๋ ํ PVC์๋ ์ฌ์ฉํ ์ค๋น๊ฐ ๋ ๊ฐ์ ๋จธ์ ๋์คํฌ๊ฐ ํฌํจ๋๊ณ ํ์ค OpenShift ํ์์ผ๋ก ๋ณํ๋ฉ๋๋ค.
OpenShift ๊ฐ์ํ ์์
์ ์ปจํ
์ด๋์ ๋ํ ์๊ตฌ ์คํ ๋ฆฌ์ง ๊ธฐ๋ฅ์ ๊ตฌํํ๋ Ceph ํ์ผ ์์คํ
๊ธฐ๋ฐ Red Hat ์๋ฃจ์
์ธ OCS(OpenShift Container Storage)๋ ์ ์ฉํฉ๋๋ค. ํ์ค PVC ์ก์ธ์ค ๋ฐฉ๋ฒ์ธ RWO(๋ธ๋ก) ๋ฐ RWX(ํ์ผ) ์ธ์๋ OCS๋ ์์ ๋ธ๋ก ์ฅ์น์ฉ RWX๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ณ ์ฑ๋ฅ ์๊ตฌ ์ฌํญ์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ธ๋ก ์ก์ธ์ค๋ฅผ ๊ณต์ ํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๋ํ OCS๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ๊ฐ์ฒด ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์๋ก์ด ๊ฐ์ฒด ๋ฒํท ํด๋ ์ ํ์ค์ ์ง์ํฉ๋๋ค.
์ปจํ ์ด๋์ ๊ฐ์ ๋จธ์
์๋ ๋ฐฉ์์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด OpenShift 3.11 ์ด์์ ์ผ๋ถ๋ก Tech Preview ๋ฒ์ ์์ OpenShift ๊ฐ์ํ๋ฅผ ์ด๋ฏธ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ์์๋์ญ์์ค. ๊ธฐ์กด OpenShift ๊ตฌ๋ ์์ ์๋ ์ถ๊ฐ ๋จ๊ณ ์์ด ์์ ํ ๋ฌด๋ฃ๋ก OpenShift ๊ฐ์ํ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ฒ์๋ฌผ์ด ๊ฒ์๋๋ ์์ ์๋ OpenShift 4.4 ๋ฐ OpenShift Virtualization 2.3์ด ์ต์ ๋ฒ์ ์ด๋ฏ๋ก ์ด์ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ต์ ๊ธฐ๋ฅ์ ์ป์ผ๋ ค๋ฉด ์ ๊ทธ๋ ์ด๋ํด์ผ ํฉ๋๋ค. ์์ ํ ์ง์๋๋ OpenShift ๊ฐ์ํ ๋ฒ์ ์ 2020๋ ํ๋ฐ๊ธฐ์ ์ถ์๋ ์์ ์ ๋๋ค.
์์ธํ ๋ด์ฉ์
์ถ์ฒ : habr.com