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标准输出

建议写在一行提高可读性

相关推荐
阿里云云原生3 小时前
深入内核:拆解 OpenTelemetry eBPF 探针如何优雅地“透视”多语言微服务?
云原生
2601_961875247 小时前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj7 小时前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
程序员老赵8 小时前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
正经教主8 小时前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
kiros_wang8 小时前
Docker 使用完整指南
运维·docker·容器
正经教主9 小时前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器
qq_4523962310 小时前
第十三篇:《K8s 安全基础:RBAC、ServiceAccount、Pod Security》
java·安全·kubernetes
睡不醒男孩03082311 小时前
云原生运维实战:高并发架构下的云原生可观测性、韧性降级与自动化干预体系
数据库·kubernetes·高并发·prometheus·devops·sre·缓存调优
qq_4523962311 小时前
第十四篇:《K8s 网络模型与 CNI 插件(Calico、Flannel、Cilium)》
网络·kubernetes·php