Kubernetes Workload 불러오기

앞글 에서 Container Registry를 정리하는 글을 썼었습니다. 연결되는 내용입니다만, 다음으로는 실제로 사용되지 않는 Container Registry를 정리하는 내용입니다.


GKE를 사용하다보면, 당연히 과거에는 사용했으나, 현재는 사용하지 않는 Workload들이 늘어나게 됩니다.
물론 매번 바로 바로 삭제하면 좋지만 사람일이라는게 그렇게 될리가 있나요...

따라서 한참 시간이 지나면 삭제된 Workload들에 연결되어 있던 Docker Image들이 차곡차곡 Container Registry에 쌓이게 됩니다.
그렇다면 각각 목록을 불러와서 사용되지 않는 이미지를 diff해서 삭제하면 됩니다.


const namespaces = JSON.parse(execSync("kubectl get namespace -o=json").toString()).items.map((namespace) => {
    return namespace.metadata.name;
});

위와 같은 스크립트를 호출하면 namespace 목록을 불러올 수 있습니다.
( kube는 기본적으로 namespace단위로 나눠져 있습니다. )

const images = [];

namespaces.map((namespace) => {
    JSON.parse(execSync(`kubectl get deployments --namespace=${namespace} -o=json`).toString()).items.map((deployment) => {
        deployment.spec.template.spec.containers.map((container) => {
            images.push(container.image.split(":")[0]);
        });
    });
});

namespaces.map((namespace) => {
    JSON.parse(execSync(`kubectl get cronjobs --namespace=${namespace} -o=json`).toString()).items.map((cronjob) => {
        cronjob.spec.jobTemplate.spec.template.spec.containers.map((container) => {
            images.push(container.image.split(":")[0]);
        });
    });
});

불러온 namespace목록을 활용하여, deployments 와 cronjobs를 불러옵니다.
해당 workload에서 container들에 있는 이미지 목록을 불러온뒤 앞에서 뽑은 목록과 비교해서 필요없는 이미지들은 삭제하면 됩니다.

다음 이야기는 Container Registry와 Artifact Registry에 관해 이야기하려 합니다.

좋은 웹페이지 즐겨찾기