上一节中写了可以给资源打标签,而k8s中节点同样也是一种资源,我们可以通过给节点打标签的方式将pod运行到指定节点上
# 先给节点打上标签 [root@k8s-master01 centos]# kubectl label node k8s-node01 node=node1 node/k8s-node01 labeled [root@k8s-master01 centos]# kubectl label node k8s-node02 node=node2 node/k8s-node02 labeled # 来查看一下 [root@k8s-master01 centos]# kubectl get node -L node NAME STATUS ROLES AGE VERSION NODE k8s-master01 Ready control-plane,master 18d v1.20.1 k8s-node01 Ready <none> 18d v1.20.1 node1 k8s-node02 Ready <none> 18d v1.20.1 node2 # 现在节点已经成功给两个node打上标签了接下来我们来编辑yaml文件,来将pod分配到指定节点上
apiVersion: v1 kind: Pod metadata: name: my-cmd-node1 spec: nodeSelector: # 在这里设置一个节点选择器 node: "node1" # 只会被分配到节点标签含有“node=node1”的节点上 containers: - name: my-cmd-node1 image: 192.168.80.84:5000/centos_cmd:v1 --- # 在一个yaml文件中可以使用“---”来一次创建多个资源 apiVersion: v1 kind: Pod metadata: name: my-cmd-node2 spec: nodeSelector: node: "node2" containers: - name: my-cmd-node2 image: 192.168.80.84:5000/centos_cmd:v1来看一下执行结果
[root@k8s-master01 centos]# kubectl get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-cmd-node1 1/1 Running 0 12s 10.32.0.8 k8s-node01 <none> <none> my-cmd-node2 1/1 Running 0 12s 10.40.0.6 k8s-node02 <none> <none> # 发现预设的pod确实分配到了期望的node上 关于命名空间命名空间是一种在资源之上更高层面的作用域
这样可以允许我们多次使用相同的资源名称,也可以将一些系统层面的资源和用户层面的相隔离
查看命名空间
命名空间也是一种资源,我们同样可以使用get来查看
# 可以使用ns来简写namespace [root@k8s-master01 centos]# kubectl get ns NAME STATUS AGE default Active 18d kube-node-lease Active 18d kube-public Active 18d kube-system Active 18d # 可以使用"-n <namespaceName>"来指定命名空间 [root@k8s-master01 centos]# kubectl get po -n kube-system NAME READY STATUS RESTARTS AGE coredns-7f89b7bc75-9z9g8 1/1 Running 13 18d coredns-7f89b7bc75-dmhjl 1/1 Running 13 18d etcd-k8s-master01 1/1 Running 26 18d kube-apiserver-k8s-master01 1/1 Running 26 18d kube-controller-manager-k8s-master01 1/1 Running 30 18d kube-proxy-s2rmh 1/1 Running 13 18d kube-proxy-wq2kz 1/1 Running 13 18d kube-proxy-wvcgk 1/1 Running 24 18d kube-scheduler-k8s-master01 1/1 Running 26 18d weave-net-9lhgf 2/2 Running 37 18d weave-net-dhv26 2/2 Running 36 18d weave-net-q95gm 2/2 Running 65 18d # 这里其实也可以看出k8s原理中的一条,即: # k8s中只用node的kubelet以实际进程的方式存在,其他的都是以pod的形式存在 # 这里可以看到 etcd、apiserver、proxy、schedule、controller等
创建命名空间
既可以使用命令kubectl create namespace <namespaceName>来创建一个命名空间
也可以通过编写yaml文件的方式
apiVersion: v1 kind: Namespace metadata: name: custom-namespace # 然后使用kubectl create -f 来创建
指定命名空间创建对象
默认情况下我们是在default中创建资源的,通过“-n ”来指定命名空间
使用标签选择器删除pod
# 仍然是通过"-l"来指定标签选择器 kubectl delete pod -l "app=nginx"
删除整个命名空间
kubectl delete ns <namespaceName>
删除命名空间后,会删除其内的所有资源
删除所有pod,保留命名空间
kubectl delete po -all -ns <namespaceName>
删除命名空间内的所有资源,保留命名空间
kubectl delete all -all -ns <namespaceName>