K8s基本操作命令

一、namespace操作

1)列出集群中所有API组名/版本号:

kubectl api-versions

输出:

admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

2)列出集群名称空间:

kubectl get namespaces

输出结果:

3)创建新的名称空间:

kubectl create namespace new-space-name

以上namespace均可以简写成ns,如:kubectl create ns new-space-name

4)列出集群内所有名称空间下所有pod:

kubectl get pod --all-namespaces

二、Pod操作

1)根据配置清单创建pod:

kubectl apply -f new-pod.yaml

2)删除pod:

kubectl delete pods pod-name

3)查看pod:

kubectl get pods

4)通过镜像文件直接创建pod和无状态应用:

5)查看一下对应的pod和无状态应用:

访问这个服务,首先查看一下它的ip地址,可以看到它被部署到哪个节点上去(这里被部署到36工作节点上),使用命令格式:

kubectl get pods -o wide

6)查看pod的配置清单

7)查看pod的label

kubectl get pods --show-labels

7)查看指定名称空间下pod的资源使用情况

kubectl top pods -n [namespaces]

例如:

对指定pod资源状态自动刷新:

watch 'kubectl top pods -n momtest r-vqnc2'

8)查看每个节点主机资源使用情况

kubectl top node

三、Service操作

1)创建service

kubectl create service clusterip test1 --tcp=80

这里要注意,如果需要pod自动关联这个service,service的名字需要和pod一致。

查看这个创建的service:

查看service相关详细信息:

这里看到pod test1已经作为这个service的Endpoints了。

从同一集群的其他pod(用kubectl exec -it pod_name -- /bin/sh进入)访问这个service,注意地址结构:[service name].[namespace].svc.[cluster domain]也可以使用这个service的ip地址访问:10.102.176.227

2)扩展/缩小service下的pod个数

例如,把test1的副本数量扩展/缩少到三个(用同一命令指定数量即可):

kubectl scale deployment/test1 --replicas=3

可以看到在三个工作节点上会自动生成另外两个一样的pod。

3)service的iptable规则

集群每创建一个新的pod,都会在节点宿主机的iptables上创建对应的新规则,例如:

完整的iptables规则如下图:

来源:https://github.com/cilium/k8s-iptables-diagram

4)service的ipvs规则

对于使用ipvs的集群,上述规则在ipvs下显示如下,对比iptables,ipvs更为简单和高效:(通过修改kube-proxyconfigMap里的mode字段为“ipvs”来配置)

工作节点上安装apt install ipvsadm

四、ConfigMap操作

1)列出configmap资源(kebu-system名称空间下)

2)修改kube-proxy

kubectl edit cm kube-proxy -n kube-system

-n kube-system为指定名称空间。

修改完kube-proxy,需要删除并重新生成kube-system下的对应6个kube-proxy的pod(由于这里测试用的主节点+工作节点有6个)。

实现批量删除,通过labels:

看到这6个pod都具有同一个label叫k8s-app=kube-proxy, 所以如2-2的操作,批量删除加入label后的指令是:

kubectl delete pods -l k8s-app=kube-proxy -n kube-system

kube-proxy的pod被删除后重新根据修改后的配置清单生成新的pod。

五、deployments/rc/rs删除操作

上面测试用的两个pod,如果直接使用kubectl delete pod来删除,过一会又会生成新的pod,原因是对应的pod在创建时,kubernetes创建了对应的deployment和rs(副本集replicasets)来监控pod的生命周期。所以,要删除这两个pod,首先要删除对应的deployment/rc/rs。

检查是否创建了deployments任务:kubectl get deployments

检查是否创建了副本控制器ReplicationController:kubectl get rc

检查死否创建了副本集replicasets:kubectl get rs

删除对应的对应的deployment:kubectl delete deployment test1

Last updated

Was this helpful?