一、前言
本篇是Kubernetes第三篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。本篇重要介绍kubectl的使用。
Kubernetes系列文章:
kubectl的核心功能在于通过 API Server 操作 Kubernetes 的各种资源对象,包括资源对象的创建、删除、查看、修改、配置、运行等等,学习kubectl相关命令是了解 Kubernetes 集群管理的一种手段。
二、kubectl语法
kubectl [command] [TYPE] [NAME] [flags]
- command:指定在一个或多个资源上要执行的操作。例如:create、get、describe、delete、apply;
- TYPE:指定资源类型。资源类型区分大小写,您可以指定单数,复数或缩写形式;
- Name: 指定资源的名称。名称区分大小写。如果省略名称,则会显示所有资源的详细信息;
#获取相同类型的资源信息 type name1 name2 kubectl get pod example-pod1 example-pod2 #获取不同类型对象资源 type/name type2/name2 kubectl get pod/example1 replicationcontroller/example2 #同时应用多个YAML文件,以多个-f flie参数表示 kubectl get pod -f pod1.yaml -f pod2.yaml
- 指定可选的标记。例如,可以使用 -s 或 --server标识来指定Kubernetes API服务器的地址和端口;-n指定名称空间;
输出格式
kubectl命令可以对结果进行多种格式化显示,输出的格式通过-o参数指定:
kubectl [command] [TYPE] [NAME] -o <output_format>
常用的输出格式如下:
img
- 自定义列名展示;
kubectl get pod #value就是pod定义字段 kubectl get pods -o custom-columns=NAME:.metadata.name,UID:.metadata.uid,imageName:.spec.containers[0].image
image.png
- 自定义列名配置文件名称;
#自定义需要展示列名文件 vim custom-col.conf #输入下面内容 NAME UID imageName containerPort metadata.name metadata.uid spec.containers[0].image spec.containers[0].ports[0].containerPort #指定文件输出 kubectl get pod -o custom-columns-file=custom-col.conf
image.png
- json格式输出;
kubectl get pod -o json
image.png
- 输出jsonpath文件内容;
kubectl get pods -o jsonpath='{.items[0].metadata.name},{.items[0].spec.containers[0].image}'
image.png
- 通过自定义jsonpath文件输出自定义内容;
#自定义JSONPath文件 vim custom-json.conf #输入自定义的内容 {.items[0].metadata.name},{.items[0].spec.containers[0].image},{.items[0].spec.containers[0].ports[0].containerPort} #按照格式输出 kubectl get pod -o jsonpath-file=custom-json.conf
- 仅打印资源对象的名称;
kubectl get pod -o name
image.png
- 展示更多的Pod信息;
kubectl get pod -o wide
image.png
- 以yaml的格式显示结果;
kubectl get pod -o yaml
image.png
关于kubectl的命令很多,大家可以参考下官方文档,这里就不详细介绍每个命令,大家只要掌握常用的命令即可,下面的篇幅就是介绍大家常用命令;
三、kubectl常用命令
- kubectl create/replace 和 kubectl apply 部署或者替换资源,kubectl replace的执行过程,是使用新的 YAML文件中的 API 对象,替换原有的 API 对象,kubectl apply,则是执行了一个对原有 API 对象的patch 操作,这里建议大家使用kubectl apply操作;
#使用create创建一个Deployment资源对象 使用上个章节的yaml文件 kubectl create -f nginx-deployment.yaml #修改命令 可以通过kubectl edit 还可以使用修改nginx-deployment.yaml文件, #后使用 kubectl replace 来触发更新 我们修改限制内存的为256,这种方式我们称为命令式配置文件操作 kubectl replace -f nginx-deployment.yaml #我们也可以使用kubectl apply创建对象资源 kubectl apply -f nginx-deployment.yaml #然后通过修改nginx-deployment.yaml文件,执行kubectl apply就可以完成资源修改 kubectl apply -f nginx-deployment.yaml
- kubectl get 列出查看同一种类型一个或者多个资源对象;
#列出所有的pod kubectl get pods #列出某个节点上的所有的pod kubectl get pods --field-selector=spec.nodeName=节点的名称 #筛选标签为testing=true的pod kubectl get pod -l testing=true
- kubectl describe 查看资源的详细信息,kubectl describe相比于kubectl get来说,更多关注资源方面的详情,会返回节点信息、节点时间等等,kubectl get 用户查看同一种类型一个或者多个资源对象;
#查看某个pod详细信息 kubectl describe pod/nginx-deployment-776b4d7488-jfcjq #查看某个node详细信息 kubectl describe nodes/demo-work-1
- kubectl delete 删除输入的指定的资源对象,也可以通过标签选择器、名称、资源选择器来删除特定资源范围;
#删除指定类型的pod kubectl delete -f pod.yaml #删除所有label-key:label-value的信息 kubectl delete pods -l label-key=label-value
- kubectl exec 在pod的容器中运行命令;
#进入/bin/bash交互界面 kubectl exec -it nginx-deployment-776b4d7488-jfcjq -- /bin/bash
- kubectl logs 打印Pod中容器的日志;
#打印日志 kubectl logs nginx-deployment-776b4d7488-jfcjq #持续监控pod日志 kubectl logs -f nginx-deployment-776b4d7488-jfcjq
- kubectl edit 在线编辑资源对象;
#在线编辑deployment资源 kubectl edit deploy nginx-deployment
- 将Pod端口映射到宿主机端口;
#将Pod 80端口映射到宿主机 8888 kubectl port-forward --address 172.21.122.230,localhost pod/nginx-deployment-776b4d7488-jfcjq 8888:80 #打开另外一个界面访问 curl http://172.21.122.230:8888
- 容器与宿主机之间复制文件;
kubectl cp nginx-deployment-776b4d7488-jfcjq:/etc/fastab /tmp
- 设置资源对象标签;
#给pod设置testing=true的标签 kubectl label pod nginx-deployment-776b4d7488-jfcjq testing=true #筛选标签为testing=true的pod kubectl get pod -l testing=true
- 最重要的命令,帮助命令;
#列出command的类型 kubectl #列出某种command的使用文档 kubectl command --help