メモ:Tanzu Kubernetes Grid(TKGm) v1.3.0 でkata-container を利用する

自分備忘録用メモ。TKGm v1.3.0 でkata-container を利用出来るかどうかの確認。


前提条件

  • TKGm v1.3.0 がデプロイ済
  • TKGm on vSphere 環境


Hardware virtualization の有効化

vspheremachines, vspheremachinetemplates 当たりをちゃんと設定すると、TKGm Workload Cluster 作成時に有効化出来ると思うのですが、kubectl edit では上手く変更出来なかったため、先ずは利用出来るかどうかの確認として、TKGm Workload Cluster のWorker ノードを一度Power Off し、vCenter からHardware virtualization を有効化 -> Power On しています。


パッケージのインストール

Worker ノードにログインし、こちら「How to use Kata Containers and Containerd」を参考にしつつ、パッケージをインストールしていきます。
$ k get nodes
NAME                           STATUS   ROLES                  AGE    VERSION
gibson-control-plane-p8lxj     Ready    control-plane,master   7d3h   v1.20.4+vmware.1
gibson-md-0-7fd85cc74c-l55zd   Ready    <none>                 7d3h   v1.20.4+vmware.1
ssh -i .ssh/tkgm-lab capv@xxx.xxx.xxx
sudo su -
$ lsmod |grep kvm
kvm_intel             282624  0
kvm                   663552  1 kvm_intel
$ cat /proc/cpuinfo
processor	: 0
...(SNIP)...
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xsaves arat md_clear flush_l1d arch_capabilities
...(SNIP)...
power management:

processor	: 1
...(SNIP)...
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xsaves arat md_clear flush_l1d arch_capabilities
...(SNIP)...
BRANCH="${BRANCH:-master}"
ARCH=$(arch)
sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/katacontainers:/releases:/${ARCH}:/${BRANCH}/xUbuntu_$(lsb_release -rs)/ /' > /etc/apt/sources.list.d/kata-containers.list"
curl -sL  http://download.opensuse.org/repositories/home:/katacontainers:/releases:/${ARCH}:/${BRANCH}/xUbuntu_$(lsb_release -rs)/Release.key | sudo apt-key add -
sudo -E apt-get update
sudo -E apt-get -y install kata-runtime kata-proxy kata-shim
$ kata-runtime version
kata-runtime  : 1.13.0-alpha0
   commit   : <<unknown>>
   OCI specs: 1.0.1-dev

containerd の設定ファイルも以下の様に修正します。
$ cat /etc/containerd/config.toml
## template: jinja

# Use config version 2 to enable new configuration fields.
# 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"
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata]
    runtime_type = "io.containerd.kata.v2"

設定が完了したので、containerd をリスタートさせてみます。
systemctl restart containerd
$ systemctl status containerd
● containerd.service - containerd container runtime
     Loaded: loaded (/etc/systemd/system/containerd.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/containerd.service.d
             └─boot-order.conf, max-tasks.conf, memory-pressure.conf
     Active: active (running) since Mon 2021-05-17 12:49:34 UTC; 1s ago
       Docs: https://containerd.io
    Process: 18022 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 18023 (containerd)
      Tasks: 115
     Memory: 277.4M
...(SNIP)...

上手く動いているようです。

RuntimeClass の作成

kata-container を利用するためのRuntimClass を作成します。
$ cat runtimeclass-kata.yaml
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  name: kata
handler: kata

kubectl apply します。
k apply -f runtimeclass-kata.yaml

RuntimeClass が作成されました。
$ k get runtimeclasses
NAME     HANDLER   AGE
gvisor   runsc     7d2h
kata     kata      5s

kata-container を利用する、Pod をデプロイします。
k run kata-pod1 --image=nginx:1.17.10 --dry-run=client -oyaml > kata-pod1.yaml
k run kata-pod2 --image=nginx:1.17.10 --dry-run=client -oyaml > kata-pod2.yaml
vim kata-pod1.yaml
vim kata-pod2.yaml
$ cat kata-pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: kata-pod1
  name: kata-pod1
spec:
  runtimeClassName: kata
  containers:
  - image: nginx:1.17.10
    name: kata-pod1
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
$ cat kata-pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: kata-pod2
  name: kata-pod2
spec:
  runtimeClassName: kata
  containers:
  - image: nginx:1.17.10
    name: kata-pod2
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
k apply -f kata-pod1.yaml
k apply -f kata-pod2.yaml

RuntimeClass としてkata-container を指定したPod はちゃんと動いてはいるようです。
$ k get pods
NAME         READY   STATUS    RESTARTS   AGE
gvisor-pod   1/1     Running   4          2m27s
kata-pod1    1/1     Running   6          4m53s
kata-pod2    1/1     Running   6          3m17s

Worer ノードで確認

Worker ノードにログインし確認してみます。kata-container を利用し、Pod が稼働しているようです。
$ kata-runtime list
ID                                                                 PID         STATUS      BUNDLE                                                                                                                  CREATED                          OWNER
7ae0ec37c548dc8d955b0cd3339cc4c9aaa818148002309520ce824be5dbb55c   -1          running     /run/containerd/io.containerd.runtime.v2.task/k8s.io/7ae0ec37c548dc8d955b0cd3339cc4c9aaa818148002309520ce824be5dbb55c   2021-05-17T13:05:08.779997823Z   #0
656b421e467eb37cffdfb99b2f9db9819ae7216f22ee18019535619eef36a92b   -1          running     /run/containerd/io.containerd.runtime.v2.task/k8s.io/656b421e467eb37cffdfb99b2f9db9819ae7216f22ee18019535619eef36a92b   2021-05-17T13:08:23.345216807Z   #0
1523a460771c07a7e87805029dfc0323938ccc4ef57f20fe9ff732494d8bd50d   -1          running     /run/containerd/io.containerd.runtime.v2.task/k8s.io/1523a460771c07a7e87805029dfc0323938ccc4ef57f20fe9ff732494d8bd50d   2021-05-17T13:03:32.423747066Z   #0
fc6786de0d339cfe7fb015ddaede57a2b9b2c1d42859589939f707deac6bebe1   -1          running     /run/containerd/io.containerd.runtime.v2.task/k8s.io/fc6786de0d339cfe7fb015ddaede57a2b9b2c1d42859589939f707deac6bebe1   2021-05-17T13:08:08.89359102Z    #0

このブログの人気の投稿