目录
一、声明式管理方法:YAML文件
1、yaml文件简介
2、yaml和json的主要区别:
3、YAML的语法格式
4、yaml文件组成部分
①控制器定义
5、查看api资源版本标签
6、编写nginx-deployment.yaml资源配置清单
6.1创建资源对象
6.2查看创建的pod资源
7、创建service服务并对外提供访问并测试
二、K8s中的port概述
①port
②nodeport
③targetport
④containerport
1、创建yaml文件模板
2、查看生产yaml格式
3、查看生成的json格式
4、通过yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
5、查看字段帮助信息
6、怎样可以更轻松的写yaml
6.1用run命令生成
6.2用get命令导出
6.3yaml文件的学习方法
三、具体案例
1、案例需求:
一、声明式管理方法:YAML文件
①适合对资源的修改操作
②声明式资源管理方法依赖于资源配置清单文件对资源进行管理
③资源配置清单文件有两种格式:yaml(人性化,已读),json(易于api接口解析)
④对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群中
⑤语法格式:kubectl create/apply/delete -f xxx.yaml
1、yaml文件简介
YAML仍然是一种标记语言,主要强调这种语言是以数据为中心,而不是以标记为中心,而像XML语言就使用了大量的标记。
YAML可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类型,还可以简单表达属组,散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构,各种配置文件。
yaml配置文件的后缀为.yml
2、yaml和json的主要区别:
①yaml使用空格缩进,这是python开发人员熟悉的领域
②javascript开发人员喜欢JSON,因为它是javascript的一个子集,可以直接在Javascript中解释和编写,同时使用简写方式生命JSON,在使用没有空格的典型变量名时,不需要键中的双引号。
③有很多解释器在YAML和JSON的所有语言中都能很好的工作。
④在许多情况下,yaml的空白格式可以更容易查看,因为格式化需要更人性化的方法
⑤如果您的编辑器中没有空格可见或缩进线指示符,那么yaml的空白虽然更紧凑,更容易查看,蛋可能难以手动编辑。
⑥JSON的序列化和反序列化要快得多,因为要检查的功能明显少于yaml,这使得更小更轻的代码能够处理JSON
⑦一个常见的误解是yaml需要较少的标点符号并且比JSON更紧凑,但这是完全错误的。空格是不可兼得,所以看起来字符比较少,但是如果你计算实际的空格是必要的,以便于正确解释yaml以及正确的缩进,你会发现yaml实际上需要比json更多的字符。json不使用空格来表示层次结构或分组,并且可以通过删除不必要的空格来轻松展平,以实现更紧凑的传输。
3、YAML的语法格式
Kubernetes支持yaml和json格式管理资源对象
JSON格式:主要用于api接口之间消息的传递
YAML格式:用于配置和管理,YAML的配置参数格式比较清晰
语法格式:
①大小写敏感
②以空格的方式缩进表示层级关系
③通常开头缩进两个空格(统一层级对应即可)
④不支持指标符tab缩进,只对空格表示缩进
⑤关键词字符后缩进一个空格,比如冒号都好后面需要缩进一个字符
⑥---表示yaml格式一个文件的开始
⑦支持“#”表示注释
4、yaml文件组成部分
①控制器定义
5、查看api资源版本标签
kubectl api-versions
如果是业务场景,一般首选使用 apps/v1(apps/v1 从 v1.9 版本开始提供 API)。
在 k8s v1.16 版本之前使用的是 extensions/v1beta1,extensions/v1beta1 从 v1.20 版本开始不再提供 Ingress 资源。
带有 beta 字样的代表的是测试版本,不用在生产环境中。
6、编写nginx-deployment.yaml资源配置清单
mkdir /opt/demo
cd /opt/demo/
参考模板:
vim nginx-deployment.yaml
apiVersion: apps/v1 #指定api版本标签
kind: Deployment #定义资源的类型/角色,deployment 为副本控制器,
此处资源类型可以是Deployment、Job、 Ingress、 Service等
metadata: #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
name: nginx-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
labels: #定义资源标签(Pod的标签)
app: nginx
spec: #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
replicas: 3 #定义副本数量
selector : #定义标签选择器
matchLabels: #定义匹配标签
app: nginx #匹配上面的标签,需与上面的标签定义的app保持一致
template: #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
metadata:
labels:
app: nginx
spec:
containers: #定义容器属性
- name: nginx #定义一个容器名,一个- name: 定义一个容器
image: nginx:1.15.4 #定义容器使用的镜像以及版本
ports:
- containerPort: 80 #定义容器的对外的端口
6.1创建资源对象
kubectl create -f nginx-deployment.yaml
或者
kubectl apply -f nginx-deployment.yaml
6.2查看创建的pod资源
kubectl get pods -o wide -n kube-public
kubectl get deploy -n kube-public
7、创建service服务并对外提供访问并测试
vim nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-demo1
namespace: kube-public
labels:
name: nginx-demo1
spec:
type: NodePort
ports:
- port: 8080
targetPort: 80
nodePort: 31111
selector:
app: nginx-demo1
kubectl apply -f nginx-service.yaml
kubectl get svc -n kube-public
在浏览器输入 nodeIP: nodePort 即可访问
http://192.168.223.11:31111
二、K8s中的port概述
①port
port是k8s集群内部访问service的端口,即通过clusterIP:port可以从Pod所在的Node上访问到service
②nodeport
nodeport是外部访问k8s集群中service的端口,通过nodeIP:nodeport可以从外部访问到某个service
③targetport
tarport是pod的端口,从port或nodeport来的流量经过kube-proxy反向代理负载均衡转发到后端pod的targetpod上,最后进入容器
④containerport
containerport是pod内部容器的端口,targetport映射到containerport
1、创建yaml文件模板
kubectl run --dry-run打印相应的api对象而不是执行创建
--dry-run:试运行
kubectl run nginx-ceshi --image=nginx --port=80 --dry-run
--dry-run表示试运行,不是真正的执行命令(测试命令是否正确),即并不会真的创建出pod和deployment实例,去掉该参数后即可真正执行命令。
2、查看生产yaml格式
使用--dry-run试运行可不触发生产命令,然后通过-o yaml可实现对其yaml资源配置清单的查看
kubectl run nginx-ceshi --image=nginx --port=80 --dry-run -o yaml
3、查看生成的json格式
可以通过-o json查看该命令产生的json配置清单
4、通过yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
kubectl run nginx-ceshi --image=nginx --port=80 --dry-run -o yaml > nginx-ceshi.yaml
模板:
vim nginx-ceshi.yaml
apiVersion: apps/v1betal #api 版本改成 api/v1
kind: Deployment
metadata:
creationTimestamp: null #删除
labels:
run: nginx-ceshi
name: nginx-ceshi
spec:
replicas: 3
selector:
matchLabels:
run: nginx-ceshi
strategy: {} #删除
template:
metadata:
creationTimestamp: null #删除
labels:
run: nginx-ceshi
spec:
containers:
- image: nginx
name: nginx-ceshi
ports:
- containerPort: 80
resources: {} #删除
status: {} #删除
生成镜像并查看
将现有的资源生成模板导出
kubectl get pod/nginx-deployment-6f9f6d866c-w2sdc -o yaml -n kube-public
###注现在最新版本的kubctl get 不支持 --export 参数
保存到文件中
kubectl get deployment.apps/nginx-deployment -o yaml -n kube-public > my-deploy.yaml
5、查看字段帮助信息
explain可以一层层的查看相关资源对象的帮助信息
kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers
6、怎样可以更轻松的写yaml
6.1用run命令生成
没有相关资源,使用run或者create命令--dry-run选项,后期可以修改yaml文件
kubectl run my-deploy --image=nginx --dry-run -o yaml > my-deploy.yaml
6.2用get命令导出
已有相关资源,使用get命令{--export选项:使用老版本的kubectl}
kubectl get deploy/nginx-deployment -o=yaml -n kube-public > new.yaml
6.3yaml文件的学习方法
①多看别人(官方)写的,能读懂
②能照着现场的文件改着用
③遇到不懂的,善用kubectl explain ...命令查看
三、具体案例
1、案例需求:
①自主式的pod pod
②资源名称:my-nginx-ky35
③命名空间:my-ky35
④容器镜像:nginx:1.14
⑤容器端口:80
⑥标签:njzb:my-ky35
⑦创建srvice去关联上面的pod
⑧修改页面,显示woshichaoren对外访问 输入地址就能访问
mkdir /opt/demo
[root@master01 ~]]#cd /opt/demo/
[root@master01 demo]]#vim pod-ns-svc.yaml