CloudNative Days Spring 2021 ONLINE キーノートでの発表資料です。
https://event.cloudnativedays.jp/cndo2021/talks/1071
本セッションでは、DockerとKubernetesのもつ基本的な機能の概要を、コンテナの仕組みをふまえつつイラストを用いて紹介していきます。一般にあまり焦点をあてて取り上げられることは多くありませんが、コンテナの作成や管理を担う低レベルなソフトウェア「コンテナランタイム」も本セッションの中心的なトピックのひとつです。
本セッションは、拙著「イラストで分かるDockerとKubernetes」(技術評論社)の内容を参考にしています。
https://www.amazon.co.jp/dp/4297118378
2. Copyright(c)2021 NTT Corp. All Rights Reserved
GitHub:@ktock / Twitter:@TokunagaKohei
containerd
containerd Stargz Snapshotter
Container Runtime Meetup
3. Copyright(c)2021 NTT Corp. All Rights Reserved
KubeCon+CloudNative Con NA Virtual 2020 22,816
CNCF SURVEY 2020( 3 ) [2]
[2] https://www.cncf.io/wp-content/uploads/2020/11/CNCF_Survey_Report_2020.pdf
[1] https://www.cncf.io/wp-content/uploads/2020/12/KubeCon_NA_20_Virtual_Report.pdf
KubeCon + CloudNativeCon North America 2020
- Virtual Conference Transparency Report. CNCF[1]
IT
l
l
l
l
Kubernetes
91%
Kubernetes
92%
10. Copyright(c)2021 NTT Corp. All Rights Reserved
CNCF OCI
Linux Foundation
OSS 0
KubeCon+CloudNative
Con 0
1
Linux Foundation
0
https://www.cncf.io https://opencontainers.org
22. Copyright(c)2021 NTT Corp. All Rights Reserved
Kubernetes
Kubernetes API
2
2
Docker Hub
pull
kubectl apply
kubectl get
kubectl describe
kubectl
( )
23. Copyright(c)2021 NTT Corp. All Rights Reserved
(
P =
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
https://kubernetes.io/docs/concepts/workloads/controllers/
deployment/#creating-a-deployment
P 3 )
k8s 3
P
P
24. Copyright(c)2021 NTT Corp. All Rights Reserved
Pod
192.168.100.10
Pod
4
Pod
localhost
Pod
IP
N
I
C
Pod 2
l
2 4
l
4
25. Copyright(c)2021 NTT Corp. All Rights Reserved
Pod
vol
1
vol
0
0
2
2
5
1
Deployment StatefulSet
DaemonSet Job/CronJob
26. Copyright(c)2021 NTT Corp. All Rights Reserved
Deployment
Pod
Deployment
Pod : 2
Deployment
Pod : 2
Pod
Deployment
Pod : 2
27. Copyright(c)2021 NTT Corp. All Rights Reserved
Deployment
Deployment
Pod
Deployment
Pod
Deployment
Pod
Deployment
Deployment
Pod 7
2
28. Copyright(c)2021 NTT Corp. All Rights Reserved
Pod
192.168.1.10:8080
192.168.1.11:80
192.168.1.12:80
192.168.100.11:8080 192.168.100.10:80
l Pod / IP
l
Pod2
l Pod
IP
l 2IP 8 Pod 2
Service
Service
Pod
Service A Service B
29. Copyright(c)2021 NTT Corp. All Rights Reserved
Service Pod
NodePort
Service
LoadBalancer
Service
Ingress
9
Service Pod
9
Service 2
Pod
URL
Service
ClusterIP
Service
Pod service
service
IP
30. Copyright(c)2021 NTT Corp. All Rights Reserved
Kubernetes
3
Kubernetes
3
Kubernetes3
0
Pod
3
ConfigMap/Secrets Volume PV/PVC Custom Resource Definition
And more….
32. Copyright(c)2021 NTT Corp. All Rights Reserved
CRI
OCI
kubelet kubelet
CRI
OCI
kubelet
1 2 3
Kubernetes kubelet Pod
l 3 2 kube-scheduler Pod 3 2
l kubelet Pod
• API kube-apiserver Pod
kubectl apply
33. Copyright(c)2021 NTT Corp. All Rights Reserved
OCI
CRI
l Kubelet pull
Pod
l Container Runtime Interface CRI
3
• containerd CNCF graduated project
• CRI-O CNCF sandbox project
CRI
kubelet
CRI
pull
Docker kubelet
• CRI 3 kubelet Docker API
• Kubernetes v1.20 kubelet Docker
kubelet Docker
34. Copyright(c)2021 NTT Corp. All Rights Reserved
OCI
OCI
CRI
kubelet
CRI
l Docker OCI
l OCI OCI Runtime Spec
l runc OCI 4 3
OCI
OCI
runc Kata Containers gVisor
OCI 4
Namespace Linux
Open Infrastructure
Foundation
Pod
Google
app
runc
OS
agent
C
C
C
VM
(sentry)
app
35. Copyright(c)2021 NTT Corp. All Rights Reserved
runc namespace
1
2 3
4 5
eth0
1
2 3
eth0
eth
0
eth0 eth0
1
2 3
4 5
1
2 3
PID namespace
namespace
PID=1
Mount namespace
namespace mount
unmount ”/”
3 namespace
Network namespace
namespace
A B
And more…
namespace 5
36. Copyright(c)2021 NTT Corp. All Rights Reserved
runc cgroup C
m 3 y
v
,
: m 3 sr
io ,
, v
( ( ( ) ( )
P C
p , sr 1
p ,
l io cg 1CPU 1 m
l c d Docker p c cg 6/dev/sda
cgroup v2 6Docker v20.10 )1 u cgroup v2
e ,
37. Copyright(c)2021 NTT Corp. All Rights Reserved
Docker
Kubernetes
Docker Kubernetes
l 7
l
l Build Ship Run7
l 7
l 3
l
l CRI OCI 7
l runc namespace cgroup Linux 7