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

news/2024/7/4 7:48:50 标签: kubernetes, 容器, 云原生

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

建议写在一行提高可读性


http://www.niftyadmin.cn/n/5300163.html

相关文章

test dbtest-03-对比 Liquibase、flyway、dbDeploy、dbsetup

详细对比 Liquibase、flyway、dbDeploy、dbsetup,给出对比表格 下面是一个简要的对比表格,涵盖了 Liquibase、Flyway、dbDeploy 和 DbSetup 这四个数据库变更管理工具的一些主要特点。 特点/工具LiquibaseFlywaydbDeployDbSetup开发语言Java&#xff0…

CAPL如何转发特定CAN报文和以太网报文

文章目录 前言一、环境搭建二、脚本设计思路三、CAPL脚本前言 最近接收到一个需求任务:监听汽车上ECU Channel 1的CAN报文和以太网报文,然后将特定的报文转发到Channel 2上,要实现这个转发CAN和以太网报文的功能,本文章使用Vector公司的VN5650设备来实现,下面是对CAN和车…

Mac环境下Parallels Desktop 19的安装和使用

为了后续构建漏洞靶场和渗透测试环境,我们需要提前准备好几套与宿主机隔离的工作环境(Windows、Linux等),在Mac上最常用的就是Paralles Desktop(PD)工具了,当前最新版本为19。接下来介绍如何安装…

在Vue开发中v-if指令和v-show指令的使用介绍和区别及使用场景

一、条件渲染 v-if v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回真值时才被渲染。 <h1 v-if"awesome">Vue is awesome!</h1>v-else 你也可以使用 v-else 为 v-if 添加一个“else 区块”。 <h1 v-if"awesome"&g…

【Jenkins】centos服务器部署jenkins2.426

Jenkins部署 版本选择说明 目前项目上用的版本是比较旧的&#xff0c;现在用不了&#xff0c;插件版本问题比较恶心。试过2.346&#xff0c;插件问题没解决&#xff0c; 单独找&#xff08;*.hpi&#xff09;插件匹配的版本太麻烦了。 前置环境部署 git 略 JDK11 该jenk…

隐身之术:深入解析代理模式的神秘力量

一、定义 代理模式&#xff08;Proxy Pattern)为其他对象提供一种代理以控制对这个对象的访问,属于结构型模式。 二、解决什么问题 主要解决在直接访问对象时带来的问题&#xff0c;比如说&#xff1a;要访问的对象在远程的机器上。在面向对象系统中&#xff0c;有些对象由于…

ChatGPT 进行 SEO的使用技巧

搜索引擎优化 (SEO) 是使网站对搜索引擎友好的一种不断发展的实践。 自搜索引擎和新兴技术的发展以来&#xff0c;它从未保持不变。 最近发布的 ChatGPT 是一种人工智能对话工具&#xff0c;似乎在搜索引擎优化方面有很好的应用。 从创建吸引人的标题到只需一个简短的提示就可…

SOEM控制伺服电机方法

之前我写了一个控制伺服的程序&#xff0c;但是方式是错误的&#xff0c;后来也不怎么SOEM了&#xff0c;最近有用到&#xff0c;就重新写了一个测试程序&#xff0c;重新发布一下 我使用的是23位编码器电机 #include <stdio.h> #include <sys/time.h> #include &…