给k8s里的pod加上label

做项目时发现以前环境里的pod都有名为app的label,但是现场环境里的pod却没有,导致某些以label为app来筛选的业务查询不到对应的pod。

第一种方法-直接给pod打标签

在k8s中,给组件打标签的语法都很类似:

kubectl label deployment/pod/其他 xxxxx -n 命名空间 标签名=标签值 --overwrite

那我给名为imagemanagement-7698dfccc4-vvlhq的pod增加一个标签:

kubectl label pod imagemanagement-7698dfccc4-vvlhq -n testns app=imagemanagement --overwrite

观察业务,发现已经生效,通过label为app来筛选的业务可以查询到该pod了。

第二种方法-更改deployment

在k8s中,我们使用deployment来管理pod,即使当前pod死掉,也会立刻拉起新的pod,使实例数和deployment里配置的一致。
按照方法一只更新当前pod不是长久之计,所以建议使用第二种方法:更改deployment。

kubectl -n testns edit deployments imagemanagement

在编辑操作中,给spc下的template里添加对应label,如图所示:
给k8s里的pod加上label_第1张图片
这样即使pod重新生成,也会带上app=imagemanagement的标签了。

一些相关代码

以label为app来筛选pod代码参考:

public PodList getPodsByLabel(String namespace, String label) throws Exception{
        KubernetesClient client =null;
        PodList list =null;
        try {
            client = clientUtil.getClient(namespace);
            list = client.pods().inNamespace(namespace).withLabel("app", label).list();
            //logger.info("find podList: {} in namespace: {} with label :{}", list, namespace, label);
        } catch (Exception e) {
            logger.error("select podlist {},{} error ", namespace,label);
            throw new Exception(e);
        } finally {
            if (null != client){
                //client.close();
                //logger.info("close KubernetesClient success");
            }
        }
        return list;
    }

你可能感兴趣的:(java后端,kubernetes,java,容器)