声明式管理方法(yaml文件)
声明式管理方法(yaml文件):
1、适合对资源的修改操作
2、声明式管理依赖于yaml文件,所有的内容都在yaml文件当中声明
3、编辑好的yaml文件,还是要依靠陈述式的命令发布到k8s集群当中
kubectl create:只能创建,不能更新。从指定的yaml文件中读取配置,创建服务,不能更新
kubectl apply -f:既可以创建资源对象也可以更新资源对象。如果yaml文件更改了,apply可以直接更新资源对象
kubectl delete -f:删除yaml文件当中声明的资源对象
yaml文件如何生成:
1、手打
2、可以根据已有的资源,直接生成
(1)deployment的yaml文件 daemonset statefulset
(2)service的yaml文件
(3)不基于控制器的pod的yaml文件
pod svc都可以修改
然后把pod文件弄到/opt
kubectl get pod service nginx -o yaml > nginx-svc.yaml
kubectl apply -f nginx-svc.yml
k8s当中支持声明式的资源管理方式:
1、yaml格式,用于配置和管理资源对象
2、json格式:主要用于在api接口之间消息的传递
command和args
定义容器运行的命令参数,类似于docker的CMD和entrypoint
args可以理解为docker中的cmd,可以给command传参
command和args都会覆盖原容器的标准输出
command喝args只能有一个。不然会把容器的标准输出覆盖。不论是args或者command都会覆盖CMD和entyrpoint
deployment
service和pod都是v1
要先创建命名空间
apiVersion: apps/v1
#声明API版本的标签
kind: Deployment
#定义资源的类型service/pod/deployment/Job/ingress/daemonset/statefulset
metadata:
name: nginx1
namespace: guoqi
labels:
ky32: nginx1
#定义资源的元数据信息,资源名称,资源对象部署的命名空间,标签等等信息
spec:
#定义deployment的资源需要的参数属性
replicas: 3
#定义副本数
selector:
#定义标签选择器
matchLabels:
ky32: nginx1
#选择匹配的标签
template:
#定义业务模板,如果定义了多个副本,所有的副本的属性都会按照模板的配置进行匹配
metadata:
labels:
ky32: nginx1
#定义了pod的副本都使用元数据的标签和属性来进行匹配
spec:
containers:
- name: nginx
image: nginx:1.10
#posts:
#- containerPort: 80
#这里的spec是声明容器的相关参数,虽然我制定了容器的暴露端口是80,nginx默认的镜像就是80,即使指定了其他的端口,也不会改变容器的端口
apiVersion: v1
#定义API的版本
kind: Service
metadata:
name: nginx-service
namespace: guoqi
labels:
ky32: nginx1
#元数据信息包括service的名称,所属的命名空间,以及要匹配的deployment的标签,要和之前的保持一致
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
ky32: nginx1
#匹配所有的标签都是ky32:nginx1的后端提供服务
30000端口可加可不加
apiVersion: v1
#定义POD的apiversion
kind: Pod
#定义资源的类型
metadata:
#定义元数据信息,pod的名称,命名空间,标签
name: centos1
namespace: guoqi
spec:
restartPolicy: Never
#restartPolicy指的是pod内的容器启动失败或者有问题的重启策略:Always Never Onfalie(只有异常退出才会重启,状态非0,如果状态是0,不重启),restartPolicy指的是容>器的重启策略,资源类型定义为deployment,容器的重启策略只能是Always
containers:
- name: centos
image: centos:7
command: [“/bin/bash”,”-c”,”touch /opt/123.txt;echo 123 > /opt/123.txt;sleep 3600”]
总结:
三种发布方式:
蓝绿发布
灰度发布(重点)基于deployment的滚动发布,使用了一个机制 pause。resume继续。回滚:所有都升级完毕之后才可以回滚
滚动发布
deployment
service
pod
command和args不要同时出现,除非你要传参,都会容器的标准输出(CMD和ENTRYPOINT)