记录工作中遇到的k8s的坑和简单用法
1、k8s指定node节点启动pod
-
在工作中遇到集群节点通信问题,需要指定节点启动pod的情况,这个时候就要去修改yaml脚本。
-
首先我需要知道指定节点上的标签,k8s不能直接指定hostname进行节点指定,需要从节点的label中找到特征的key-value,用 nodeSelector 这个字段,放在containers的同级。不要用TAB键。
执行下面这条命令
kubectl get node --show-labels
# 结果如下
10-111-22-34 Ready <none> 121d v1.14.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=10-111-22-34
10-111-33-44 Ready master 224d v1.14.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=10-111-33-44
从上面的结果中,我们获取到 kubernetes.io/hostname=10-111-33-44 这个字段,放入到下面的yaml中,即可实现指定节点的目的。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hyper-rt-backend
namespace: hyper-rt
spec:
replicas: 1
template:
metadata:
labels:
task: hyper-rt
app: hyper-rt-backend
spec:
nodeSelector:
kubernetes.io/hostname: 10-111-33-44 # 这个是指定节点启动,key:value类型
containers:
........
2 、强制删除pod
kubectl delete pod nginx-deployment-759484bc6d-t9f72 --force --grace-period=0
3、label操作
# 获取所有节点label
kubectl get node --show-labels
# 删除label
kubectl label node xxx gpuname-
# 创建label
kubectl label node xxx gpuname=00
# 修改label
kubectl label node xxx gpuname=1080 --overwrite