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