So integrieren Sie Kata in einen Kubernetes-Cluster

Kubernetes-Cluster-Integrationskata

Installieren Sie den Kubernetes-Cluster

Es ist sehr praktisch, einen Cluster mit Kubeadm zu installieren. Weitere Informationen finden Sie unter Installieren eines k8s-Clusters in Ubuntu .

Sie können auch direkt auf die offizielle Dokumentation verweisen: https://kubernetes.io/docs/setup/produktionsumgebung/tools/kubeadm/install-kubeadm/ .

  • Überprüfen Sie die installierte Kubernetes-Version
$ kubectl version

Client Version: version.Info{
    
    Major:"1", Minor:"17", GitVersion:"v1.17.9", GitCommit:"4fb7ed12476d57b8437ada90b4f93b17ffaeed99", GitTreeState:"clean", BuildDate:"2020-07-15T16:18:16Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{
    
    Major:"1", Minor:"17", GitVersion:"v1.17.9", GitCommit:"4fb7ed12476d57b8437ada90b4f93b17ffaeed99", GitTreeState:"clean", BuildDate:"2020-07-15T16:10:45Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

Installieren Sie die Kata- Befehlszeilentools

Nehmen Sie als Beispiel das CentOS-Betriebssystem:

$ source /etc/os-release
$ yum -y install yum-utils
$ ARCH=$(arch)
$ BRANCH="${BRANCH:-master}"
$ yum-config-manager --add-repo "http://download.opensuse.org/repositories/home:/katacontainers:/releases:/${ARCH}:/${BRANCH}/CentOS_${VERSION_ID}/home:katacontainers:releases:${ARCH}:${BRANCH}.repo"
$ yum -y install kata-runtime kata-proxy kata-shim

In Ubuntu ( siehe offizielle Dokumentation ):

$ ARCH=$(arch)
$ BRANCH="${BRANCH:-master}"
$ 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

Prüfen Sie, ob die Hardware Kata unterstützt

Die Hardwareanforderungen von Kata müssen eine der folgenden Bedingungen erfüllen:

  • Intel VT-x-Technologie.
  • ARM Hyp-Modus (Virtualisierungserweiterung).
  • IBM Power Systems.
  • IBM Z-Mainframes.

Führen Sie nach der Installation von Kata-Runtime den Erkennungsbefehl aus:

$ kata-runtime kata-check

System is capable of running Kata Containers
System can currently create Kata Containers

Die Ausgabe hier zeigt an, dass die Betriebsumgebung Kata Containers unterstützt

Docker konfigurieren und testen ( offizielle Dokumentation )

  • Konfigurieren Sie Kata-Laufzeitparameter
$ vim /etc/docker/daemon.json

Fügen Sie den folgenden Inhalt hinzu. Runc wird weiterhin standardmäßig verwendet, Kata kann jedoch durch Angabe des Laufzeitparameters verwendet werden.

{
    
    
  "runtimes": {
    
    "kata-runtime": {
    
    
      "path": "/usr/bin/kata-runtime"}
  }}

Starten Sie den Docker-Dienst neu

$ systemctl daemon-reload
$ systemctl restart docker

Testen Sie, ob Kata erfolgreich installiert wurde

$ docker run --runtime=kata-runtime  busybox uname -a

Linux 249a23f53475 5.4.60-65.1.container #1 SMP Thu Jan 1 00:00:00 UTC 1970 x86_64 GNU/Linux

$  docker run busybox uname -a

Linux b4812ed8990c 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 GNU/Linux

Die vom Kata-Runtime-Container verwendete Kernelversion unterscheidet sich von der des Hosts, was bedeutet, dass die Kata-Runtime-Konfiguration erfolgreich ist.

Konfigurieren Sie Kubelet

  • Konfigurationsdatei hinzufügen
$ mkdir -p  /etc/systemd/system/kubelet.service.d/
$ cat << EOF | sudo tee  /etc/systemd/system/kubelet.service.d/0-containerd.conf
[Service]                                                 
Environment="KUBELET_EXTRA_ARGS=--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"EOF
  • Neustart wird wirksam
$ systemctl daemon-reload
$ systemctl restart kubelet

Hier kommt Containerd zum Einsatz. Bei Verwendung von CRI-O ist die Konfiguration anders.

Stellen Sie Kata-Laufzeit für Kubernetes bereit

Kata-Runtime kann durch direktes Erstellen eines Containers verwendet werden. Aber wie teilen wir Kubernetes im Cluster mit, welche Workloads Kata-Runtime verwenden müssen? Je nach Version stellt Kata unterschiedliche Methoden zur Verfügung.

Zuerst müssen Sie die Containerd-Konfigurationsdatei generieren

$ containerd config default > /etc/containerd/config.toml
  • RuntimeClass-Methode

Für diese Methode gelten Anforderungen für verwandte Komponentenversionen:

Kata Containers v1.5.0 or above (including 1.5.0-rc)
Containerd v1.2.0 or above
Kubernetes v1.12.0 or above

Fügen Sie in der Konfigurationsdatei config.toml den folgenden Inhalt hinzu:

    [plugins.cri.containerd]
      no_pivot = false[plugins.cri.containerd.runtimes]
      [plugins.cri.containerd.runtimes.runc]
         runtime_type = "io.containerd.runc.v1"
         [plugins.cri.containerd.runtimes.runc.options]
           NoPivotRoot = false
           NoNewKeyring = false
           ShimCgroup = ""
           IoUid = 0
           IoGid = 0
           BinaryName = "runc"
           Root = ""
           CriuPath = ""
           SystemdCgroup = false
      [plugins.cri.containerd.runtimes.kata]
         runtime_type = "io.containerd.kata.v2"
      [plugins.cri.containerd.runtimes.katacli]
         runtime_type = "io.containerd.runc.v1"
         [plugins.cri.containerd.runtimes.katacli.options]
           NoPivotRoot = false
           NoNewKeyring = false
           ShimCgroup = ""
           IoUid = 0
           IoGid = 0
           BinaryName = "/usr/bin/kata-runtime"
           Root = ""
           CriuPath = ""
           SystemdCgroup = false

Hier wird die Kata in [plugins.cri.containerd.runtimes.kata] als RuntimeClass-Handler-Schlüsselwort verwendet.

  • Verwendung von untrusted_workload_runtime

Für Umgebungen, die die oben genannten Versionsanforderungen nicht erfüllen, kann die vorherige Methode verwendet werden.

Fügen Sie der Konfigurationsdatei den folgenden Inhalt hinzu:

    [plugins.cri.containerd.untrusted_workload_runtime]
      runtime_type = "io.containerd.runtime.v1.linux"
      runtime_engine = "/usr/bin/kata-runtime"

Abschließend müssen Sie Containerd neu starten.

$ containerd systemctl daemon-reload
$ systemctl restart containerd

Kopieren Sie dann die Kubelet-Konfigurationsdatei in das Benutzerverzeichnis

sudo mkdir -p /home/xrw/.kube && sudo cp /etc/kubernetes/admin.conf /home/xrw/.kube/config

Kata-Laufzeit verwenden

RuntimeClass-Methode

  • RuntimeClass erstellen

kata-runtime.yaml

kind: RuntimeClass
apiVersion: node.k8s.io/v1beta1
metadata:
  name: kata-containers
handler: kata

Sie können auch eine RuntimeClass für runc erstellen

$ kubectl get runtimeclass

NAME              CREATED AT
kata-containers   2020-08-30

Erstellen Sie die Datei kata-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kata-nginx
spec:
  runtimeClassName: kata-containers
  containers:
  - name: nginx
    image: nginx
    ports:- containerPort: 80
$ kubectl apply -f kata-pod.yaml

Überprüfen Sie, ob die Ladung von Kata ausgeführt wird

# 获取pod中的Container ID 
$  sudo kubectl decribe pod kata-nginx
# 查看容器的容器运行时是不是kata
$  sudo crictl inspect [Container ID]

untrusted_workload_runtime verwendet Annotationen, um dem Kubernetes-Cluster mitzuteilen, welche Workloads Kata-Runtime verwenden müssen.

annotations:
  io.kubernetes.cri.untrusted-workload: "true"
下面是一个示例 kata-pod-untrusted.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kata-nginx-untrusted
  annotations:
    io.kubernetes.cri.untrusted-workload: "true"
spec:
  containers:
  - name: nginx
    image: nginx
    ports:- containerPort: 80
$ kubectl apply -f kata-pod-untrusted.yaml

Supongo que te gusta

Origin blog.csdn.net/qq_26356861/article/details/125766244
Recomendado
Clasificación