声明式管理方法(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)