Dev > CaaS > Kubernetes > TKG > vSphere
warning
この記事は2年以上前に更新されたものです。情報が古くなっている可能性があります。

Tanzu Kubernetes GridでgVisorを使えるように設定するメモ。

gVisorを使うには,

Worker Nodeに https://gvisor.dev/docs/user_guide/install のドキュメントの通り、

  • runsc
  • containerd-shim-runsc-v1

をインストールし、

https://gvisor.dev/docs/user_guide/containerd/quick_start/ のドキュメントの通り、/etc/containerd/config.tomlを設定する必要があります。
また、RuntimeClassの定義も必要です。

これらをTanzu Kubernetes Cluster作成時に自動で行うために ytt のOverlayを作成します。

$HOME/.tanzu/tkg/providers/infrastructure-vsphere/ytt/vsphere-overlay.yaml に次の設定を記述または追記します。

#@ load("@ytt:overlay", "overlay")
#@ load("@ytt:data", "data")

#@overlay/match by=overlay.subset({"kind":"KubeadmConfigTemplate"})
---
spec:
  template:
    spec:
      preKubeadmCommands:
        #@overlay/append
        - curl -s https://storage.googleapis.com/gvisor/releases/release/latest/x86_64/runsc > runsc
        #@overlay/append
        - curl -s https://storage.googleapis.com/gvisor/releases/release/latest/x86_64/containerd-shim-runsc-v1 > containerd-shim-runsc-v1 
        #@overlay/append
        - chmod a+rx runsc containerd-shim-runsc-v1
        #@overlay/append
        - mv runsc containerd-shim-runsc-v1 /usr/local/bin
        #@overlay/append
        - echo "  [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]" >> /etc/containerd/config.toml
        #@overlay/append
        - echo "    runtime_type = \"io.containerd.runc.v2\"" >> /etc/containerd/config.toml
        #@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
        - systemctl restart containerd
---
apiVersion: addons.cluster.x-k8s.io/v1alpha3
kind: ClusterResourceSet
metadata:
  name: #@ "{}-gvisor-runtimeclass".format(data.values.CLUSTER_NAME)
  labels:
    cluster.x-k8s.io/cluster-name: #@ data.values.CLUSTER_NAME
spec:
  strategy: "ApplyOnce"
  clusterSelector:
    matchLabels:
      tkg.tanzu.vmware.com/cluster-name: #@ data.values.CLUSTER_NAME
  resources:
  - name: #@ "{}-gvisor-runtimeclass".format(data.values.CLUSTER_NAME)
    kind: Secret
---
apiVersion: v1
kind: Secret
metadata:
  name: #@ "{}-gvisor-runtimeclass".format(data.values.CLUSTER_NAME)
type: addons.cluster.x-k8s.io/resource-set
stringData:
  value: |
    apiVersion: node.k8s.io/v1beta1
    kind: RuntimeClass
    metadata:
      name: gvisor
    handler: runsc

この設定を加えてtanzu cluster createを実行し、クラスタを作成します。

RuntimeClassが設定されていることを確認します。

$ kubectl get runtimeclass
NAME     HANDLER   AGE
gvisor   runsc     14m

gVisorを有効にしたPodを作成します。

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: nginx-gvisor
spec:
  runtimeClassName: gvisor
  containers:
  - name: nginx
    image: nginx
EOF

PodがRunningになったら、コンテナ上でdmsgコマンドを実行します。

$ kubectl exec nginx-gvisor -- dmesg
[    0.000000] Starting gVisor...
[    0.238948] Reading process obituaries...
[    0.406397] Creating bureaucratic processes...
[    0.826157] Letting the watchdogs out...
[    1.272694] Forking spaghetti code...
[    1.424042] Adversarially training Redcode AI...
[    1.775609] Accelerating teletypewriter to 9600 baud...
[    2.098330] Consulting tar man page...
[    2.456185] Synthesizing system calls...
[    2.493476] Feeding the init monster...
[    2.516233] Conjuring /dev/null black hole...
[    2.545793] Ready!

gVisorが起動していることがわかります。

同様にコンテナ上でunameコマンドを実行します。

$ kubectl exec nginx-gvisor -- uname -a
Linux nginx-gvisor 4.4.0 #1 SMP Sun Jan 10 15:06:54 PST 2016 x86_64 GNU/Linux

ゲストカーネルのバージョンが4.4.0であることがわかります。

次のコマンド実行結果の通り、ホストカーネルのバージョン(4.19.189-5.ph3)と異なることがわかります。

$ kubectl get node -owide
NAME                              STATUS   ROLES                  AGE     VERSION            INTERNAL-IP     EXTERNAL-IP     OS-IMAGE                 KERNEL-VERSION   CONTAINER-RUNTIME
rapsberry-control-plane-p6dr2     Ready    control-plane,master   10m     v1.20.5+vmware.2   192.168.11.40   192.168.11.40   VMware Photon OS/Linux   4.19.189-5.ph3   containerd://1.4.4
rapsberry-md-0-7968b77845-mt2rz   Ready    <none>                 8m15s   v1.20.5+vmware.2   192.168.11.48   192.168.11.48   VMware Photon OS/Linux   4.19.189-5.ph3   containerd://1.4.4

$ kubectl -n tkg-system exec  kapp-controller-7776659df6-msz8v  -- uname -a
Linux rapsberry-control-plane-p6dr2 4.19.189-5.ph3 #1-photon SMP Thu May 13 16:00:29 UTC 2021 x86_64
Found a mistake? Update the entry.
Share this article: