


Das Bild von ECR zu EKS funktioniert nicht, da der resultierende Pod immer 0/2 ist
Als der PHP-Editor Strawberry das Problem der Bereitstellung von Containeranwendungen löste, stellte er fest, dass das Image von ECR (Amazon Elastic Container Registry) zu EKS (Amazon Elastic Kubernetes Service) nicht richtig funktionierte. Insbesondere ist der generierte Pod immer 0/2, was bedeutet, dass der Container nicht normal gestartet oder ausgeführt werden kann. Dieses Problem kann viele Aspekte umfassen, darunter Probleme mit dem Image selbst, Fehler in der Containerkonfiguration oder Einschränkungen der Netzwerkumgebung. Im Folgenden werden einige gängige Lösungen im Detail vorgestellt, um Entwicklern bei der schnellen Lösung dieses Problems zu helfen.
Frageninhalt
Ich habe fast alles versucht, um die Dinge auf den richtigen Weg zu bringen, aber es gelingt mir immer noch nicht, meinen Pod in einen brauchbaren Zustand zu versetzen.
Ich habe also eine einfache App in Go geschrieben.
Ich habe Docker build --tag docker-gs-ping .
verwendet, um ein Image des Programms zu erstellen
Dann habe ich versucht, denselben Befehl im Container auszuführen docker run --publish 8080:8080 docker-gs-ping
Dann möchte ich mein Bild in Amazon ECR speichern, dafür habe ich ein Repository in ECR erstellt.
Nachdem ich das Repository erstellt habe, habe ich die Bilder markiert, die in meinem lokalen Verzeichnis vorhanden sind.
docker tag f49366b7f534 ****40312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest
f49366b7f534
是我本地的图像标签。 docker-gs-ping
ist der Repository-Name in ecr.
Dann habe ich das getaggte Bild mit dem Befehl auf ecr hochgeladen.
docker push ****40312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest
Ich bin mir nicht sicher, ob der obige Befehl das getaggte Bild oder das aktuelle Bild von lokal überträgt, da es keine Möglichkeit gibt, das spezifische Bild anzugeben, das an ecr übertragen werden soll.
Das aktuelle Ergebnis ist
Nachdem ich die oben genannten Schritte ausgeführt habe, habe ich ein VPS mit den folgenden Dateien und Befehlen erstellt:
eks-Stapel:
--- awstemplateformatversion: '2010-09-09' description: 'amazon eks cluster' parameters: clustername: type: string default: my-eks-cluster numberofworkernodes: type: number default: 1 workernodesinstancetype: type: string default: t2.micro kubernetesversion: type: string default: 1.22 resources: ########################################### ## roles ########################################### eksrole: type: aws::iam::role properties: rolename: my.eks.cluster.role assumerolepolicydocument: version: "2012-10-17" statement: - effect: allow principal: service: - eks.amazonaws.com action: - sts:assumerole path: / managedpolicyarns: - "arn:aws:iam::aws:policy/amazoneksclusterpolicy" eksnoderole: type: aws::iam::role properties: rolename: my.eks.node.role assumerolepolicydocument: version: "2012-10-17" statement: - effect: allow principal: service: - ec2.amazonaws.com action: - sts:assumerole path: / managedpolicyarns: - "arn:aws:iam::aws:policy/amazoneksworkernodepolicy" - "arn:aws:iam::aws:policy/amazonec2containerregistryreadonly" - "arn:aws:iam::aws:policy/amazoneks_cni_policy" ########################################### ## eks cluster ########################################### ekscluster: type: aws::eks::cluster properties: name: !ref clustername version: !ref kubernetesversion rolearn: !getatt eksrole.arn resourcesvpcconfig: securitygroupids: - !importvalue controlplanesecuritygroupid subnetids: !split [ ',', !importvalue privatesubnetids ] eksnodegroup: type: aws::eks::nodegroup dependson: ekscluster properties: clustername: !ref clustername noderole: !getatt eksnoderole.arn scalingconfig: minsize: ref: numberofworkernodes desiredsize: ref: numberofworkernodes maxsize: ref: numberofworkernodes subnets: !split [ ',', !importvalue privatesubnetids ]
Befehl: aws cloudformation create-stack --region us-east-1 --stack-name my-eks-cluster --capability capability_named_iam --template-body file://eks-stack.yaml
eks vpc yaml
--- awstemplateformatversion: '2010-09-09' description: 'amazon eks vpc - private and public subnets' parameters: vpcblock: type: string default: 192.168.0.0/16 description: the cidr range for the vpc. this should be a valid private (rfc 1918) cidr range. publicsubnet01block: type: string default: 192.168.0.0/18 description: cidrblock for public subnet 01 within the vpc publicsubnet02block: type: string default: 192.168.64.0/18 description: cidrblock for public subnet 02 within the vpc privatesubnet01block: type: string default: 192.168.128.0/18 description: cidrblock for private subnet 01 within the vpc privatesubnet02block: type: string default: 192.168.192.0/18 description: cidrblock for private subnet 02 within the vpc metadata: aws::cloudformation::interface: parametergroups: - label: default: "worker network configuration" parameters: - vpcblock - publicsubnet01block - publicsubnet02block - privatesubnet01block - privatesubnet02block resources: vpc: type: aws::ec2::vpc properties: cidrblock: !ref vpcblock enablednssupport: true enablednshostnames: true tags: - key: name value: !sub '${aws::stackname}-vpc' internetgateway: type: "aws::ec2::internetgateway" vpcgatewayattachment: type: "aws::ec2::vpcgatewayattachment" properties: internetgatewayid: !ref internetgateway vpcid: !ref vpc publicroutetable: type: aws::ec2::routetable properties: vpcid: !ref vpc tags: - key: name value: public subnets - key: network value: public privateroutetable01: type: aws::ec2::routetable properties: vpcid: !ref vpc tags: - key: name value: private subnet az1 - key: network value: private01 privateroutetable02: type: aws::ec2::routetable properties: vpcid: !ref vpc tags: - key: name value: private subnet az2 - key: network value: private02 publicroute: dependson: vpcgatewayattachment type: aws::ec2::route properties: routetableid: !ref publicroutetable destinationcidrblock: 0.0.0.0/0 gatewayid: !ref internetgateway privateroute01: dependson: - vpcgatewayattachment - natgateway01 type: aws::ec2::route properties: routetableid: !ref privateroutetable01 destinationcidrblock: 0.0.0.0/0 natgatewayid: !ref natgateway01 privateroute02: dependson: - vpcgatewayattachment - natgateway02 type: aws::ec2::route properties: routetableid: !ref privateroutetable02 destinationcidrblock: 0.0.0.0/0 natgatewayid: !ref natgateway02 natgateway01: dependson: - natgatewayeip1 - publicsubnet01 - vpcgatewayattachment type: aws::ec2::natgateway properties: allocationid: !getatt 'natgatewayeip1.allocationid' subnetid: !ref publicsubnet01 tags: - key: name value: !sub '${aws::stackname}-natgatewayaz1' natgateway02: dependson: - natgatewayeip2 - publicsubnet02 - vpcgatewayattachment type: aws::ec2::natgateway properties: allocationid: !getatt 'natgatewayeip2.allocationid' subnetid: !ref publicsubnet02 tags: - key: name value: !sub '${aws::stackname}-natgatewayaz2' natgatewayeip1: dependson: - vpcgatewayattachment type: 'aws::ec2::eip' properties: domain: vpc natgatewayeip2: dependson: - vpcgatewayattachment type: 'aws::ec2::eip' properties: domain: vpc publicsubnet01: type: aws::ec2::subnet metadata: comment: subnet 01 properties: mappubliciponlaunch: true availabilityzone: fn::select: - '0' - fn::getazs: ref: aws::region cidrblock: ref: publicsubnet01block vpcid: ref: vpc tags: - key: name value: !sub "${aws::stackname}-publicsubnet01" - key: kubernetes.io/role/elb value: 1 publicsubnet02: type: aws::ec2::subnet metadata: comment: subnet 02 properties: mappubliciponlaunch: true availabilityzone: fn::select: - '1' - fn::getazs: ref: aws::region cidrblock: ref: publicsubnet02block vpcid: ref: vpc tags: - key: name value: !sub "${aws::stackname}-publicsubnet02" - key: kubernetes.io/role/elb value: 1 privatesubnet01: type: aws::ec2::subnet metadata: comment: subnet 03 properties: availabilityzone: fn::select: - '0' - fn::getazs: ref: aws::region cidrblock: ref: privatesubnet01block vpcid: ref: vpc tags: - key: name value: !sub "${aws::stackname}-privatesubnet01" - key: kubernetes.io/role/internal-elb value: 1 privatesubnet02: type: aws::ec2::subnet metadata: comment: private subnet 02 properties: availabilityzone: fn::select: - '1' - fn::getazs: ref: aws::region cidrblock: ref: privatesubnet02block vpcid: ref: vpc tags: - key: name value: !sub "${aws::stackname}-privatesubnet02" - key: kubernetes.io/role/internal-elb value: 1 publicsubnet01routetableassociation: type: aws::ec2::subnetroutetableassociation properties: subnetid: !ref publicsubnet01 routetableid: !ref publicroutetable publicsubnet02routetableassociation: type: aws::ec2::subnetroutetableassociation properties: subnetid: !ref publicsubnet02 routetableid: !ref publicroutetable privatesubnet01routetableassociation: type: aws::ec2::subnetroutetableassociation properties: subnetid: !ref privatesubnet01 routetableid: !ref privateroutetable01 privatesubnet02routetableassociation: type: aws::ec2::subnetroutetableassociation properties: subnetid: !ref privatesubnet02 routetableid: !ref privateroutetable02 controlplanesecuritygroup: type: aws::ec2::securitygroup properties: groupdescription: cluster communication with worker nodes vpcid: !ref vpc outputs: publicsubnetids: description: public subnets ids in the vpc value: !join [ ",", [ !ref publicsubnet01, !ref publicsubnet02 ] ] export: name: publicsubnetids privatesubnetids: description: private subnets ids in the vpc value: !join [ ",", [ !ref privatesubnet01, !ref privatesubnet02 ] ] export: name: privatesubnetids controlplanesecuritygroupid: description: security group for the cluster control plane communication with worker nodes value: !ref controlplanesecuritygroup export: name: controlplanesecuritygroupid vpcid: description: the vpc id value: !ref vpc export: name: vpcid
Befehl: aws cloudformation create-stack --region us-east-1 --stack-name my-eks-vpc --template-body file://eks-vpc-stack.yaml
Ergebnis nach Befehl:
Jetzt versuche ich, die Dateien „deployment.yaml“ und „service.yaml“ bereitzustellen
deployment.yaml
apiversion: apps/v1 kind: deployment metadata: name: helloworld namespace: default spec: replicas: 2 selector: matchlabels: app: helloworld template: metadata: labels: app: helloworld spec: containers: - name: new-container image: ****40312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest ports: - containerport: 80
Befehle und Ergebnisse:
Jetztservice.yaml
apiversion: v1 kind: service metadata: name: helloworld spec: type: loadbalancer selector: app: helloworld ports: - name: http port: 80 targetport: 80
Befehle und Ergebnisse:
Nachdem dies alles erledigt ist, erhalte ich beim Ausführen von kubectl getploy das folgende Ergebnis:
Zum Debuggen habe ich kubectl discover pod helloworld ausprobiert und folgendes erhalten
C:\Users\visratna\GolandProjects\testaws>kubectl describe pod helloworld Name: helloworld-c6dc56598-jmpvr Namespace: default Priority: 0 Service Account: default Node: docker-desktop/192.168.65.4 Start Time: Fri, 07 Jul 2023 22:22:18 +0530 Labels: app=helloworld pod-template-hash=c6dc56598 Annotations: <none> Status: Pending IP: 10.1.0.7 IPs: IP: 10.1.0.7 Controlled By: ReplicaSet/helloworld-c6dc56598 Containers: new-container: Container ID: Image: 549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest Image ID: Port: 80/TCP Host Port: 0/TCP State: Waiting Reason: ImagePullBackOff Ready: False Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-sldvv (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-sldvv: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23m default-scheduler Successfully assigned default/helloworld-c6dc56598-jmpvr to docker-desktop Normal Pulling 22m (x4 over 23m) kubelet Pulling image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest" Warning Failed 22m (x4 over 23m) kubelet Failed to pull image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest": rpc error: code = Unknown desc = Error response from daemon: Head "https://549840312665.dkr.ecr.us-east-1.amazonaws.com/v2/docker-gs-ping/manifests/latest": no basic auth credentials Warning Failed 22m (x4 over 23m) kubelet Error: ErrImagePull Warning Failed 22m (x6 over 23m) kubelet Error: ImagePullBackOff Normal BackOff 3m47s (x85 over 23m) kubelet Back-off pulling image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest" Name: helloworld-c6dc56598-r9b4d Namespace: default Priority: 0 Service Account: default Node: docker-desktop/192.168.65.4 Start Time: Fri, 07 Jul 2023 22:22:18 +0530 Labels: app=helloworld pod-template-hash=c6dc56598 Annotations: <none> Status: Pending IP: 10.1.0.6 IPs: IP: 10.1.0.6 Controlled By: ReplicaSet/helloworld-c6dc56598 Containers: new-container: Container ID: Image: 549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest Image ID: Port: 80/TCP Host Port: 0/TCP State: Waiting Reason: ImagePullBackOff Ready: False Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-84rw4 (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-84rw4: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23m default-scheduler Successfully assigned default/helloworld-c6dc56598-r9b4d to docker-desktop Normal Pulling 22m (x4 over 23m) kubelet Pulling image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest" Warning Failed 22m (x4 over 23m) kubelet Failed to pull image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest": rpc error: code = Unknown desc = Error response from daemon: Head "https://549840312665.dkr.ecr.us-east-1.amazonaws.com/v2/docker-gs-ping/manifests/latest": no basic auth credentials Warning Failed 22m (x4 over 23m) kubelet Error: ErrImagePull Warning Failed 22m (x6 over 23m) kubelet Error: ImagePullBackOff Normal BackOff 3m43s (x86 over 23m) kubelet Back-off pulling image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest"
Ich habe viele der auf Stackoverflow vorgeschlagenen Lösungen ausprobiert, aber nichts scheint für mich zu funktionieren. Gibt es Vorschläge, wie ich die Dinge zum Laufen bringen kann? Vielen Dank im Voraus.
Lösung
Es gibt ein paar Dinge. Erstens sollten Sie die Verwendung des neuesten Tags vermeiden. Dies ist ein Anti-Muster. Wenn Sie ein Image an ECR übertragen, verwenden Sie das Build-Label oder die Versionsnummer als Image-Label. Zweitens müssen Sie überprüfen, ob Ihre Worker-Knoten die Berechtigung zum Abrufen von Bildern aus ECR haben, insbesondere die AmazonEC2ContainerRegistryReadOnly-Richtlinie. Andernfalls kann das Kubelet das Bild nicht aus ECR abrufen. Wenn sich die Registrierung in einem anderen Konto als der Cluster befindet, müssen Sie eine Repository-[Ressourcen]-Richtlinie erstellen. Siehe https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policies.html.
Das obige ist der detaillierte Inhalt vonDas Bild von ECR zu EKS funktioniert nicht, da der resultierende Pod immer 0/2 ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Seit seiner Einführung im Jahr 2009 hat sich Bitcoin zu einem führenden Unternehmen in der Welt der Kryptowährungen entwickelt und sein Preis hat enorme Schwankungen erfahren. Um einen umfassenden historischen Überblick zu bieten, stellt dieser Artikel Bitcoin-Preisdaten von 2009 bis 2025 zusammen und deckt wichtige Marktereignisse, Änderungen der Marktstimmung und wichtige Faktoren ab, die die Preisbewegungen beeinflussen.

1. Klicken Sie zunächst mit der rechten Maustaste auf die leere Stelle der Taskleiste unten in Windows 11 und wählen Sie [Taskleisteneinstellungen]. 2. Suchen Sie rechts in den Taskleisteneinstellungen nach [taskbarcorneroverflow]. 3. Suchen Sie dann darüber nach [Uhr] oder [Uhr] und aktivieren Sie die Funktion. Methode 2: 1. Drücken Sie die Tastenkombination [win+r], um run aufzurufen, geben Sie [regedit] ein und drücken Sie zur Bestätigung die Eingabetaste. 2. Öffnen Sie den Registrierungseditor, suchen Sie darin nach [HKEY_CURRENT_USERControlPanel] und löschen Sie es. 3. Nach dem Löschen starten Sie den Computer neu und Sie werden zur Konfiguration aufgefordert. Wenn Sie zum System zurückkehren, wird die Uhrzeit angezeigt.

Antwort: Die folgenden Community-Foren und Diskussionsgruppen stehen für Fragen zur funktionalen Java-Programmierung zur Verfügung: StackOverflow: Die weltweit größte Q&A-Website zur Programmierung mit einer Community von Experten für funktionale Java-Programmierung. JavaFunctionalProgramming: Ein Community-Forum, das sich auf die funktionale Java-Programmierung konzentriert und Diskussionen zu Konzepten, Sprachfunktionen und Best Practices bietet. Redditr/Functionaljava: Ein Subreddit mit Schwerpunkt auf funktionaler Java-Programmierung, mit Schwerpunkt auf Tools, Bibliotheken und Technologien. Discord: JavaFunctional Programming: Discord-Dienst, der Diskussionen, Code-Sharing und Zusammenarbeit in Echtzeit ermöglicht

Wie verwende ich den Python-Code anderer Leute? Code-Repositories finden: Finden Sie den benötigten Code auf Plattformen wie PyPI und GitHub. Installationscode: Verwenden Sie pip oder klonen Sie das GitHub-Repository zur Installation. Module importieren: Verwenden Sie die Importanweisung in Ihrem Skript, um installierte Module zu importieren. Arbeiten mit Code: Zugriff auf Funktionen und Klassen in Modulen. (Optional) Passen Sie den Code an: Ändern Sie den Code nach Bedarf, um ihn an Ihr Projekt anzupassen.

Was soll ich tun, wenn die Uhrzeit auf meinem Win11-Computer immer falsch ist? Wir alle stellen die Uhrzeit oder den Kalender ein, wenn wir das Win11-System verwenden, aber viele Benutzer fragen sich, dass die Computerzeit immer falsch ist. Was ist also los? Benutzer können direkt auf die Taskleiste unten klicken und dann den Taskbarcorneroverflow suchen, um ihn einzurichten. Auf dieser Website erfahren Sie ausführlich, wie Sie den Zeitfehler auf Win11-Computern anpassen können. So stellen Sie die falsche Uhrzeit auf einem Windows 11-Computer ein. Methode 1: 1. Wir klicken zunächst mit der rechten Maustaste auf die leere Stelle der Taskleiste unten und wählen „Taskleisteneinstellungen“. Methode 2: 1. Drücken Sie die Tastenkombination Win+R, um Ausführen aufzurufen, geben Sie regedit ein und drücken Sie zur Bestätigung die Eingabetaste.

Häufige Ausnahmetypen und ihre Reparaturmaßnahmen bei der Entwicklung von Java-Funktionen Während der Entwicklung von Java-Funktionen können verschiedene Ausnahmen auftreten, die die korrekte Ausführung der Funktion beeinträchtigen. Im Folgenden sind häufige Ausnahmetypen und ihre Reparaturmaßnahmen aufgeführt: 1. NullPointerException Beschreibung: Wird beim Zugriff auf ein Objekt ausgelöst, das nicht initialisiert wurde. Fix: Stellen Sie sicher, dass Sie das Objekt auf Nicht-Null-Werte überprüfen, bevor Sie es verwenden. Beispielcode: try{Stringname=null;System.out.println(name.length());}catch(NullPointerExceptione){

Überlauf ist eine Eigenschaft von CSS, die verwendet wird, um den Anzeigemodus des Elementinhalts zu steuern, wenn er den Container überschreitet. Zu den verfügbaren Werten gehören: sichtbar: Der Inhalt ist sichtbar, der Überlaufcontainer ist ausgeblendet: Der Überlaufinhalt wird abgeschnitten Die Bildlaufleiste wird angezeigt, um den Überlaufinhalt anzuzeigen. Automatisch: Der Browser bestimmt automatisch, ob die Bildlaufleiste angezeigt werden soll. Vererben: Das Überlaufattribut des übergeordneten Elements erben

Als weltbekannte Kurzvideoplattform verfügt Douyin über eine riesige Nutzerbasis und Content-Ersteller. Da die Plattformregeln jedoch ständig aktualisiert und verbessert werden, kann es bei einigen Benutzern zu Kontosperrungen kommen. Dies hat in der Öffentlichkeit Fragen zur Transparenz und Fairness der Plattformverwaltung aufgeworfen. In diesem Artikel geht es um die Sperrung von Douyin-Konten und um die Frage, ob Benutzer nach der Sperrung ihrer Konten Einspruch einlegen können. Es kann viele Gründe für ein Verbot auf der Douyin-Plattform geben, unter anderem illegale Inhalte, Verstöße gegen Plattformbestimmungen, Verletzung der Rechte anderer Personen usw. Um die Ordnung der Plattform und die Interessen der Nutzer aufrechtzuerhalten, hat Douyin eine Reihe von Regeln und Überprüfungsmechanismen eingerichtet. Wenn einige Benutzer gegen die Regeln verstoßen, werden ihre Konten möglicherweise gesperrt. Einige Benutzer stellen jedoch möglicherweise die Gründe für das Verbot in Frage oder sind mit ihnen unzufrieden
