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

bash 复制代码
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: nginx
        image: 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

bash 复制代码
apiVersion: v1
#先定义api的标签
kind: Service
metadata:
#定义service的名称和标签
  name: nginx1-svc
#service的名称
  labels:
    app1: nginx1
#service的标签
spec:
#定义service的资源参数(端口映射、service类型、匹配的标签名)
  type: NodePort
  ports:
  - port: 80
#这里是定义service的端口
    targetPort: 80
#这里是容器内的端口
    nodePort: 30001
  selector:
    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

bash 复制代码
apiVersion: v1
#定义api版本的标签
kind: Pod
#定义资源的类型
metadata:
#定义创建资源的元数据信息
  name: nginx-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数
  containers:
  - name: nginx
    image: nginx:1.22
    ports:
    - 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下面)

bash 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: centos-pod
spec:
  containers:
  - name: centos
    image: centos:7
  restartPolicy: 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)

相关推荐
hackchen3 小时前
NexusTerminal一款视频移动端的webSSH
docker·云原生·eureka·web-ssh
ahhhhaaaa-8 小时前
【k8s】阿里云ACK服务中GPU实例部署问题
阿里云·云原生·容器·kubernetes·云计算
熊出没9 小时前
阿里云云原生数据库PolarDB和普通云数据库的区别?
数据库·阿里云·云原生
谷新龙00110 小时前
docker compose部署kafka
docker·容器·kafka
David爱编程11 小时前
Docker Daemon 调优全解,打造高性能守护进程配置!
后端·docker·容器
上海运维Q先生12 小时前
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
云原生·k8s·cilium
掘金-我是哪吒13 小时前
分布式微服务系统架构第147集:JavaPlus技术文档平台日更
分布式·微服务·云原生·架构·系统架构
wearegogog12316 小时前
Docker Buildx 简介与安装指南
运维·docker·容器
955.19 小时前
k8s从入门到放弃之k3s轻量级
云原生·容器·kubernetes