19-k8s-基本命令-yaml-kubectl:
Kubernetes 集群的命令行工具kubectl
1、kubectl 命令格式:
kubectl [command] [type] [name] [flags]
参数:
command:指定要对资源执行的操作,例如create、get、describe、delete
type:指定资源类型,资源类型是大小写敏感的,开发者能够以单数 、复数 和 缩略的形式
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
name:指定资源的名称,名称也是大小写敏感的,如果省略名称,则会显示所有的资源,例如
kubectl get pods
flags:指定可选的参数,例如,可用 -s 或者 -server参数指定Kubernetes API server的地址和端口
2、kubectl 帮助命令
# 获取kubectl的命令
kubectl --help
# 获取某个命令的介绍和使用
kubectl get --help
kubectl create --help
3、kubectl基础命令
命令 | 介绍 |
---|---|
create | 通过文件名或标准输入创建资源 |
expose | 将一个资源公开为一个新的Service |
run | 在集群中运行一个特定的镜像 |
set | 在对象上设置特定的功能 |
get | 显示一个或多个资源 |
explain | 文档参考资料 |
edit | 使用默认的编辑器编辑一个资源 |
delete | 通过文件名,标准输入,资源名称或标签来删除资源 |
4、kubectl部署命令
命令 | 介绍 |
---|---|
rollout | 管理资源的发布 |
rolling-update | 对给定的复制控制器滚动更新 |
scale | 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job |
autoscale | 创建一个自动选择扩容或缩容并设置Pod数量 |
5、kubectl集群管理命令
命令 | 介绍 |
---|---|
certificate | 修改证书资源 |
cluster-info | 显示集群信息 |
top | 显示资源(CPU/M) |
cordon | 标记节点不可调度 |
uncordon | 标记节点可被调度 |
drain | 驱逐节点上的应用,准备下线维护 |
taint | 修改节点taint标记 |
6、kubectl 其它命令
命令 | 介绍 |
---|---|
apply | 通过文件名或标准输入对资源应用配置 |
patch | 使用补丁修改、更新资源的字段 |
replace | 通过文件名或标准输入替换一个资源 |
convert | 不同的API版本之间转换配置文件 |
label | 更新资源上的标签 |
annotate | 更新资源上的注释 |
completion | 用于实现kubectl工具自动补全 |
api-versions | 打印受支持的API版本 |
config | 修改kubeconfig文件(用于访问API,比如配置认证信息) |
help | 所有命令帮助 |
plugin | 运行一个命令行插件 |
version | 打印客户端和服务版本信息 |
Kubernetes 集群YAML文件详解
yaml菜鸟教程:https://www.runoob.com/w3cnote/yaml-intro.html
1、YAML 文件概述
k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到 YAML 格式文件中,我们把这种文件叫做资源清单文件,通过 kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署
2、YAML 文件书写格式
(1)YAML 介绍
YAML :仍是一种标记语言。为了强调这种语言以数据做为中心,而不是以标记语言为重点。
YAML 是一个可读性高,用来表达数据序列的格式。
(2)YAML 基本语法
* 使用空格做为缩进
* 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
* 低版本缩进时不允许使用 Tab 键,只允许使用空格
* 使用#标识注释,从这个字符一直到行尾,都会被解释器忽略
3、YAML 数据结构
对象:键值对的集合,又称为映射(mapping) / 哈希(hashes) / 字典(dictionary)
# 对象类型:对象的一组键值对,使用冒号结构表示
name: Tom
age: 18
# yaml 也允许另一种写法,将所有键值对写成一个行内对象
hash: {name: Tom, age: 18}
数组:
# 数组类型:一组连词线开头的行,构成一个数组
People
- Tom
- Jack# 数组也可以采用行内表示法
People: [Tom, Jack]
4、YAML 组成部分
主要分为了两部分,一个是控制器的定义 和 被控制的对象。
在一个YAML文件的控制器定义中,有很多属性名称
属性名称 | 介绍 |
---|---|
apiVersion | API版本 |
kind | 资源类型 |
metadata | 资源元数据 |
spec | 资源规格 |
replicas | 副本数量 |
selector | 标签选择器 |
template | Pod模板 |
metadata | Pod元数据 |
spec | Pod规格 |
containers | 容器配置 |
5、YAML 快速编写
一般借助工具来创建yaml
1、使用kubectl create命令
这种方式一般用于资源没有部署的时候,我们可以直接创建一个YAML配置文件
# 尝试运行,并不会真正的创建镜像
kubectl create deployment web --image=nginx -o yaml --dry-run
或者我们可以输出到一个文件中
kubectl create deployment web --image=nginx -o yaml --dry-run > hello.yaml
2、使用kubectl get命令导出yaml文件
可以首先查看一个目前已经部署的镜像
kubectl get deploy
然后我们导出 nginx的配置
kubectl get deploy nginx -o=yaml --export > nginx.yaml
然后会生成一个 nginx.yaml
的配置文件
6、k8s,yaml常用字段
spec 主要对象
额外的参数
kubectl命令详解
kubectl更多命令 kubectl --help
https://kubernetes.io/docs/reference/kubectl/
1、kubectl子命令详解:
2、kubectl可操作的资源对象详解
3、kubectl公共参数说明
每个子命令(如create、delete. get等)还有其特定的命令行参数,可以通过$ kubectl [command] --help命令进行查看。
4、kubectl格式化输出列表
kubectl常用操作实例
常用的输出格式示例如下。
(1)显示Pod的更多信息,例如NodeIP等:
$ kubectl get pod <pod-name> -o wide
(2)以YAML格式显示Pod的详细信息:
$ kubectl get pod <pod-name> -o yaml
(3)以自定义列名显示Pod的信息:
$ kubectl get pod <pod-name> -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
(4)基于自定义列明配置文件进行输出
$ kubectl get pod <pod-name> -o custom-columns-file=template.txttemplate.txt文件的内容如下:
NAME RSRC
metadata.name metadata.resourceVersion
输出结果为:
NAME RERC
pod-name 52305
(5)将输出结果按某个字段排序,可以通过--sort-by 参数以jsonpath表达式进行指定
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
kubectl get pods --sort-by=.metadata.name
kubectl apply (以文件或stdin 部署或更新一个或多个资源)
基于example service.yamn中的定义创建一个 Service资源:
kubectl apply -f example-service.yaml
使用example-controller.yaml中的定义创建一个Replication Controller资源:
kubectl apply -f example-controller.yaml
使用<directory>目录下所有:yaml、.yml 和.json文件中的定义进行创建:
kubectl apply -f <directory>
kubectl get (列出一个或多个资源对象的信息)
以文本格式列出所有Pod:
kubectl get pods
以文本格式列出所有Pod,包含附加信息( 如Node IP):
kubect1 get pods -0 wide
以文本格式列出指定名称的RC;
kobectl get replicationcontroller <rc-name>
以文本格式列出所有RC和Service
kubectl get rc services
以文本格式列出所有Dacemonset,包括未初始化的Daemonset:
kubectl get ds --include-uninitialized
列出在节点server01上运行的所有pod(仅显示namespace为default的):
kubectl get pods --field-selector=spec.nodeName=server01
kubectl describe(显示一个或多个资源的详细信息)
显示名称为<node name>的节点的详细信息:
Rubectl describe nodes <node-name>
显示名称为<pod-name>的Pod的详细信息:
kubect1 describe pods/<pod-name>
显示名称为<rc name>的RC控制器管理的所有Pod的详细信息:
kubect1 describe pods <rc-name>
描述所有Pod的详细信息:
kubect1 describe pods
对kubectl get和kubectl describe命令说明如下。
kubectl get 命令常用于查看同资源类型的一个或多个资源对象, 可以使用-o 或–output参数自定义输出格式,还可以通过-w或–watch 参数开启对资源对象更新的监控。
kubectl describe命令更侧重于描述指定资源的各方面详细信息,通过对API Server的多个API调用来构建结果视图。例如通过kubetl describe node命令不仅会返回节点信息,还会返回在其上运行的Pod的摘要、节点事件等信息。
kubectl delete
该命令可以使用文件,stdin的输人删除指定的资源对象,还可以通过标签选择器、名称、资源选择器等条件来限定待删除的资源范围。
使用在pod.yaml文件中指定的类型和名称删除Pod:
kubectl delete -f pod.yaml
删除所有带有'<label-key>=<label-value>'标签的Pod和Service:
Kubectl delete pods,services -1 <label-key>=<label-value>
删除所有Pod.包括未初始化的Pod:
kubectl delete pods -al1
kubectl exec (在Pod的容器中运行命令)
在名称为<pod-name>的Pod的第1个容器中运行date命令并打印输出结果:
kubectl exec <pod-name> -- date
在指定的容器中运行date命令并打印输出结果:
Kubectl exec <pod-name> -c <container-name> - date
在Pod的第1个容器中运行/bin/bash命令进人交互式TTY终端界面:
kubectl exec -ti <pod-name> -- /bin/bash
kubectl logs ( 打印Pod中容器的日志)
kubect1 1ogs <pod-name>
显示Pod中名称为<container name>的容器输出到stdout的日志:
kubectl 1ogs <pod-name> -c <container-name>
持续监控显示Pod中的第1个容器输出到stdou的日志,类似于tail.f命令的功能:
kubectl logs -f <pod-name>
在线编辑运行中的资源对象
可以使用kubecl edit命令编辑运行中的资源对象,例如使用下面的命令编辑运行中的一个(部署)Deployment:
$ kubectl edit deploy nginx
在命令运行之后,会通过YAML格式展示该对象的文本格式定义,用户可以对代码进行编辑和保存,从而完成对在线资源的直接修改。
将Pod的端口号映射到宿主机
将pod 的80端口映射到宿主机的888端口,客户端即可通过http://:8888访问容器服务了:
kubectl port-forward --addres 0.0.0.0 \ pod/nginx-6ddbbc47fb-sfdcv 8888:80
在容器和Node之间复制文件
把Pod(默认为第1个容器)中的/etc/fstab 文件复制到宿主机的/tmp目录下:
kubectl cp nginx-6ddbbc47fb-sfdcv:etc/fstab /tmp/fstab
设置资源对象的标签
为名为“defult"的命名空间设置"testing=true" 标签:
kubectl label namespaces default testing-true
kubectl还可以自定义创建和使用命令行插件。
学习路径:https://space.bilibili.com/302417610/,如有侵权,请联系q进行删除:3623472230