이 기사는 Shanhe의 Huawei Cloud 커뮤니티 " K8s 이미지 캐시 관리 Kube-fledged Awareness "에서 공유되었습니다.
우리는 인터넷의 컨테이너 예약이 예약된 노드 행에 있는 현재 컨테이너의 이미지를 가져와야 한다는 것을 알고 있습니다. k8s
-
快速启动和/或扩展
신청이 필요합니다 . 예를 들어, 실시간 데이터 처리를 수행하는 애플리케이션은 폭발적인 데이터 볼륨으로 인해 빠르게 확장되어야 합니다. -
이미지는 비교적 크고 여러 버전이 포함되어 있으며 노드 저장 공간이 제한되어 있으며 불필요한 이미지를 동적으로 정리해야 합니다.
-
无服务器函数
들어오는 이벤트에 즉시 반응하고 1초 이내에 컨테이너를 시작해야 하는 경우가 많습니다. -
에지 장치에서 실행하려면 미러 저장소에 대한 간헐적인 네트워크 연결을 허용해야 합니다 .
IoT 应用程序
边缘设备
-
专用仓库
에서 이미지를 가져와야 하는데 모든 사람에게镜像仓库
거기에서 이미지를 가져올 수 있는 액세스 권한을 부여할 수 없는 경우 클러스터의 노드에서 이미지를 사용할 수 있도록 설정할 수 있습니다. -
클러스터 관리자 또는 운영자가 애플리케이션을 업그레이드해야 하고 새 이미지를 성공적으로 가져올 수 있는지 미리 확인하려는 경우.
kube-fledged
Kubernetes 클러스터의 노드에서 직접 컨테이너 이미지 캐시를 생성하고 관리하는 데 사용 됩니다 . 이를 통해 사용자는 이미지 목록과 이러한 이미지를 캐시해야 하는(즉, 가져오는) 작업자 노드를 정의할 수 있습니다. 결과적으로 레지스트리에서 이미지를 가져올 필요가 없기 때문에 애플리케이션 포드를 거의 즉시 시작할 수 있습니다. kubernetes operator
worker
kube-fledged
이미지 캐시의 수명 주기를 관리하기 위해 CRUD API가 제공되며, 구성 가능한 여러 매개변수를 지원하므로 필요에 따라 기능을 사용자 정의할 수 있습니다.
Kubernetes에는 镜像垃圾回收机制
. 노드의 kubelet은 디스크 사용량이 특정 임계값에 도달했는지 여부를 주기적으로 확인합니다(플래그를 통해 구성 가능). 여기에 도달하면 阈值
kubelet은 노드에서 사용되지 않은 모든 이미지를 자동으로 삭제합니다.
제안된 솔루션에서는 자동 및 주기적인 새로 고침 메커니즘을 구현해야 합니다. kubelet의 gc에 의해 이미지 캐시의 이미지가 삭제되면 다음 새로 고침 주기에서 삭제된 이미지를 이미지 캐시로 가져옵니다. 이렇게 하면 이미지 캐시가 최신 상태로 유지됩니다.
설계 흐름
https://github.com/senthilrch/kube-fledged/blob/master/docs/kubefledged-architecture.png
Kube 기반 배포
투구 모드 배포
──[[email protected]]-[~/ansible] └─$mkdir kube-fledged ┌──[[email protected]]-[~/ansible] └─$cd kube 본격적인 ┌──[[email protected]]-[~/ansible/kube-fledged] └─$export KUBEFLEDGED_NAMESPACE=kube-fledged ┌──[[email protected]]-[~/ansible/kube-fledged] └─$kubectl ${KUBEFLEDGED_NAMESPACE} 네임스페이스 생성 네임스페이스/kube-fledged 생성됨 ┌──[[email protected]]-[~/ansible/kube-fledged] └─$helm repo kubefledged-charts 추가 https://senthilrch.github.io/kubefledged-charts/ "kubefledged-charts"가 저장소에 추가되었습니다. ┌──[[email protected]]-[~/ansible/kube-fledged] └─$helm 저장소 업데이트 차트 저장소에서 최신 정보를 가져오는 동안 잠시 기다려 주세요... ..."kubefledged-charts" 차트 저장소에서 업데이트를 성공적으로 받았습니다. ..."kubescape" 차트 저장소에서 업데이트를 성공적으로 받았습니다. ..."rancher-stable" 차트 저장소에서 업데이트를 성공적으로 받았습니다. ..."skm" 차트 저장소에서 업데이트를 성공적으로 받았습니다. ..."openkruise" 차트 저장소에서 업데이트를 성공적으로 받았습니다. ..."awx-operator" 차트 저장소에서 업데이트를 성공적으로 받았습니다. ..."botkube" 차트 저장소에서 업데이트를 성공적으로 받았습니다. 업데이트가 완료되었습니다. ⎈행복한 헬밍!⎈
┌──[[email protected]]-[~/ansible/kube-fledged] └─$helm install --kube-fledged 확인 kubefledged-charts/kube-fledged -n ${KUBEFLEDGED_NAMESPACE} --wait
chart
실제 배포시 네트워크 문제로 인해 다운로드가 안되는 것을 확인하여 yaml을 이용하여 배포하였습니다. make deploy-using-yaml
Yaml 파일 배포
┌──[[email protected]]-[~/ansible/kube-fledged] └─$git 클론 https://github.com/senthilrch/kube-fledged.git 'kube-fledged'로 복제 중... 원격: 개체 열거 중: 10613, 완료되었습니다. 원격: 개체 계산: 100%(1501/1501), 완료되었습니다. 원격: 개체 압축 중: 100%(629/629), 완료되었습니다. 원격: 총 10613(델타 845), 재사용 1357(델타 766), 팩 재사용 9112 수신 객체 중: 100%(10613/10613), 34.58MiB | 7.33MiB/s, 완료. 델타 매체 처리 중: 100%(4431/4431), 완료되었습니다. ┌──[[email protected]]-[~/ansible/kube-fledged] └─$ls Kube로서의 기능을 갖춘 ┌──[[email protected]]-[~/ansible/kube-fledged] └─$cd kube-fledged/ ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$make 배포-사용-yaml kubectl apply -f 배포/kubefledged-namespace.yaml
처음 배포할 때 이미지를 풀다운할 수 없다는 것을 알았습니다.
┌──[[email protected]]-[~] └─$kubectl get all -n kube-fledged 이름 준비 상태 재시작 나이 pod/kube-fledged-controller-df69f6565-drrqg 0/1 CrashLoopBackOff 35(5시간 59분 전) 21시간 pod/kube-fledged-webhook-server-7bcd589bc4-b7kg2 0/1 Init:CrashLoopBackOff 35(5시간 58분 전) 21시간 pod/kubefledged-controller-55f848cc67-7f4rl 1/1 실행 중 0 21h pod/kubefledged-webhook-server-597dbf4ff5-l8fbh 0/1 Init:CrashLoopBackOff 34(6시간 전) 21시간 이름 유형 클러스터-IP 외부-IP 포트 연령 service/kube-fledged-webhook-server ClusterIP 10.100.194.199 <없음> 3443/TCP 21h service/kubefledged-webhook-server ClusterIP 10.101.191.206 <없음> 3443/TCP 21h 이름 준비됨 최신 이용 가능 연령 배포.apps/kube-fledged-controller 0/1 1 0 21h 배포.apps/kube-fledged-webhook-server 0/1 1 0 21h 배포.apps/kubefledged-controller 0/1 1 0 21h 배포.apps/kubefledged-webhook-server 0/1 1 0 21h 이름 원하는 현재 준비 연령 Replicaset.apps/kube-fledged-controller-df69f6565 1 1 0 21h Replicaset.apps/kube-fledged-webhook-server-7bcd589bc4 1 1 0 21h Replicaset.apps/kubefledged-controller-55f848cc67 1 1 0 21h Replicaset.apps/kubefledged-webhook-server-597dbf4ff5 1 1 0 21h ┌──[[email protected]]-[~] └─$
여기서 우리가 끌어오고 싶은 이미지를 찾습니다.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat *.yaml | 그렙 이미지: - 이미지: senthilrch/kubefledged-controller:v0.10.0 - 이미지: senthilrch/kubefledged-webhook-server:v0.10.0 - 이미지: senthilrch/kubefledged-webhook-server:v0.10.0
일부를 개별적으로 가져오고 현재 모든 작업 노드에서 일괄 작업을 사용합니다. ansible
┌──[[email protected]]-[~/ansible] └─$ansible k8s_node -m shell -a "docker pull docker.io/senthilrch/kubefledged-cri-client:v0.10.0" -i host.yaml
기타 관련 이미지 가져오기
작업이 완료된 후 컨테이너 상태는 모두 정상입니다.
┌──[[email protected]]-[~/ansible] └─$kubectl -n kube-fledged 모두 가져오기 이름 준비 상태 재시작 나이 pod/kube-fledged-controller-df69f6565-wdb4g 1/1 실행 중 0 13h pod/kube-fledged-webhook-server-7bcd589bc4-j8xxp 1/1 실행 중 0 13h pod/kubefledged-controller-55f848cc67-klxlm 1/1 실행 중 0 13h pod/kubefledged-webhook-server-597dbf4ff5-ktbsh 1/1 실행 중 0 13h 이름 유형 클러스터-IP 외부-IP 포트 연령 service/kube-fledged-webhook-server ClusterIP 10.100.194.199 <없음> 3443/TCP 36h 서비스/kubefledged-webhook-server ClusterIP 10.101.191.206 <없음> 3443/TCP 36h 이름 준비됨 최신 이용 가능 연령 배포.apps/kube-fledged-controller 1/1 1 1 36h 배포.apps/kube-fledged-webhook-server 1/1 1 1 36h 배포.apps/kubefledged-controller 1/1 1 1 36h 배포.apps/kubefledged-webhook-server 1/1 1 1 36h 이름 원하는 현재 준비 연령 Replicaset.apps/kube-fledged-controller-df69f6565 1 1 1 36h Replicaset.apps/kube-fledged-webhook-server-7bcd589bc4 1 1 1 36h Replicaset.apps/kubefledged-controller-55f848cc67 1 1 1 36h Replicaset.apps/kubefledged-webhook-server-597dbf4ff5 1 1 1 36h
성공적인 설치 확인
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$kubectl 포드 가져오기 -n kube-fledged -l app=kubefledged 이름 준비 상태 재시작 나이 kubefledged-controller-55f848cc67-klxlm 1/1 실행 중 0 16h kubefledged-webhook-server-597dbf4ff5-ktbsh 1/1 실행 중 0 16h ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$kubectl get imagecaches -n kube-fledged kube-fledged 네임스페이스에서 리소스를 찾을 수 없습니다.
Kubeflged 사용
이미지 캐시 객체 생성
파일을 기반으로 이미지 캐시 객체 생성 Demo
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$cd 배포/ ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat kubefledged-imagecache.yaml --- api버전: kubefledged.io/v1alpha2 종류: 이미지캐시 metadata: # 이미지 캐시의 이름입니다. 클러스터에는 여러 이미지 캐시 객체가 있을 수 있습니다. 이름: imagecache1 네임스페이스: kube-fledged # 이 이미지 캐시에 사용될 kubernetes 네임스페이스입니다. 원하는 대로 다른 네임스페이스를 선택할 수 있습니다. 라벨: 앱: kubefledge kubefledged: 이미지 캐시 투기: # "cacheSpec" 필드를 사용하면 사용자는 이미지 목록과 해당 이미지를 캐시해야 하는(즉, 미리 가져오는) 작업자 노드를 정의할 수 있습니다. 캐시 사양: # 노드 선택기가 없는 이미지 목록(nginx:1.23.1)을 지정하므로 이러한 이미지는 클러스터의 모든 노드에 캐시됩니다. - 이미지: - ghcr.io/jitesoft/nginx:1.23.1 # 노드 선택기를 사용하여 이미지 목록(cassandra:v7 및 etcd:3.5.4-0)을 지정하므로 이러한 이미지는 노드 선택기에 의해 선택된 노드에만 캐시됩니다. - 이미지: - us.gcr.io/k8s-artifacts-prod/cassandra:v7 - us.gcr.io/k8s-artifacts-prod/etcd:3.5.4-0 노드선택기: 계층: 백엔드 # 개인 저장소에서 캐시로 이미지를 가져오기 위한 이미지 가져오기 비밀 목록을 지정합니다. imagePullSecrets: - 이름: myregistrykey
공식 데모의 해당 이미지는 풀다운이 불가능하므로 변경하세요.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$docker pull us.gcr.io/k8s-artifacts-prod/cassandra:v7 데몬의 오류 응답: "https://us.gcr.io/v2/" 가져오기: net/http: 연결을 기다리는 동안 요청이 취소되었습니다(헤더를 기다리는 동안 Client.Timeout이 초과되었습니다). ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
선택기 태그의 사용을 테스트하기 위해 노드의 태그를 찾고 이미지 캐시를 별도로 수행합니다.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl get node --show-labels
동시에 공공 창고에서 직접 이미지를 가져오므로 객체가 필요하지 않습니다. imagePullSecrets
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$vim kubefledged-imagecache.yaml
수정된 파일 yaml
-
모든 노드에 liruilong/my-busybox:최신 이미지 캐시를 추가했습니다.
-
태그 선택기에 해당하는 미러 캐시를 추가했습니다.
kubernetes.io/hostname: vms105.liruilongs.github.io
liruilong/hikvision-sdk-config-ftp:latest
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat kubefledged-imagecache.yaml --- api버전: kubefledged.io/v1alpha2 종류: 이미지캐시 metadata: # 이미지 캐시의 이름입니다. 클러스터에는 여러 이미지 캐시 객체가 있을 수 있습니다. 이름: imagecache1 네임스페이스: kube-fledged # 이 이미지 캐시에 사용될 kubernetes 네임스페이스입니다. 원하는 대로 다른 네임스페이스를 선택할 수 있습니다. 라벨: 앱: kubefledge kubefledged: 이미지 캐시 투기: # "cacheSpec" 필드를 사용하면 사용자는 이미지 목록과 해당 이미지를 캐시해야 하는(즉, 미리 가져오는) 작업자 노드를 정의할 수 있습니다. 캐시 사양: # 노드 선택기가 없는 이미지 목록(nginx:1.23.1)을 지정하므로 이러한 이미지는 클러스터의 모든 노드에 캐시됩니다. - 이미지: - liruilong/my-busybox:최신 # 노드 선택기를 사용하여 이미지 목록(cassandra:v7 및 etcd:3.5.4-0)을 지정하므로 이러한 이미지는 노드 선택기에 의해 선택된 노드에만 캐시됩니다. - 이미지: - liruilong/hikvision-sdk-config-ftp:최신 노드선택기: kubernetes.io/호스트 이름: vms105.liruilongs.github.io # 개인 저장소에서 캐시로 이미지를 가져오기 위한 이미지 가져오기 비밀 목록을 지정합니다. #imagePullSecrets: #- 이름: myregistrykey ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
직접 생성하고 오류를 보고했습니다.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl create -f kubefledged-imagecache.yaml 서버 오류(InternalError): "kubefledged-imagecache.yaml" 생성 중 오류 발생: 내부 오류 발생: 웹훅 "validate-image-cache.kubefledged.io" 호출 실패: 웹훅 호출 실패: 게시 "https://kubefledged- webhook-server.kube-fledged.svc:3443/validate-image-cache?timeout=1s": x509: 알 수 없는 기관에서 서명한 인증서(후보 기관 인증서를 확인하는 동안 "crypto/rsa: verify error" 때문일 수 있음) kubefledged.io") ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl get imagecaches -n kube-fledged kube-fledged 네임스페이스에서 리소스를 찾을 수 없습니다. ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
해결 방법은 해당 개체를 삭제하고 다시 만드는 것입니다.
현재 프로젝트 중 하나인 https://github.com/senthilrch/kube-fledged/issues/76 에서 솔루션을 찾았습니다. issues
하드코딩 된 것처럼 보이지만 서버가 시작 되면 새로운 CA 번들이 생성되고 Webhook 구성이 업데이트됩니다. 다른 배포가 발생하면 원래 CA 번들이 다시 적용되고 Webhook 구성 요소가 다시 시작되어 번들 init-server를 패치할 때까지 Webhook 요청이 실패하기 시작합니다. Webhook CA
webhook
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$make 제거-kubefledged-and-operator # kubeflged 제거 kubectl delete -f 배포/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml 오류: 이름에 대한 리소스 매핑을 찾을 수 없습니다: "kube-fledged" 네임스페이스: "deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml"의 "kube-fledged": "KubeFledged 종류와 일치하는 항목이 없습니다. " 버전 "charts.helm.kubefledged.io/v1alpha2" CRD가 먼저 설치되어 있는지 확인하십시오.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$make 배포-사용-yaml kubectl apply -f 배포/kubefledged-namespace.yaml 네임스페이스/kube-fledged 생성됨 kubectl apply -f 배포/kubefledged-crd.yaml customresourcedefinition.apiextensions.k8s.io/imagecaches.kubefledged.io는 변경되지 않았습니다. .................... kubectl 롤아웃 상태 배포 kubefledged-webhook-server -n kube-fledged --watch 배포 "kubefledged-webhook-server" 롤아웃이 완료되기를 기다리는 중: 업데이트된 복제본 1개 중 0개를 사용할 수 있습니다... 배포 "kubefledged-webhook-server"가 성공적으로 출시되었습니다. kubectl 포드 가져오기 -n kube-fledged 이름 준비 상태 재시작 나이 kubefledged-controller-55f848cc67-76c4v 1/1 실행 중 0 112s kubefledged-webhook-server-597dbf4ff5-56h6z 1/1 실행 중 0 66초
캐시 개체를 다시 생성하고 성공적으로 생성합니다.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl create -f kubefledged-imagecache.yaml imagecache.kubefledged.io/imagecache1 생성됨 ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl get imagecaches -n kube-fledged 이름 나이 이미지캐시1 10초 ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
현재 관리되는 이미지 캐시 보기
┌──[[email protected]]-[~/ansible/kube-fledged] └─$kubectl get imagecaches imagecache1 -n kube-fledged -o json { "apiVersion": "kubefledged.io/v1alpha2", "kind": "이미지캐시", "메타데이터": { "creationTimestamp": "2024-03-01T15:08:42Z", "세대": 83, "라벨": { "app": "kubefledged", "kubefledged": "이미지캐시" }, "이름": "이미지캐시1", "namespace": "kube-fledged", "resourceVersion": "20169836", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "사양": { "cacheSpec": [ { "이미지": [ "liruilong/my-busybox:최신" ] }, { "이미지": [ "liruilong/hikvision-sdk-config-ftp:최신" ], "노드선택기": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "상태": { "completionTime": "2024-03-02T01:06:47Z", "message": "요청된 모든 이미지를 각 노드로 성공적으로 가져왔습니다", "이유": "ImageCacheRefresh", "startTime": "2024-03-02T01:05:33Z", "status": "성공했습니다" } } ┌──[[email protected]]-[~/ansible/kube-fledged] └─$
Ansible을 통해 확인
┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "docker 이미지 | grep liruilong/my-busybox" -i 호스트.yaml 192.168.26.102 | 변경됨 | RC=0 >> liruilong/my-busybox 최신 497b83a63aad 11개월 전 1.24MB 192.168.26.101 | 변경됨 | RC=0 >> liruilong/my-busybox 최신 497b83a63aad 11개월 전 1.24MB 192.168.26.103 | 변경됨 | RC=0 >> liruilong/my-busybox 최신 497b83a63aad 11개월 전 1.24MB 192.168.26.105 | 변경됨 | RC=0 >> liruilong/my-busybox 최신 497b83a63aad 11개월 전 1.24MB 192.168.26.100 | 변경됨 | RC=0 >> liruilong/my-busybox 최신 497b83a63aad 11개월 전 1.24MB 192.168.26.106 | 변경됨 | RC=0 >> liruilong/my-busybox 최신 497b83a63aad 11개월 전 1.24MB ┌──[[email protected]]-[~/ansible] └─$
┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "docker 이미지 | grep liruilong/hikvision-sdk-config-ftp" -i host.yaml 192.168.26.102 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.100 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.103 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.105 | 변경됨 | RC=0 >> liruilong/hikvision-sdk-config-ftp 최신 a02cd03b4342 4개월 전 830MB 192.168.26.101 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.106 | 실패 | RC=1 >> 0이 아닌 반환 코드 ┌──[[email protected]]-[~/ansible] └─$
자동 새로고침 켜기
┌──[[email protected]]-[~/ansible] └─$kubectl annotate imagecaches imagecache1 -n kube-fledged kubefledged.io/refresh-imagecache= imagecache.kubefledged.io/imagecache1 주석이 추가됨 ┌──[[email protected]]-[~/ansible] └─$
이미지 캐시 추가
새 이미지 캐시 추가
┌──[[email protected]]-[~/ansible] └─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json { "apiVersion": "kubefledged.io/v1alpha2", "kind": "이미지캐시", "메타데이터": { "creationTimestamp": "2024-03-01T15:08:42Z", "세대": 92, "라벨": { "app": "kubefledged", "kubefledged": "이미지캐시" }, "이름": "이미지캐시1", "namespace": "kube-fledged", "resourceVersion": "20175233", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "사양": { "cacheSpec": [ { "이미지": [ "liruilong/my-busybox:최신", "liruilong/jdk1.8_191:최신" ] }, { "이미지": [ "liruilong/hikvision-sdk-config-ftp:최신" ], "노드선택기": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "상태": { "completionTime": "2024-03-02T01:43:32Z", "message": "요청된 모든 이미지를 각 노드로 성공적으로 가져왔습니다", "이유": "ImageCacheUpdate", "startTime": "2024-03-02T01:40:34Z", "status": "성공했습니다" } } ┌──[[email protected]]-[~/ansible] └─$
앤서블을 통해 확인
┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "docker 이미지 | grep liruilong/jdk1.8_191" -i host.yaml 192.168.26.101 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.100 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.102 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.103 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.105 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.106 | 실패 | RC=1 >> 0이 아닌 반환 코드 ┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "docker 이미지 | grep liruilong/jdk1.8_191" -i host.yaml 192.168.26.101 | 변경됨 | RC=0 >> liruilong/jdk1.8_191 최신 17dbd4002a8c 5년 전 170MB 192.168.26.102 | 변경됨 | RC=0 >> liruilong/jdk1.8_191 최신 17dbd4002a8c 5년 전 170MB 192.168.26.100 | 변경됨 | RC=0 >> liruilong/jdk1.8_191 최신 17dbd4002a8c 5년 전 170MB 192.168.26.103 | 변경됨 | RC=0 >> liruilong/jdk1.8_191 최신 17dbd4002a8c 5년 전 170MB 192.168.26.105 | 변경됨 | RC=0 >> liruilong/jdk1.8_191 최신 17dbd4002a8c 5년 전 170MB 192.168.26.106 | 변경됨 | RC=0 >> liruilong/jdk1.8_191 최신 17dbd4002a8c 5년 전 170MB ┌──[[email protected]]-[~/ansible] └─$
이미지 캐시 삭제
┌──[[email protected]]-[~/ansible] └─$kubectl edit imagecaches imagecache1 -n kube-fledged imagecache.kubefledged.io/imagecache1 편집됨 ┌──[[email protected]]-[~/ansible] └─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json { "apiVersion": "kubefledged.io/v1alpha2", "kind": "이미지캐시", "메타데이터": { "creationTimestamp": "2024-03-01T15:08:42Z", "세대": 94, "라벨": { "app": "kubefledged", "kubefledged": "이미지캐시" }, "이름": "이미지캐시1", "namespace": "kube-fledged", "resourceVersion": "20175766", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "사양": { "cacheSpec": [ { "이미지": [ "liruilong/jdk1.8_191:최신" ] }, { "이미지": [ "liruilong/hikvision-sdk-config-ftp:최신" ], "노드선택기": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "상태": { "message": "이미지 캐시가 업데이트 중입니다. 잠시 후에 상태를 확인하세요.", "이유": "ImageCacheUpdate", "startTime": "2024-03-02T01:48:03Z", "status": "처리 중" } }
Ansible 확인을 통해 마스터 노드인지 작업 노드인지에 관계없이 해당 이미지 캐시가 지워진 것을 확인할 수 있습니다.
┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "docker 이미지 | grep liruilong/my-busybox" -i 호스트.yaml 192.168.26.102 | 변경됨 | RC=0 >> liruilong/my-busybox 최신 497b83a63aad 11개월 전 1.24MB 192.168.26.101 | 변경됨 | RC=0 >> liruilong/my-busybox 최신 497b83a63aad 11개월 전 1.24MB 192.168.26.105 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.100 | 변경됨 | RC=0 >> liruilong/my-busybox 최신 497b83a63aad 11개월 전 1.24MB 192.168.26.103 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.106 | 실패 | RC=1 >> 0이 아닌 반환 코드 ┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "docker 이미지 | grep liruilong/my-busybox" -i 호스트.yaml 192.168.26.105 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.102 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.103 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.101 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.100 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.106 | 실패 | RC=1 >> 0이 아닌 반환 코드 ┌──[[email protected]]-[~/ansible] └─$
여기서 주의할 점은 모든 이미지 캐시가 지워지면 다음 배열을 ""로 작성해야 한다는 점입니다. images
┌──[[email protected]]-[~/ansible] └─$kubectl edit imagecaches imagecache1 -n kube-fledged imagecache.kubefledged.io/imagecache1 편집됨 ┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "docker 이미지 | grep liruilong/jdk1.8_191" -i host.yaml 192.168.26.102 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.101 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.100 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.105 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.103 | 실패 | RC=1 >> 0이 아닌 반환 코드 192.168.26.106 | 실패 | RC=1 >> 0이 아닌 반환 코드 ┌──[[email protected]]-[~/ansible] └─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json { "apiVersion": "kubefledged.io/v1alpha2", "kind": "이미지캐시", "메타데이터": { "creationTimestamp": "2024-03-01T15:08:42Z", "세대": 98, "라벨": { "app": "kubefledged", "kubefledged": "이미지캐시" }, "이름": "이미지캐시1", "namespace": "kube-fledged", "resourceVersion": "20176849", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "사양": { "cacheSpec": [ { "이미지": [ "" ] }, { "이미지": [ "liruilong/hikvision-sdk-config-ftp:최신" ], "노드선택기": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "상태": { "completionTime": "2024-03-02T01:52:16Z", "message": "캐시된 모든 이미지가 각 노드에서 성공적으로 삭제되었습니다.", "이유": "ImageCacheUpdate", "startTime": "2024-03-02T01:51:47Z", "status": "성공했습니다" } } ┌──[[email protected]]-[~/ansible] └─$
다음 방법으로 삭제한 경우 해당 태그에 직접 댓글을 달아주세요.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat kubefledged-imagecache.yaml --- api버전: kubefledged.io/v1alpha2 종류: 이미지캐시 metadata: # 이미지 캐시의 이름입니다. 클러스터에는 여러 이미지 캐시 객체가 있을 수 있습니다. 이름: imagecache1 네임스페이스: kube-fledged # 이 이미지 캐시에 사용될 kubernetes 네임스페이스입니다. 원하는 대로 다른 네임스페이스를 선택할 수 있습니다. 라벨: 앱: kubefledge kubefledged: 이미지 캐시 투기: # "cacheSpec" 필드를 사용하면 사용자는 이미지 목록과 해당 이미지를 캐시해야 하는(즉, 미리 가져오는) 작업자 노드를 정의할 수 있습니다. 캐시 사양: # 노드 선택기가 없는 이미지 목록(nginx:1.23.1)을 지정하므로 이러한 이미지는 클러스터의 모든 노드에 캐시됩니다. #- 이미지: #- liruilong/my-busybox:최신 # 노드 선택기를 사용하여 이미지 목록(cassandra:v7 및 etcd:3.5.4-0)을 지정하므로 이러한 이미지는 노드 선택기에 의해 선택된 노드에만 캐시됩니다. - 이미지: - liruilong/hikvision-sdk-config-ftp:최신 노드선택기: kubernetes.io/호스트 이름: vms105.liruilongs.github.io # 개인 저장소에서 캐시로 이미지를 가져오기 위한 이미지 가져오기 비밀 목록을 지정합니다. #imagePullSecrets: #- 이름: myregistrykey ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
그러면 다음 오류가 보고됩니다.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl edit imagecaches imagecache1 -n kube-fledged 오류: imagecaches.kubefledged.io "imagecache1"을 패치할 수 없습니다. 허용 웹훅 "validate-image-cache.kubefledged.io"가 요청을 거부했습니다. 번호가 일치하지 않습니다. 이미지 목록 `kubectl replacement -f /tmp/kubectl-edit-4113815075.yaml`을 실행하여 이 업데이트를 다시 시도할 수 있습니다.
블로그 게시물의 일부 참조
© 본 글에 포함된 링크의 저작권은 원저작자에게 있습니다. 만약 침해된 부분이 있다면, 이에 동의하신다면 스타에게 인색하지 마시길 바랍니다.
https://github.com/senthilrch/kube-fledged
화웨이 클라우드의 신기술에 대해 빨리 알아보고 팔로우하려면 클릭하세요~
동료 치킨 "오픈 소스" deepin-IDE 및 마침내 부트스트랩을 달성했습니다! 좋은 친구, Tencent는 Switch를 "생각하는 학습 기계"로 전환했습니다. Tencent Cloud의 4월 8일 실패 검토 및 상황 설명 RustDesk 원격 데스크톱 시작 재구성 웹 클라이언트 WeChat의 SQLite 기반 오픈 소스 터미널 데이터베이스 WCDB의 주요 업그레이드 TIOBE 4월 목록: PHP 사상 최저치로 떨어졌고 FFmpeg의 아버지인 Fabrice Bellard는 오디오 압축 도구인 TSAC를 출시했으며 Google은 대규모 코드 모델인 CodeGemma를 출시했습니다 . 오픈소스라서 너무 좋아요 - 오픈소스 사진 및 포스터 편집기 도구