Kubernetes와 Kubernetes on OpenStack 환경의 비교와 그 구축방법에 대해서 알아봅니다.
1. 클라우드 동향
2. Kubernetes vs Kubernetes on OpenStack
3. Kubernetes on OpenStack 구축 방벙
4. Kubernetes on OpenStack 운영 방법
9. Storage
Kubernetes 물리 Network
물리 인프라
Switch
LoadBalancer
Layer 2
Switch
SAN 기반의
스토리지
x86 서버
…
container
container
container
container
container
container
container
container
container
container
container
container
container
container
container
container
container
container
iscsi 기반의
스토리지
Legacy 형태
가상 NFV
가상 SDN
LoadBalancer
가상 스토리지
가상 인프라
SDC
(Software Defined Computing)
CEPH
Storage
SDS
(Software Defined Storage)
…
VM 서버 VM 서버 VM 서버
Kubernetes
…
container
container
container
container
container
container
container
container
container
vRouter
OVS
SDDC 형태
물리 인프라
Switch
x86 서버
• 기존의 legacy 인프라에 kubernetes를 제공
• Kubernetes를 여러 multi tenant로 배포하는 것이 힘듦
• 단일업무 단일부서의 서비스인 경우에 적합
• Loadbalncer / ingress 추가시 네트워크 하드웨어 L4 포트 작업을 직접 하여야 함
• 스토리지의 경우 스토리지 엔지니어가 할당한 LUN을 받아서 작업해야 하고, 기존 SAN장비
나 iscsi adapter를 사용하여 구성시 벤더 엔지니어의 지원이 필요함
• 증설시 밴더의 지원이 필요함
• Block device/object storage/shared storage 등의 용도에 따라 다양한 형태의 인프라를
구매해야 함
• IaaS 위의 인프라에 kubernetes를 제공 (전체 인프라이 관리가 가능)
• Kubernetes를 여러 multi tenant로 배포하는 것에 최적화됨
• 다양한 부서의 다양한 업무를 여러 Kubernetes cluster단위로 제공 가능
• 일반적으로 openstack위에 올릴 경우, LB는 NFV인 Octavia를 이용하여 구성하며, kubernetes에서
구성시 자동으로 할당됨
• 스토리지의 경우, 직접 pool을 만들어 운영 가능하며, 속도나 업무에 따라 다양한 pool로 제공가능
(SAS/SSD/Nvme)
• block device/shared volume/Object storage등 다양한 형태의 스토리지를 한 ceph storage에서
제공
9
16. Compute Node 1
Worker Instan
ce 1
Amphora instan
ce1
(Octavia vm)
Compute Node 2
Worker Instan
ce 2
Amphora instan
ce2
(Octavia vm)
Compute Node3
Worker Instan
ce 3
Worker Instan
ce 4
eth0 eth0 eth0 eth0 eth0
qbr-xxx
qbr-xxx
qbr-xxx
qbr-xxx
qbr-xxx
tapxxx tapxxx tapxxx tapxxx tapxxx
qvb-xx
x
qvb-xx
x
qvb-xx
x
qvb-xx
x
qvb-xx
x
br-int br-int
br-int
qvo-xx
x
bond-sr
v
qvo-xx
x
qvo-xx
x
qvo-xx
x
bond-sr
v
bond-sr
v
bond-tun
bond-tun
bond-tun
eth0
qvo-xx
x
qbr-xxx
tapxxx
qvb-xx
x
qvo-xx
x
br-ex br-tun br-ex br-tun br-ex br-tun
Tunneling(vxlan) Network
External (Service) Network
시큐리티 그룹 브릿지
case1 case2
시큐리티 그룹 브릿지 시큐리티 그룹 브릿지 시큐리티 그룹 브릿지 시큐리티 그룹 브릿지 시큐리티 그룹 브릿지
1. Octavia를 이용한 network
흐름도 octavia를 하나의 vm
으로 생각하면 똑같은 흐름으
로 진행됨.
1. LoadBalancer역시 각각 IP
와 포트에 따라서 보안 룰이
적용됨
16
17. Compute Node 1
Worker Instan
ce 1
Amphora instan
ce1
(Octavia vm)
Compute Node 2
Worker Instan
ce 2
Amphora instan
ce2
(Octavia vm)
Worker Instan
ce 3
Worker Instan
ce 4
eth0 eth0 eth0 eth0 eth0
qbr-xxx
qbr-xxx
qbr-xxx
qbr-xxx
qbr-xxx
tapxxx tapxxx tapxxx tapxxx tapxxx
qvb-xxx qvb-xxx qvb-xxx
qvb-xx
x
qvb-xx
x
br-int br-int
br-int
qvo-xxx
bond-srv
qvo-xxx
qvo-xx
x
qvo-xx
x
bond-srv bond-tun
bond-tun
eth0
qvo-xxx
qbr-xxx
tapxxx
qvb-xxx
qvo-xxx
br-ex br-tun br-ex br-tun br-ex br-tun
Tunneling(vxlan) Network
External (Service) Network
Ironic 서버
Bond-svr
시큐리티 그룹 브릿지
case1 case2
시큐리티 그룹 브릿지 시큐리티 그룹 브릿지 시큐리티 그룹 브릿지
1. Octavia를 이용한 network
흐름도 octavia를 하나의 vm
으로 생각하면 똑같은 흐름으
로 진행됨.
1. LoadBalancer역시 각각 IP
와 포트에 따라서 보안 룰이
적용됨
17
31. (virtenv) [root@test--master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 116m
loadbalanced-service LoadBalancer 10.233.59.140 xx.xx.10.239 80:30534/TCP 3m5s
(virtenv) [root@test--master01 ~]# curl xx.xx.10.239
Hostname: echoserver
Pod Information:
-no pod information available-
Server values:
server_version=nginx: 1.13.3 - lua: 10008
Request Information:
client_address=xx.xx.10.11
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://xx.xx.4.153:8080/
Request Headers:
accept=*/*
host=xx.xx.4.153
user-agent=curl/7.29.0
Request Body:
-no body in request-
(virtenv) [root@test--master01 ~]# kubectl delete svc loadbalanced-service
service "loadbalanced-service" deleted
31
32. 1. 컨트롤러 는 API 서버의 Ingress
이벤트 를 감시 합니다. 요구 사항을 충족하는
Ingress 리소스를 찾으면 AWS 리소스 생성을
시작합니다.
2. Ingress 리소스에 대한 ALB가 생성됩니다.
3. Ingress 리소스에 지정된 각 백엔드에
대해 TargetGroup 이 생성됩니다.
4. 수신 리소스 주석으로 지정된 모든 포트에
대해 리스너 가 생성됩니다. 포트를 지정하지
않으면 적절한 기본값 ( 80또는 443)이 사용됩니다.
5. Ingress 리소스에 지정된 각 경로에 대해 규칙 이
생성됩니다. 이렇게하면 특정 경로에 대한
트래픽이 TargetGroup생성 된 올바른 경로로
라우팅됩니다 .
32
33. apiVersion: apps/v1
kind: Deployment
----------
ports:
- containerPort: 8080
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-octavia-ingress
annotations:
kubernetes.io/ingress.class: "openstack"
octavia.ingress.kubernetes.io/internal: "false"
NAME CLASS HOSTS ADDRESS PORTS AGE
test-octavia-ingress <none> foo.bar.com 80 7s
((virtenv) [root@test--master01 osc]# kubectl get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
test-octavia-ingress <none> foo.bar.com xx.xx.83.104 80 100s
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /
backend:
serviceName: webserver
servicePort: 8080
33
34. (virtenv) [root@test--master01 osc]# IPADDRESS=xx.xx.83.104
(virtenv) [root@test--master01 osc]# curl -H "Host: foo.bar.com" http://$IPADDRESS/
Hostname: webserver-598ddccb79-gl8mn
Pod Information:
-no pod information available-
Server values:
server_version=nginx: 1.13.3 - lua: 10008
34
35. T. 02-516-0711 E. sales@osci.kr
서울시강남구테헤란로83길32,5층(삼성동,나라키움삼성동A빌딩)
THANK YOU