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 组成部分

主要分为了两部分,一个是控制器的定义 和 被控制的对象。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-as3biRCT-1670132229157)(png/image-20220312145939459.png)]

在一个YAML文件的控制器定义中,有很多属性名称

属性名称介绍
apiVersionAPI版本
kind资源类型
metadata资源元数据
spec资源规格
replicas副本数量
selector标签选择器
templatePod模板
metadataPod元数据
specPod规格
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常用字段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IfujlLCk-1670132229158)(png/image-20220312151149252.png)]

spec 主要对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yheSYMCf-1670132229159)(png/image-20220312151257438.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cBXhscao-1670132229159)(png/image-20220312151307404.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tsLZqJrW-1670132229159)(png/image-20220312151316681.png)]
在这里插入图片描述

额外的参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GMYHZJV1-1670132229160)(png/image-20220312151331281.png)]

kubectl命令详解

kubectl更多命令 kubectl --help

https://kubernetes.io/docs/reference/kubectl/

1、kubectl子命令详解:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、kubectl可操作的资源对象详解

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、kubectl公共参数说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Y7eGeDr-1670132229164)(png/image-20220312154300541.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TrIy9Ooa-1670132229164)(png/image-20220312154321423.png)]

每个子命令(如create、delete. get等)还有其特定的命令行参数,可以通过$ kubectl [command] --help命令进行查看。

4、kubectl格式化输出列表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MWbtVIyg-1670132229165)(png/image-20220312154736406.png)]

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.txt

template.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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐