k8s kubectl常用命令
1 全局命令
1.1 查看k8s的所有资源类型
kubectl api-resources -o wide --namespaced=true [root@paas-controller1:~]$ kubectl api-resources NAME SHORTNAMES APIGROUP NAMESPACED KIND bindings true Binding componentstatuses cs false ComponentStatus configmaps cm true ConfigMap endpoints ep true Endpoints events ev true Event
1.2 查看支持的apiVersion
[root@paas-controller1:~]$ kubectl api-versions admissionregistration.k8s.io/v1 ... apps/v1 batch/v1 batch/v1beta1 ... storage.k8s.io/v1beta1 v1
1.3 kubectl get # 查看各种已部署的资源
kubectl -n tests get pod kubectl -n tests get network -o json # 会将详细信息以json格式输出 # kubectl -n tests get mappingpolicy -o yaml # 会将详细信息以yaml格式输出
1.3.1 jsonpath,可方便的只获取资源其中某个key的值,写shell时非常好用
kubectl get pod example-pod -o jsonpath='{.metadata.name}'
1.3.2 查看一个已部署pod的详细参数
[root@paas-controller1:/home/lynalee]$ kubectl -n default get -o json pod lynalee-test-0 { "apiVersion": "v1", "kind": "Pod", "metadata": { "annotations": { ...
1.3.3 显示资源模板
[root@paas-controller1:/home/lynalee]$ kubectl get deployments.v1.apps -o json { "apiVersion": "v1", "items": [], "kind": "List", "metadata": { "resourceVersion": "", "selfLink": "" } }
1.4 kubectl create|delete
可以通过指定文件创建或删除资源
kubectl -n default get -o yaml pod lynalee-test-0 > test.yaml kubectl delete -f test.yaml kubectl create -f test.yaml
cat test.yaml
{ "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "name": "lynalee-test" }, "spec": { "selector": { "matchLabels": { "app": "lynalee-test" } }, "template": { "metadata": { "labels": { "app": "lynalee-test" } }, "spec": { "containers": [ { "image": "lynalee-test:v1", "name": "test" } ] } } } }
1.5 定位pod异常的一般方法
1.5.1 kubectl describe
各种pod的异常问题都可以先通过此命令查看,一般最下面会有报错原因
[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests describe pod lynalee-test-0 Name: lynalee-test-0 ... Normal Pulled 11m kubelet Successfully pulled image "lynalee-test:v1" in 16.040038ms Normal Created 11m kubelet Created container lynalee-test Normal Started 11m kubelet Started container lynalee-test
除了查看pod,其他各种部署了资源都可以查看,例如:
kubectl -n tests describe network
kubectl -n admin describe physnet
1.5.2 kubectl logs
此命令可以查看具体的pod日志,与docker log差不多
kubectl -n tests logs lynalee-test-0
如果有init Container可以通过-c指定容器名字查看日志具体的容器日志,下面是查看init容器的日志
kubectl -n tests logs lynalee-test-0 -c test-init
1.6 explain工具
此工具可以方便的列出资源的字段
[root@paas-controller1:/home/]$ kubectl explain sts.spec KIND: StatefulSet VERSION: apps/v1 RESOURCE: spec <Object> DESCRIPTION: Spec defines the desired identities of pods in this set. A StatefulSetSpec is the specification of a StatefulSet. FIELDS: podManagementPolicy <string> ... ...
2 pod相关
2.1 查看指定pod的描述信息
kubectl -n default describe pod [PodName]
2.1 删除一个pod
方法一:(正统)
2.1.1 查出资源kind
kubectl -n tests describe pod lynalee-test | grep 'Controlled By' [root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests describe pod lynalee-test | grep 'Controlled By' Controlled By: StatefulSet/lynalee-test
2.1.2 删除对应的kind
kubectl -n tests delete StatefulSets lynalee-test [root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests delete StatefulSets lynalee-test --force statefulset.apps "lynalee-test" deleted
2.1.3 删除指定pod
kubectl -n tests delete pod lynalee-test-0
[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests delete pods lynalee-test-0 pod "lynalee-test" deleted
作者有话说: 需要先删除对应的kind,再删除pod才有意义,否则pod会被对应的kind重新调度起来 |
---|
方法二:(通过scale,实现类似删除的效果)
kubectl -n tests scale --current-replicas=1 --replicas=0 StatefulSets lynalee-test [root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests scale --current-replicas=1 --replicas=0 StatefulSets lynalee-test statefulset.apps/lynalee-test scaled [root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests get pods | grep lynalee [root@paas-controller-1-TCF-SRTN-6407002306:~]$ [root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests get StatefulSets NAME READY AGE lynalee-test 0/0 14m
可以看到pod确实没有了,不过对应的kind还是存在的,所以是一种模拟效果,删的不干净哈
3 资源调度 kubectl scale
http://docs.kubernetes.org.cn/664.html
扩容:
[root@paas-controller-1 ]# kubectl scale --current-replicas=2 --replicas=3 Deployment lynalee-test deployment.apps/lynalee-test scaled [root@paas-controller-1 ]# kubectl get pods -o wide | grep lynalee lynalee-test-7d5ffd89df-9f4b6 2/2 Running 0 58m 192.169.2.76 192.168.111.104 <none> <none> lynalee-test-7d5ffd89df-kdc5l 2/2 Running 0 27s 192.169.3.39 192.168.111.101 <none> <none> lynalee-test-7d5ffd89df-xwbvr 2/2 Running 1 58m 192.169.1.87 192.168.111.105 <none> <none>
3.1 节点反亲和
可以看到没有配置反亲和前,副本有可能部署在同一个节点
[root@paas-controller-1 ]# kubectl get pods -o wide | grep lynalee
lynalee-test-7d5ffd89df-64vvf 2/2 Running 0 5m20s 192.169.0.73 192.168.111.103 <none> <none>
lynalee-test-7d5ffd89df-8mkbd 2/2 Running 0 5m20s 192.169.3.43 192.168.111.101 <none> <none>
lynalee-test-7d5ffd89df-gvfks 2/2 Running 0 5m20s 192.169.2.152 192.168.111.104 <none> <none>
lynalee-test-7d5ffd89df-lkvzd 2/2 Running 1 5m38s 192.169.1.88 192.168.111.105 <none> <none>
lynalee-test-7d5ffd89df-z7mxj 2/2 Running 0 5m38s 192.169.2.111 192.168.111.104 <none> <none>
3.2 yaml增加反亲配置(可使微服务部署在不同节点)
标签配置:
"template": {
"metadata": {
"labels": {
"name": "test",
"app": "openpalettestatefulset",
"key1":"lynalee-test",
"key2":"${gpu}"
反亲和配置:
"affinity": { "podAntiAffinity": { "requiredDuringSchedulingIgnoredDuringExecution": [ { "labelSelector": { "matchExpressions": [ { "key": "key1", "operator": "In", "values": [ "lynalee-test" ]}] }, "topologyKey": "kubernetes.io/hostname" }]} },
具体的scale命令:
[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests get controllerrevisions NAME CONTROLLER REVISION AGE lynalee-test-5d76c759bc statefulset.apps/lynalee-test-0 1 40m [root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests scale --replicas=5 statefulset.apps/lynalee-test statefulset.apps/lynalee-test scaled