版本说明
kubectl:v1.17.6
一、kubectl 常用命令 1、获取命名空间 namespace 列表
2、获取服务 service 相关信息 可以通过 –all-namespaces 获取 k8s 集群所有的 serivce 列表:
1 kubectl get svc --all-namespaces
同样,像获取 deploy、pod、ingress、configmap 等等也都适用 –all-namespaces 。
也可以通过 -n \ 获取指定 namespace 下的 service 列表:
1 kubectl get svc -n public
3、备份 service 内容 1 kubectl get svc -n <namespace> <serviceName> -o yaml > xxx.yaml
这个 xxx.yaml 文件就是 service 的内容。如果 service 被删除,可以使用一下命令恢复。
1 kubectl apply -f xxx.yaml
4、删除 service 1 kubectl delete svc -n <namespace> <serviceName>
5、查看 deployment 信息 1 kubectl get deploy -n <namespace>
6、修改 deployment 1 kubectl edit deploy -n <namespace>
通常都会进入 deploy 里面修改镜像名、副本数、环境变量等等。该命令也可以用来查看 deploy 信息,不保存变动就是了。
7、查看 pod 1 kubectl get pod -n <namespace>
8、进入 pod shell 操作 交互模式:
1 2 kubectl exec -it -n <namespace> <podName> sh # 退出pod的话,可以输入 exit 或 Ctrl+D
如果只需要查看 pod 里面的某个文件,可以不进入交互模式,将 sh 替换为 – 执行命令,比如我进入 pod ,查看 pod 的 hosts 文件:
1 kubectl exec -it -n <namespace> <podName> -- cat /etc/hosts
7、重启 pod 根据 k8s 的机制,如果移除某 pod ,deployment 会再创建一个 pod 启动。所以移除 pod ,就可以实现重启 pod 的目的:
1 kubectl delete pod <podName> -n <namespace>
8、查看 pod 所在节点 1 kubectl get pod -owide --all-namespaces
9、查看各pod的内存使用情况 1 kubectl top pod --all-namespaces
10、查看某pod的相关日志 1 kubectl logs -f --tail=100 -n <namespace> <podName>
logs -f –tail=100 表示持续查看最新的 100 行日志。
11、查看上一个死掉的容器的日志 1 kubectl logs -f -p -n <namespace> <podName>
12、查看某pod的相关信息 当日志定位不到错误的时候,可以通过以下命令来查看 pod 容器的运行事件:
1 kubectl describe pod -n <namespace> <podName>
13、k8s node 标签添加、移除相关操作 1 2 3 4 5 6 7 8 9 10 11 # 查看所有k8s机器的标签kubectl get node --show-labels # 如果要调度的机器agent-2上没有node标签,那么就执行以下命令:kubectl label node agent-2 node=public # 移除agent-2节点上的node标签kubectl label node agent-2 node- # 修改一个Label的值,需要加上--overwrite参数:kubectl label node agent-2 node=public --overwrite
14、k8s 设置节点不可调度 1 2 3 4 5 6 7 [root@master ~]# kubectl cordon node-1 node/node-1 cordoned [root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 21d v1.17.6 node-1 Ready,SchedulingDisabled <none> 12h v1.17.6 node-2 Ready <none> 21d v1.17.6
15、将要删除的节点(node-1)上的 pod 平滑的转移到其他节点上 1 2 3 4 [root@master ~]# kubectl drain node-1 --delete-local-data --force --ignore-daemonsets node/node-1 cordoned WARNING: Ignoring DaemonSet-managed pods: kube-flannel-ds-amd64-6nt6g, kube-proxy-vtxzz pod/nginx-64f497f8fd-hpfhf evicted
16、容器里面的文件目录与本地互相复制 1 2 3 4 5 6 7 8 9 10 11 12 13 # 容器目录/usr/data/hdfs复制到本地kubectl cp -n <namespace> <podName>:/usr/data/hdfs /tmp/hdfs # 容器中的文件拷贝到本地kubectl cp -n <namespace> <podName>:/xxx-query/log/events-service-8.log /tmp/events-service-8.log # 本地文件复制到容器中的/usr/data/hdfskubectl cp hdfs-site.xml -n <namespace> <podName>:/usr/data/hdfs # pod文件到本地root@master-1:~# kubectl cp -n public xxx-779b64c974-c5hgx:/home/xxx/xxx/xxx-0.0.1-SNAPSHOT.jar /tmp/xxx-0.0.1-SNAPSHOT.jar tar: Removing leading `/' from member names root@master-1:~#
17、创建configmap 取名叫 data-configmap.yaml,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 kind: ConfigMap apiVersion: v1 metadata: name: data-configmap namespace: public labels: app: data-management data: application-test.yml: |- jasypt: encryptor: password: aG9sbHlzeXM= property: prefix: test( suffix: ) spring: application: name: data-management ....
创建 configmap:
1 kubectl create configmap data-configmap -n public --from-file=data-configmap.yaml
18、污点相关操作 1 2 3 4 5 6 # 查看污点kubectl describe node master-1 | grep Taints # 为某节点增加污点kubectl taint nodes node1 key1=value1:NoSchedule # 为某节点移除污点kubectl taint nodes node1 key1=value1:NoSchedule-
19、k8s 事件 1 2 3 4 5 6 7 8 9 10 11 12 13 # 当前k8s集群,所有事件类型列表:kubectl api-resources # 监听事件kubectl get events -A -w # 事件结果中的Kind是哪来的?kubectl get events -A --sort-by='{.metadata.creationTimestamp}' -o json kubectl get events -A --sort-by='{.metadata.creationTimestamp}' -o jsonpath='{range .items[*]}{.involvedObject.kind}, {.metadata.namespace}, {.involvedObject.name}, {.metadata.name}, {.message}{"\n"}{end}' 查看某一事件记录,将其输出为YAML格式:kubectl get events -n {namespace} {.metadata.name} -o yaml 查看某一事件详情: kubectl describe events -n {namespace} {.involvedObject.name}
20、如何查看某容器化服务的历史镜像tag 1)如果要查看deploy部署的历史镜像tag,可以执行:
1 2 # 指定namespace,以时间正序排列,获取ReplicaSetkubectl get rs -n <namespace> --sort-by=.metadata.creationTimestamp
列表中,DESIRED、CURRENT、READY 均为 0 的就是你的历史ReplicaSet,在里面可以查看每个ReplicaSet对应的镜像tag。
关于StatefulSet、DaemonSet 如何查看历史镜像tag,等会了再补充。
二、小结 本篇文章,主要列举了 kubectl 常用的命令,主要是对 service、deploy、pod 一些常用操作。等明天再继续更新下 helm 相关的操作,这样对使用 k8s 集群更加方便,我们明天继续分享。