Kubectl
-
Kubectl概述
- kubectl 是K8s集群的命令行工具,通过kubectl能对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署。
-
Kubectl 语法
-
kubectl [command] [TYPE] [NAME] [flags]
-
command: 指定对资源进行的操作,例如 get、create、describe和delete
-
TYPE:指定资源类型,资源类型不区分大小写, 可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:
-
kubectl get node kubectl get nodes kubectl get no
-
-
Name:指定资源的名称。名称区分大小写。 如果省略名称,则显示所有资源的详细信息
-
kubectl get node node1
-
-
flags:指定可选的参数。例如,可以使用
-s
或--server
参数指定 Kubernetes API 服务器的地址和端口。
-
-
如果你需要帮助,在终端窗口中运行
kubectl help
或者指定 command 的helpkubectl get --help
-
更多命令可参考 K8s集群kubectl命令表
Yaml文件
-
Yaml概述
- Yaml是一种标记型语言,专门用来写配置文件,非常简洁和强大,使用比json更方便,其实质上是一种通用的数据串行化格式。
- k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也 就是可以把需要对资源对象操作编辑到 YAML 格式文件中,我们把这种文件叫做资源清单文 件,通过 kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署。
-
Yaml的语法
- 使用空格作为缩进
- 缩进的空格数不重要,只要相同层级的元素左侧对齐即可。
- 不支持制表符缩进,只能使用空格缩进
- 注释使用
#
标识,从这个字符到行尾,都会被解释器忽略。 - 使用
---
表示一个新的yaml文件的开始
-
Yam的数据结构
-
对象:键值对的集合,又称为映射、哈希、字典
-
# 对象类型,对象的一组键值对,使用冒号结构表示 name: Simple age: 25 # 另一种写法,所有键值对写成一个行内对象: info: { name: Simple, age: 25}
-
数组:一组按次序排列的值,又称为序列,列表
-
# 一组连词线开头的行,构成一个数组,缩进非常重要! students: - tom - jack # 数组也可使用行内表示法 students: [tom,jack]
-
纯量:单个的,最基本的,不可再分的值
-
是·# 数值直接以字面量的形式表示 number: 12.5 # 布尔值使用true(True)和false(False)表示 boolean: true # null用~表示 name: ~ # 时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区 datetime: 2022-07-19T22:14:31+08:00 # 日期必须使用ISO 8601格式,即yyyy-MM-dd date: 2022-07-19 # 字符串默认不使用引号表示: str: hello # 字符串中含有空格或特殊字符,需要放到引号中 str: 'hello word' # 单引号和双引号都可以使用,但双引号不会对特殊字符转义 str: - '内容\n字符串' - "内容\n字符串" # 单引号中如果还有单引号,必须连续使用两个单引号转义 str: 'my name''s simple' # 字符串可以写成多行,从第二行开始,必须有一个单空格缩进,换行符会被转换为空格 str: hello 'work' # 多行字符串可以使用|保留换行符,也可以使用>折叠换行 str: 保留 | 换行符 str: 折叠 > 换行符 # yaml中允许使用两个感叹号强制转换数据类型 e: !!str 123 f: !!str true # 引用。重复的内容在YAML中可以使用&来完成锚点定义,使用*来完成锚点引用 defaults: &defaults adapter: postgres host: localhost development: database: myapp_development <<: *defaults test: database: myapp_test <<: *defaults
-
K8s中Yaml的用法
在K8s中,我们一般使用Yaml格式的文件来创建符合我们预期的Pod,这样的Yaml称为资源清单。而一个Yaml文件通常有一下几部分组成:
apiversion
- 使用
kubectl api-version
查看当前可用的api - 常用api-version
- v1:K8s API的稳定版本,包含很多核心对象:Pod、Service
- apps/v1:包含一些通用的应用层的api组合,如:Deployments、RollingUpdates,and ReplicaSets
- batch/v1:包含批处理和类似作业的任务相关的对象,如Job、cronJob
- autoscaling/v1:允许根据不同的资源使用指标调整容器
- networking.k8s.io/v1:用于Ingress
- rbac.autoorization.k8s.io/v1:用于RBAC权限管理。
kind
用于指定资源对象的类型,如 pod、deployment、statefulset、job、cronjob
metadata
metadata常用的配置项有 name,namespace,即配置其显示的名字与归属的命名空间。
spec
一个嵌套字典与列表的配置项,也是主要的配置项,支持的子项非常多,根据资源对象的不同,子项会有不同的配置。
如一个pod的spec配置:
apiVersion: v1 #必选,版本号,例如v1
kind: Pod #必选,Pod
metadata: #必选,元数据
name: nginx #必选,Pod名称
labels: #自定义标签
app: nginx #自定义标签名字
spec: #必选,Pod中容器的详细定义
containers: #必选,Pod中容器列表,一个pod里会有多个容器
- name: nginx #必选,容器名称
image: nginx #必选,容器的镜像名称
imagePullPolicy: IfNotPresent # [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
ports: #需要暴露的端口库号列表
- containerPort: 80 #容器需要监听的端口号
restartPolicy: Always # [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
K8s如何快速编写Yaml
-
使用
kubectl create
生成yaml文件:kubectl create deployment web --image=nginx -o yaml > nginx_0725test.yaml
-
使用
kubectl get
导出yaml文件:kubectl get deploy nginx -o yaml > nginx_0725test2.yaml