k8s---声明式资源管理(yml文件)

在k8s当中支持两种声明资源的方式:

1、 yaml格式:主要用于和管理资源对象

2、 json格式:主要用于在API接口之间进行消息传递

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

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

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

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

有三种方式:

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

apply -f:即可以创建资源对象也可以更新资源对象。如果yml文件更改了,apply可以直接更新资源对象。

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

yml文件如何生成:

1.手动书写

2.可以根据已有的资源,成功生成。

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


kubectl apply -f test.yaml --force
#强制执行yaml文件
#如果不想使用最新的deployment再创建yaml文件可以使用--force强制执行
kubectl get svc nginx-service -o yaml > /opt/service.yaml

常见的yaml类型

1、 deployment的yaml文件格式用于部署还有daemonset和statefulser

2、 service的yaml文件用于暴露服务端口

3、 不基于控制器的pod的yaml文件

k8s当中支持两种声明式的资源管理方式:

1.yml格式,用于配置和管理资源对象

2.json格式:主要用于在api接口之间消息的传递

如何查看deployment的格式模板

kubectl explain deployment

如何用yaml文件编写

cd /opt
vim nginx1.yml

apiVersion: apps/v1
#声明api版本标签
kind: Deployment
#定义资源的类型:service/pod/deployment/job/ingress/daemonset/statfluset
metadata: 
  name: nginx1
  namespace: zzr
  labels: 
    zhaozirui: nginx1
#定义资源的元数据信息 ,比如资源的名称,资源对象部署的命名看空间也可以在这里声明,标签等等信息
spec: 
#定义deployment的资源需要的参数属性。
  replicas: 3
#定义副本数
  selector:
#定义标签选择器
    matchLabels:
      zhaozirui: nginx1
#选择匹配的标签
  template:
#定义业务模板:如果定义了多个副本,所有的副本属性都会按照模板的配置进行匹配。
  metadata: 
    labels: 
      zhaozirui: nginx1
#定义了pod的副本都是用来元数据的标签和属性来进行匹配
    spec:
      containers: 
      - name: nginx
        image: nginx:1.10
        posts:
        - containerPort: 80
#spec声明的是容器的相关参数,虽然制定了容器的暴露端口号-80,如果镜像默认的端口不是80,依然没用。

如何暴露服务--service的yaml

vim nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: zzr
  labels:
    zhaozirui: nginx1
#元数据信息包括,service的名称,所属的命名空间,以及要匹配的deployment的标签。要和之前的保持一致。
spec: 
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
  selector:
    zhaozirui: nginx1
#匹配所有的标签都是zhaozirui:nginx1的pod的后端提供服务
wq

kubectl apply -f nginx-service.yaml
kubectl get svc -n zzr

创建pod的yaml文件

vim pod.yaml

apiVersion: v1
kind: Pod
#定义元数据信息,pod的名称,命名空间,标签
metadata:
  name: centos1
  namespace: zzr
spec:
  restartPolicy: Never
#restartPolicy指的是pod内的容器启动失败或者有问题的重启策略:Always Nerver Onfailure(只有异常退出才会重启,状态非0,如果状态码是0,不重启。),restartPolicy指的是容器的重启策略,资源类型定义为deployment,容器的重启策略只能是always。

  containers: 
  - name: centos
    image: centos:7
    
wq
kubectl apply -f pod.yaml
kubectl pods -n zzr
kubectl describe pod centos1 -n zzr

kubectl get pod -n zzr

restartPolicy的三种状态码

pod内的容器如果启动失败或者有问题时的重启策略 Always:永不重启

Never:从不重启

Onfailure:只有异常退出才会重启。状态码非0则重启.如果状态码是0则不重启

command和args

command,args:定义容器运行的命令参数(类似于docker中的CMD和entrypoint)

args:可以理解为docker中的CMD,给command传参

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

  containers:
  - name: centos
    image: centos:7
    command: ["echo"]
    args: ["hello,world!"]
#启动时候默认执行的命令
#args可以给command传参类似于(CMD和entrypoint)
#如果在yaml文件中定义了输出内容,就会覆盖掉原来容器内部的标准输出

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

args的书写

metadata:
  containers:
    args:
    - /bin/bash
    - -c
    - while true; do sleep 3600; done
#多个命令要用分号隔开
wq

kubectl apply -f pod.yaml
kubectl get pods -n guoqi
kubectl logs -f centos1 -n guoqi
kubectl describe pod centos1 -n zzr

换个写法:
metadata:
  containers:
    args: ["/bin/bash","-c","touch /opt/123.txt; echo 123 > /opt/123.txt; sleep 3600"]
    wq
    
kubectl apply -f pod.yml
kubectl get pods -n guoqi
kubectl exec -it centos1 -n guoqi --cat /opt/123.txt
直接查看容器内命令。

command写法

 写法1:
   containers:
  - name: centos
    image: centos:7
    command: ["/bin/bash", "-c", "touch /opt/123.txt; echo 123 > /opt/123.txt; sleep 3600"]
#在一行定义多个内容需要用逗号隔开。多个命令需要用分号隔开
#执行多个命令必须要加"/bin/bash", "-c"
 
 写法2:
  containers:
  - name: centos
    image: centos:7
    command: ["/usr/bin/test", "-e", "/etc/passwd"]
#这样的格式只能执行单个命令。需要加上绝对路径

command和args的总结

同一个yaml文件内command和args只能存在一个表示容器启动时的命令

除非需要传参的时候command和args可以同时出现

无论是args或者是command都会覆盖CMD和entrypoint标准输出

建议写在一行提高可读性

相关推荐
伪装成塔的小兵4 小时前
Windows使用docker部署fastgpt出现的一些问题
windows·docker·容器·oneapi·fastgpt
寂夜了无痕4 小时前
k8s容器运行时环境选型指南
云原生·kubernetes·k8s运行时环境选择
元气满满的热码式5 小时前
logstash中的input插件(http插件,graphite插件)
网络·网络协议·http·elasticsearch·云原生
转身後 默落8 小时前
11.Docker 之分布式仓库 Harbor
分布式·docker·容器
Swift社区8 小时前
【微服务优化】ELK日志聚合与查询性能提升实战指南
spring·elk·微服务·云原生·架构
guihong0048 小时前
深入解析Zookeeper脑裂问题与CAP取舍:从原理到实战
分布式·zookeeper·云原生
菩提云8 小时前
Deepseek存算分离安全部署手册
人工智能·深度学习·安全·docker·容器
努力的小T18 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
东风微鸣20 小时前
TTRSS 迁移实战
docker·云原生·kubernetes·可观察性
Smile_Gently1 天前
Docker
云原生·eureka