kubectl을 이용해 cloudwatch agent 배포후 해당 pod 가 이미지 pull에 실패해 backoff 된것을 확인했다.
아래 명령어를 사용해서 에러 원인이 추정 가능했다.
kubectl describe pod cloudwatch-agent-xxxx -n amazon-cloudwatch
Scheduled -> Pulling -> Failed -> BackOff
Error: ErrImagePull
Error: ImagePullBackOff
해당 에러메시지가 있는 화면에서 Scheduled Message Event의 ip-xx-xx-xxx-xxx.ap-northeast-1.compute.internal 부분을 확인하면 어떤 인스턴스의 ENI가 네트워킹에 사용되었는지 확인가능하고, 해당 EKS 인스턴스의 서브넷에 443 port 연결 허용 및 라우팅 추가 후 위에 이용된 ENI에 임시로 ENI를 붙여 인터넷이 되게 하여 이미지 풀이 가능하게 한다.
그다음 작업과 관련된 해당 pod를 삭제하면 스케줄링에 의해 새로운 pod가 배포되며 이미지를 가져와서 running상태로 바뀐다.
kubectl delete pod cloudwatch-agent-fz4hj -n amazon-cloudwatch
작업한 pod를 삭제 후 다시 해당 네임스페이스에 get pod 하면 새로운 pod가 배포중인 것이 확인된다.
kubectl get pod -n amazon-cloudwatch
위에서는 cloudwatch-agent-pdklg pod가 새로 배포되었다.
해당 EKS pod의 private 한 연결 상태를 유지하고 이미지를 배포하길 바란다면 아래 방법을 이용해보자.
To download a container image from public server(public ec2) and then deploy it to a pod in a private EKS cluster (private pod), you can follow these general steps:
- Connect to the public EC2 instance and use a command-line tool like Docker or Podman to download the container image that you want to deploy.
For example, if you're using Docker, you can use the following command to download an image from Docker Hub:
- After downloading the image, you can save it to a file using the Docker save command. This will create a tar archive of the image and its dependencies that you can transfer to another machine.
- Transfer the image file to a machine that has access to your private EKS cluster. You can use tools like SCP or AWS S3 to transfer the file.
- On the machine that has access to the EKS cluster, use the Docker load command to load the image from the file.
- After loading the image, you can create a Kubernetes deployment or pod definition that references the new image. You can use the kubectl apply command to apply the configuration.
Note that to deploy a container image to a private EKS cluster, you will need to have the necessary credentials and permissions to access the EKS cluster and deploy the image. You may also need to configure network settings to allow the pod to access any required resources, such as databases or other services.
========================================================
명령어 메모:
특정 네임스페이스에 pod 생성:
kubectl run <POD_NAME> --image=<IMAGE_NAME> --namespace=<NAMESPACE_NAME>
모든 네임스페이스에 대한 pod 확인:
kubectl get pods --all-namespaces
kubectl get pods -A
'aws > k8s, eks study' 카테고리의 다른 글
How to set the keep-alive setting on EKS pod (0) | 2023.03.06 |
---|---|
eks-controller ingress reconciler error with 403 response code (0) | 2023.03.02 |
Error of getting credential - no kind "ExecCredential" is registered for version (0) | 2023.02.15 |
Difference between kubectl apply & create (0) | 2022.06.28 |
K8s command examples (0) | 2022.06.14 |