当前位置: 首页 > news >正文

k8s声明式管理方式(yaml文件实现)

目录

yaml文件

1.deployment的部署方式

2.service的部署方式

3.pod的部署方式

导出模版

容器的重启策略和传参

重启的策略

重启的策略有三种

1.Always 

2.Never 

3.OnFailure   

总结

传参

args给command传参

总结


首先在/opt目录下创建 mkdir k8s-yaml

cd k8s-yaml/

yaml文件

1.deployment的部署方式

首先 kubectl explain deployment  获取它的类型kind和标签version

vim nginx-deploy.yaml

apiVersion: apps/v1
#定义api版本的标签
kind: Deployment
#定义资源的类型(kind的类型:deployment job ingress service deamonset)或者角色
metadata:
#定义创建资源的元数据信息,包括资源的名称(pod的名称)、命名空间、pod的标签name: nginx1
#定义资源的名称
#  namesapces: xy102
#  定义命名空间labels:app: nginx1
#定义标签名就是app=nginx1  注意:上下文要一致
spec:
#spec是用来配置deployment资源需要的参数属性(副本数、匹配的标签以及容器的重启策略)
#这里顶格写就属于全部配置replicas: 3
#定义该资源pod的数量selector:matchLabels:
#selector定义标签的选择器  matchLabels:定义匹配的标签。注意:这里需要上下文保持一致app: nginx1
#以下都是来定义容器和pod的元数据  template:
#template定义业务模版,deployment定义了3个副本,所有pod的属性都会和template的设置保持一致metadata:labels:app: nginx1
#这里也需要和上下文保持一致spec:
#这里的spec定义pod内的容器containers:- name: nginximage: nginx:1.22
#这里就是--image=nginx:1.22,这里就是使用的镜像ports:- containerPort: 80
#如果nginx的端口是默认的就是80,这里ports可以不写,写了也无法改变容器内的端口。
#如果默认端口不是80,那就需要加上ports声明非默认端口。
#这里的端口就是dockerfile定义的镜像的端口      

注:pod里面有容器,但是是镜像定义容器,所以pod不能改变镜像

执行命令:kubectl apply -f nginx-deploy.yaml     如果有配置修改之后重新运行就好了

如果是基于yaml文件定义的资源对象

删除命令:kubectl delete -f nginx-deploy.yaml

2.service的部署方式

首先 kubectl explain service 获取它的类型kind和标签version

vim nginx-service.yaml

apiVersion: v1
#先定义api的标签
kind: Service
metadata:
#定义service的名称和标签name: nginx1-svc
#service的名称labels:app1: nginx1
#service的标签
spec:
#定义service的资源参数(端口映射、service类型、匹配的标签名)type: NodePortports:- port: 80
#这里是定义service的端口targetPort: 80
#这里是容器内的端口nodePort: 30001selector:app: nginx1
#匹配标签名  

执行命令:kubectl apply -f nginx-service.yaml

删除命令:kubectl delete -f nginx-service.yaml

此时就能对外访问了  访问master本机ip地址和30001即可

3.pod的部署方式

首先 kubectl explain pod 获取它的类型kind和标签version

vim nginx-pod.yaml

apiVersion: v1
#定义api版本的标签
kind: Pod
#定义资源的类型
metadata:
#定义创建资源的元数据信息name: nginx-podlabels:app: nginx-pod
spec:
#声明容器的参数containers:- name: nginximage: nginx:1.22ports:- containerPort: 80
#容器的端口hostPort: 80
#主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)
#如果这里做了hostport就不需要做service的端口映射

执行命令:kubectl apply -f nginx-pod.yaml

删除命令:kubectl delete -f nginx-pod.yaml

kubectl get pod -o wide  查看pod的部署在哪个节点上

因为hostport对应的是主机端口只是一个,所以对外访问的是这个node节点的本机ip地址

另外,用了hostport是不能轮询的

导出模版

kubectl create deployment nginx-de --image=nginx:1.22 --replicas=3

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

容器的重启策略和传参

重启的策略

restartPolicy 重启策略:作用就是来声明如果容器遇到问题,它的重启策略是什么

重启的策略有三种

1.Always 

表示只要启动失败就会一直重启   指定是容器

以pod为例写一个失败的例子,重启策略应该写在容器里面(就是restartPolicy写在spec下面)

apiVersion: v1
kind: Pod
metadata:name: centos-podlabels:app: centos-pod
spec:containers:- name: centosimage: centos:7restartPolicy: Always

执行 : kubectl apply -f centos-pod.yaml

此时就会出现completed,completed也就是运行过了结束了,然后退出了。

然后过一会就会出现报错

出现了CrashLoopBackOff 就表示容器启动失败

然后 kubectl describe pod centos-pod  查看详情,就会发现它重启次数是三,但是它一会又出现completed,所以always是三次为一停,过一会又重新启动,但是它的状态最后一直会保持CrashLoopBackOff表示启动失败

2.Never 

表示从不重启    docker的默认模式是never

3.OnFailure   

表示只有容器异常退出时才会重启 ,也就是返回码非0时才会对容器进行重启

总结

如果是deployment,那么容器的重启策略只能写Always,它默认就是Always,可以不写。

基于pod的yaml文件,三种重启策略都可以写。

传参

pod内的传参:command和args

在yaml文件当中command和args只能存在一个。args可以给command传参。

写法一:

执行:kubectl apply -f centos-pod.yaml

如果报以下的错误,可以添加 --force 强制执行

注:只有pod的yaml会有这种重复,就是提示有内容没有发生变化,所以需要加 --force强制执行。

写法二:

执行多个命令:

注:/bin/bash 多个命令必须要加/bin/bash
       -c指定输出命令的格式   
      执行多个命令时必须要加/bin/bash 和 -c   

args给command传参

kubectl logs -f centos-pod

总结

command和agrs如果不需要传参只能存在一个,不论是args还是command都会覆盖容器的标准输出(cmd和entrypoint)


http://www.mrgr.cn/news/15634.html

相关文章:

  • 20. Java中的fail-fast机制是什么?它是如何在集合中实现的?
  • Spring Bean加载耗时采集工具
  • python-带空格的数字层三角形
  • macos 系统 降级, 重装, 升级图文教程
  • 论文阅读——Compact Single-Feed Dual-Mode Antenna for Active RFID Tag Application
  • 华硕天选Air:开学季的性价比之巅
  • 无缝 CI/CD:如何在 Windows 环境中使用 Docker 和 Jenkins 自动化部署 .NET 应用
  • 数学符号-西格玛
  • 文件上传漏洞详解(持续更新…)
  • 加油卡系统开发,为什么加油卡系统这么受欢迎
  • Unity SceneView 相机聚焦到指定位置
  • Docker续5:docker部署nmt(mysql,nginx,tomcat)
  • 精选算法编程题
  • 《炉石传说》国服9月25日回归 预约活动上线:送金卡、皮肤
  • 金融上云方案中,国产虚拟化产品选型的重点考虑因素、自动化运维建设步骤及如何进行保障数据中心安全需求的存储设计等问题及解决方法|金融行业数字化QA合集③
  • 四通道非洲猪瘟检测仪
  • 小爱同学与大模型的完美融合:开启智能交互新时代
  • 深度学习分类模型训练代码模板
  • 【C语言从不挂科到高绩点】05-流程控制语句-switch语句
  • 【机器学习】支持向量机(SVM)的对偶性、核方法以及核技巧