Tanzu Kubernetes Grid(TKGm) v1.3.0 でgVisor を利用する
自分備忘録用メモ。TKGm v1.3.0 でgVisor を利用するための設定。
前提条件
- TKGm v1.3.0 がデプロイ済
- TKGm on vSphere 環境
Overlay ファイルの作成
tanzu
CLI をインストールし、Management Cluster 操作用端末の.tanzu/tkg/providers/infrastructure-vsphere/ytt
下に以下のファイルを作成します。
$ cat containerd-and-gvisor.yaml
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind":"KubeadmControlPlane"})
---
spec:
kubeadmConfigSpec:
preKubeadmCommands:
#@overlay/append
- echo ' [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]' >> /etc/containerd/config.toml
#@overlay/append
- echo ' endpoint = ["https://registry-1.docker.io"]' >> /etc/containerd/config.toml
#@overlay/append
- systemctl restart containerd
#@overlay/match by=overlay.subset({"kind":"KubeadmConfigTemplate"})
---
spec:
template:
spec:
preKubeadmCommands:
#@overlay/append
- curl -fsSL https://gvisor.dev/archive.key | sudo apt-key add -
#@overlay/append
- sudo add-apt-repository "deb [arch=amd64,arm64] https://storage.googleapis.com/gvisor/releases release main"
#@overlay/append
- sudo apt-get update && sudo apt-get install -y runsc
#@overlay/append
- echo ' [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runsc]' >> /etc/containerd/config.toml
#@overlay/append
- echo ' runtime_type = "io.containerd.runsc.v1"' >> /etc/containerd/config.toml
#@overlay/append
- echo ' [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runsc.options]' >> /etc/containerd/config.toml
#@overlay/append
- echo ' TypeUrl = "io.containerd.runsc.v1.options"' >> /etc/containerd/config.toml
#@overlay/append
- echo ' ConfigPath = "/etc/containerd/runsc.toml"' >> /etc/containerd/config.toml
#@overlay/append
- systemctl restart containerd
これでTKGm のWorkload Cluster のWorker ノードに対して、gVisor のインストールと設定が出来ます。上のOverlay はこちらを参考にして記述しています。
Workload Cluster の作成
以下のコマンドでWorkload Cluster:
gibson
を作成します。tanzu cluster create gibson --tkr v1.20.4---vmware.1-tkg.1 --file ~/.tanzu/tkg/clusterconfigs/cluster-gibson-config.yaml -v 6
暫くするとKubernetes クラスタが起動してきます。
$ k get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
gibson-control-plane-p8lxj Ready control-plane,master 18m v1.20.4+vmware.1 xxx.xxx.xx.xx xxx.xxx.xx.xx Ubuntu 20.04.2 LTS 5.4.0-66-generic containerd://1.4.3
gibson-md-0-7fd85cc74c-l55zd Ready <none> 17m v1.20.4+vmware.1 xxx.xxx.xx.xx xxx.xxx.xx.xx Ubuntu 20.04.2 LTS 5.4.0-66-generic containerd://1.4.3
Worker ノードにアクセスし、Overlay に記述した内容が反映されているか確認します。
ssh -i tkgm-lab capv@xxx.xxx.xx.xx
root@gibson-md-0-7fd85cc74c-l55zd:~# runsc --version
runsc version release-20210419.0
spec: 1.0.2
root@gibson-md-0-7fd85cc74c-l55zd:~# cat /etc/containerd/config.toml
## template: jinja
# Use config version 2 to enable new configuration fields.
1 apiVersion: node.k8s.io/v1
# Config file is parsed as version 1 by default.
version = 2
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "projects.registry.vmware.com/tkg/pause:3.2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runsc]
runtime_type = "io.containerd.runsc.v1"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runsc.options]
TypeUrl = "io.containerd.runsc.v1.options"
ConfigPath = "/etc/containerd/runsc.toml"
大丈夫そうですね。
Runtime Class の作成
こちらのドキュメントを参考にRuntime Class を利用するためのマニフェストファイルを作成し、デプロイします。
$ cat runtimeclass-gvisor.yaml
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: gvisor
handler: runsc
k apply -f runtimeclass-gvisor.yaml
$ k get runtimeclasses.node.k8s.io
NAME HANDLER AGE
gvisor runsc 6s
Runtime Class を利用したPod の作成
以下のマニフェストファイルを利用し、Pod をデプロイし、ちゃんと指定したRuntime Class が利用出来ているか確認します。
k run gvisor-pod --image=nginx -oyaml --dry-run=client > gvisor-pod.yaml
vim gvisor-pod.yaml
$ cat gvisor-pod.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: gvisor-pod
name: gvisor-pod
spec:
runtimeClassName: gvisor # add
containers:
- image: nginx
name: gvisor-pod
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
k apply -f gvisor-pod.yaml
Pod にアクセスして確認してみます。
$ k exec gvisor-pod -- uname -a
Linux gvisor-pod 4.4.0 #1 SMP Sun Jan 10 15:06:54 PST 2016 x86_64 GNU/Linux
$ k exec gvisor-pod -- dmesg
[ 0.000000] Starting gVisor...
[ 0.174324] Creating bureaucratic processes...
[ 0.362738] Preparing for the zombie uprising...
[ 0.704420] Recruiting cron-ies...
[ 0.984414] Constructing home...
[ 1.451485] Moving files to filing cabinet...
[ 1.486690] Reading process obituaries...
[ 1.671563] Creating cloned children...
[ 2.046006] Adversarially training Redcode AI...
[ 2.379471] Digging up root...
[ 2.451734] Granting licence to kill(2)...
[ 2.801847] Ready!
大丈夫そうですね。
一方、Runtime Class を指定しないで作成したPod に関しては以下の様な出力になります。
k run test-native --image=nginx --restart=Never
k exec -it test-native -- /bin/sh
$ uname -a
Linux test-native 5.4.0-66-generic #74-Ubuntu SMP Wed Jan 27 22:54:38 UTC 2021 x86_64 GNU/Linux
$ dmesg
[ 0.000000] Linux version 5.4.0-66-generic (buildd@lgw01-amd64-039) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) #74-Ubuntu SMP Wed Jan 27 22:54:38 UTC 2021 (Ubuntu 5.4.0-66.74-generic 5.4.86)
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-66-generic root=UUID=a13dacfb-8bb2-47b8-92fa-ce76e3f4da5c ro quiet
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] Hygon HygonGenuine
[ 0.000000] Centaur CentaurHauls
[ 0.000000] zhaoxin Shanghai
...(SNIP)...
- リンクを取得
- ×
- メール
- 他のアプリ