Container Runtime Sandboxes
最后更新于
最后更新于
technical overview : container and system calls\
root@master:~# k run pod --image=nginx
pod/pod created
root@master:~# k get pod
NAME READY STATUS RESTARTS AGE
pod 1/1 Running 0 9s
root@master:~# k exec pod -ti -- bash
root@pod:/#
root@pod:/# uname -r
4.4.0-198-generic
root@pod:/# exit
exit
root@master:~# uname -r
4.4.0-142-generic
root@master:~# strace uname -r
execve("/bin/uname", ["uname", "-r"], [/* 26 vars */]) = 0
brk(NULL) = 0x163a000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=47425, ...}) = 0
mmap(NULL, 47425, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fbc1c8b3000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\35\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2030928, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbc1c8b1000
mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbc1c2a5000
mprotect(0x7fbc1c48c000, 2097152, PROT_NONE) = 0
mmap(0x7fbc1c68c000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7fbc1c68c000
mmap(0x7fbc1c692000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fbc1c692000
close(3) = 0
arch_prctl(ARCH_SET_FS, 0x7fbc1c8b2540) = 0
mprotect(0x7fbc1c68c000, 16384, PROT_READ) = 0
mprotect(0x606000, 4096, PROT_READ) = 0
mprotect(0x7fbc1c8bf000, 4096, PROT_READ) = 0
munmap(0x7fbc1c8b3000, 47425) = 0
brk(NULL) = 0x163a000
brk(0x165b000) = 0x165b000
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2999664, ...}) = 0
mmap(NULL, 2999664, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fbc1bfc8000
close(3) = 0
uname({sysname="Linux", nodename="master", ...}) = 0
fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0
write(1, "4.4.0-142-generic\n", 184.4.0-142-generic
) = 18
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
\
参考链接: https://kubernetes.io/zh/docs/tasks/debug-application-cluster/crictl/ Kubernetes crictl
root@master:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
daa4fcda3062 calico/node "start_runit" 56 minutes ago Up 56 minutes k8s_calico-node_calico-node-ngbm8_kube-system_837fbf7e-0060-4f5c-bd62-fdecf5f7e334_0
47f0bd50cfb9 10cc881966cf "/usr/local/bin/kube…" 2 days ago Up 2 days k8s_kube-proxy_kube-proxy-lfkn9_kube-system_08f4f57e-d10b-4efe-99d7-33509c6492b0_0
bc34cf5b8061 k8s.gcr.io/pause:3.2 "/pause" 2 days ago Up 2 days k8s_POD_calico-node-ngbm8_kube-system_837fbf7e-0060-4f5c-bd62-fdecf5f7e334_0
e687794da368 k8s.gcr.io/pause:3.2 "/pause" 2 days ago Up 2 days k8s_POD_kube-proxy-lfkn9_kube-system_08f4f57e-d10b-4efe-99d7-33509c6492b0_0
8c953da2a0f3 3138b6e3d471 "kube-scheduler --au…" 2 days ago Up 2 days k8s_kube-scheduler_kube-scheduler-master_kube-system_81d2d21449d64d5e6d5e9069a7ca99ed_0
2597fa68a300 b9fa1895dcaa "kube-controller-man…" 2 days ago Up 2 days k8s_kube-controller-manager_kube-controller-manager-master_kube-system_360cd07520ba8dce55b5d403c66acf83_0
27b65081b111 ca9843d3b545 "kube-apiserver --ad…" 2 days ago Up 2 days k8s_kube-apiserver_kube-apiserver-master_kube-system_ee31a01764366141f7c85e23f94828f8_0
ad3166e92a06 0369cf4303ff "etcd --advertise-cl…" 2 days ago Up 2 days k8s_etcd_etcd-master_kube-system_77699ae6105937dbb48c0a720843ce8e_0
794740e27507 k8s.gcr.io/pause:3.2 "/pause" 2 days ago Up 2 days k8s_POD_kube-scheduler-master_kube-system_81d2d21449d64d5e6d5e9069a7ca99ed_0
c666f003a0ad k8s.gcr.io/pause:3.2 "/pause" 2 days ago Up 2 days k8s_POD_kube-controller-manager-master_kube-system_360cd07520ba8dce55b5d403c66acf83_0
1fb5d789dd68 k8s.gcr.io/pause:3.2 "/pause" 2 days ago Up 2 days k8s_POD_kube-apiserver-master_kube-system_ee31a01764366141f7c85e23f94828f8_0
22a1ebc8d2d5 k8s.gcr.io/pause:3.2 "/pause" 2 days ago Up 2 days k8s_POD_etcd-master_kube-system_77699ae6105937dbb48c0a720843ce8e_0
root@master:~# crictl ps
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT POD ID
daa4fcda30622 calico/node@sha256:04b8a7be6a277000ea4ae12f32692b2f5532cd095fe5d6b6e3ff876d750c336a About an hour ago Running calico-node 0 bc34cf5b8061f
47f0bd50cfb95 10cc881966cfd 2 days ago Running kube-proxy 0 e687794da3683
8c953da2a0f34 3138b6e3d4712 2 days ago Running kube-scheduler 0 794740e275074
2597fa68a300d b9fa1895dcaa6 2 days ago Running kube-controller-manager 0 c666f003a0ad6
27b65081b1114 ca9843d3b5454 2 days ago Running kube-apiserver 0 1fb5d789dd685
ad3166e92a063 0369cf4303ffd 2 days ago Running etcd 0 22a1ebc8d2d50
root@master:~#
root@master:~# crictl pods
POD ID CREATED STATE NAME NAMESPACE ATTEMPT
bc34cf5b8061f 2 days ago Ready calico-node-ngbm8 kube-system 0
e687794da3683 2 days ago Ready kube-proxy-lfkn9 kube-system 0
794740e275074 2 days ago Ready kube-scheduler-master kube-system 0
c666f003a0ad6 2 days ago Ready kube-controller-manager-master kube-system 0
1fb5d789dd685 2 days ago Ready kube-apiserver-master kube-system 0
22a1ebc8d2d50 2 days ago Ready etcd-master kube-system 0
root@master:~#
参考链接: https://katacontainers.io/ https://github.com/kata-containers/kata-containers https://www.hi-linux.com/posts/23259.html Kubernetes kata-container 介绍 \
参考链接: https://github.com/google/gvisor https://gvisor.dev/ https://gvisor.dev/docs/\
参考链接: https://kubernetes.io/docs/concepts/containers/runtime-class/\
root@master:~/cks/runtimeclass# vim rc.yaml
apiVersion: node.k8s.io/v1beta1
kind: RuntimeClass
metadata:
name: gvisor
handler: runsc
root@master:~/cks/runtimeclass# k -f rc.yaml create
runtimeclass.node.k8s.io/gvisor created
root@master:~/cks/runtimeclass# k get runtimeclass
NAME HANDLER AGE
gvisor runsc 8s
root@master:~/cks/runtimeclass# k run gvisor --image=nginx -oyaml --dry-run=client > pod.yaml
root@master:~/cks/runtimeclass# vim pod.yaml
root@master:~/cks/runtimeclass# k get pods
NAME READY STATUS RESTARTS AGE
gvisor 1/1 ContainerCreating 0 19h
root@master:~# k describe pods gvisor
..........
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedCreatePodSandBox 47h (x1778 over 2d19h) kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = RuntimeHandler "runsc" not supported
需要接下来的步骤
root@master:~# bash <(curl -s https://raw.githubusercontent.com/killer-sh/cks-course-environment/master/course-content/microservice-vulnerabilities/container-runtimes/gvisor/install_gvisor.sh)
或者执行
root@master:~/cks/runtimeclass# vim install_gvisor.sh
#!/usr/bin/env bash
# IF THIS FAILS then you can try to change the URL= further down from latest to a specific release
# https://gvisor.dev/docs/user_guide/install
# gvisor
sudo apt-get update && \
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# install from web
{
set -e
URL=https://storage.googleapis.com/gvisor/releases/release/latest
# URL=https://storage.googleapis.com/gvisor/releases/release/20201130.0 # try this version instead if latest doesn't work for you
wget ${URL}/runsc ${URL}/runsc.sha512 \
${URL}/gvisor-containerd-shim ${URL}/gvisor-containerd-shim.sha512 \
${URL}/containerd-shim-runsc-v1 ${URL}/containerd-shim-runsc-v1.sha512
sha512sum -c runsc.sha512 \
-c gvisor-containerd-shim.sha512 \
-c containerd-shim-runsc-v1.sha512
rm -f *.sha512
chmod a+rx runsc gvisor-containerd-shim containerd-shim-runsc-v1
sudo mv runsc gvisor-containerd-shim containerd-shim-runsc-v1 /usr/local/bin
}
# containerd enable runsc
mkdir -p /etc/containerd
cat > /etc/containerd/config.toml <<EOF
disabled_plugins = ["restart"]
[plugins.linux]
shim_debug = true
[plugins.cri.containerd.runtimes.runsc]
runtime_type = "io.containerd.runsc.v1"
EOF
# crictl should use containerd as default
{
cat <<EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
EOF
}
systemctl restart containerd
# kubelet should use containerd
{
cat <<EOF | sudo tee /etc/default/kubelet
KUBELET_EXTRA_ARGS="--container-runtime remote --container-runtime-endpoint unix:///run/containerd/containerd.sock"
EOF
}
systemctl daemon-reload
systemctl restart kubelet
root@master:~/cks/runtimeclass# bash install_gvisor.sh
root@master:~/cks/runtimeclass# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: active (running) since Thu 2021-05-13 20:30:54 PDT; 4min 42s ago
Docs: https://kubernetes.io/docs/home/
Main PID: 24673 (kubelet)
Tasks: 14
Memory: 93.2M
CPU: 7.489s
CGroup: /system.slice/kubelet.service
└─24673 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet