声明式管理方法

声明式管理方法(yaml)文件:

1,适合对资源的修改操作

2,声明式管理依赖于yaml文件,所有的内容都在yamI文件当中

3,编辑好的yaml文件,还是要依靠陈述式命令发布到k8s集群当中

发布的三种命令:

create:只能创建,不能更新。从指定yaml文件中读取配置,创建服务。不能更新

apply -f:既可以创建资源对象也可以更新资源对象。如果yaml文件更改了,apply可以之间更新资源对象

工作中最多就是apply -f

delete -f:删除yaml文件中声明的资源对象。

yaml文件如何生成:

1,手打

2,可以根据已有的yaml文件进行修改。

通过已有的文件进行修改

例如:

声明式管理方法_第1张图片

查看:

kubectl edit deployments.apps nginx

把文件导出:

kubectl get deployments.apps nginx -o yaml > /opt/test.yaml

修改一下:

声明式管理方法_第2张图片

使用这个文件重新创建:

kubectl apply -f test.yaml

但是只能改一次

再次修改会报错,

可以使用强制修改

--force

kubectl apply -f test.yaml --force

修改直接加上force

所有的基于yaml文件的都可以导出

service

kubectl get svc nginx -o yaml > service.yaml

声明式管理方法_第3张图片

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

创建

声明式管理方法_第4张图片

创建一个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

声明式管理方法_第5张图片

声明式管理方法_第6张图片

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

声明式管理方法_第7张图片

已经运行结束退出了

改一下

重新运行

会一直重启:

声明式管理方法_第8张图片

在容器当中运行命令:

command

args

要在容器中运行两个参数,类似于docker的CMD和entrypoint

args可以理解docker中的CMD,给commnad传参。

声明式管理方法_第9张图片

command和args都会覆盖原容器的标准输出(CMD和ENTRYPOINT)

声明式管理方法_第10张图片

声明式管理方法_第11张图片

在容器当中定义执行命令

第一种格式:

声明式管理方法_第12张图片

多个命令要用分号隔开

查看详细信息:

到3600,自动睡眠

声明式管理方法_第13张图片

格式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文件格式:

你可能感兴趣的:(linux,docker,kubernetes)