声明式管理方法(yaml)文件:
1,适合对资源的修改操作
2,声明式管理依赖于yaml文件,所有的内容都在yamI文件当中
3,编辑好的yaml文件,还是要依靠陈述式命令发布到k8s集群当中
发布的三种命令:
create:只能创建,不能更新。从指定yaml文件中读取配置,创建服务。不能更新
apply -f:既可以创建资源对象也可以更新资源对象。如果yaml文件更改了,apply可以之间更新资源对象
工作中最多就是apply -f
delete -f:删除yaml文件中声明的资源对象。
yaml文件如何生成:
1,手打
2,可以根据已有的yaml文件进行修改。
通过已有的文件进行修改
例如:
查看:
kubectl edit deployments.apps nginx
把文件导出:
kubectl get deployments.apps nginx -o yaml > /opt/test.yaml
修改一下:
使用这个文件重新创建:
kubectl apply -f test.yaml
但是只能改一次
再次修改会报错,
可以使用强制修改
--force
kubectl apply -f test.yaml --force
修改直接加上force
所有的基于yaml文件的都可以导出
service
kubectl get svc nginx -o yaml > service.yaml
kubectl apply -f service.yaml
pod也可以导出yaml文件:
kubectl get pod nginx-589f6b958-ghkvm -o yaml
三种yaml文件的类型:
1、deployment的yaml文件 daemonset statefulset
2、service的yamI文件
3、不基于控制器的pod的yamI文件。
k8s当中支持两种声明式的资源管理方式:
1,yaml格式,用于配置和管理资源对象
2,json格式:主要用于api接口之间消息的传递。
一、deployment的yaml文件
查看deployment的格式
kubectl explain deployment
只有deployment api version是apps/v1
vim test.yaml
apiVersion: apps/v1
#声明API版本的标签
kind: Deployment
#定义资源的类型service/pod/deployment/Jod/ingress/daemonset/statefulset
metadata:
name: nginx1
namespace: chen
labels:
cheng: nginx1
#定义资源的元数据信息,资源名称,资源对象部署的命名空间,标签等等信息
spec:
#定义资源需要的参数和属性。
replicas: 3
#定义副本数
selector:
#定义标签选择器
matchLabels:
cheng: nginx1#上下保持一致
#选择匹配的标签
template:
#定义业务的模版,如果定义了多个副本,所有的副本的属性都会按照模版的配置进行匹配
。
metadata:
labels:
cheng: nginx1
#定义了pod的副本都使用元数据的标签和属性来进行匹配
spec:
containers:
- name: nginx
image: nginx:1.10
posts:#可以忽略
- containerPort: 443#可以忽略
#spec声明的是容器的相关参数,虽然我指定了容器的暴露端口是80,nginx默认的镜像就是80
#即使指定了其他端口,也不会改变容器的端口。改了服务还会报错。
命名空间要提前创建。
kubectl create namespace chen
创建
创建一个service
vim nginx-service.yaml
#定义api的版本
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: chen
labels:
cheng: nginx1
#元数据信息包括,service的名称,所属的命名空间,以及要匹配的deployment的标签一定要一致。
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30001
selector:
cheng: nginx1
#匹配所有的标签都是cheng:nginx1的pod的后端提供服务。
执行:
kubectl apply -f nginx-service.yaml
nodeport端口可以指定也可以不指定
默认的也是TCP
pod yaml文件
vim pod.yaml
#定义POD的APIVERSION
apiVersion: v1
#定义资源的类型
kind: Pod
#定义元数据信息,pod名称,命名空间,标签。
metadata:
name: centos1
namespace: chen
spec:
restartPolicy: Always
#restartPolicy指的是pod内的容器启动失败或者有问题的重启策略:Always Never Onfailure(只有异常才会重启,状态码非0,如果状态是0,不重启)
#restartPolicy指的是容器的重启策略,资源类型定义为deployment,容器的重启策略只能是Always
containers:
- name: centos
image: centos:7
执行:
查看拉取详情:
状态没有restart
已经运行结束退出了
改一下
重新运行
会一直重启:
在容器当中运行命令:
command
args
要在容器中运行两个参数,类似于docker的CMD和entrypoint
args可以理解docker中的CMD,给commnad传参。
command和args都会覆盖原容器的标准输出(CMD和ENTRYPOINT)
在容器当中定义执行命令
第一种格式:
多个命令要用分号隔开
查看详细信息:
到3600,自动睡眠
格式2:
多个命令一定要这个开头
kubectl delete pod centos1 -n chen
创建:
kubectl apply -f pod.yaml
在外面查看是否写入
第三种格式:
和args一样
command和args只能有一个
command和arg不要同时出现,除非你要传参
command和args只能有一 个。会把容器的标准输出覆盖。
不论是args和commmand都会覆盖CMD和ENTYRPOINT容器的标准输出。
总结:
三种发布方式:
蓝绿发布
灰布发布(重点)基于deployment的滚动发布,使用了一个机制 pause。resume继续。回滚:所有都升级完毕之后才可以回滚。
滚动发布 deployment默认发布方式。
三种yaml文件格式: