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)

相关推荐
爱吃番茄的小狐狸5 小时前
Docker镜像下载-使用github action- 解决无法下载docker镜像的问题
docker·容器·github
andy7_6 小时前
运行在docker环境下的图片压缩小工具
运维·docker·容器
七夜zippoe7 小时前
nacos和eureka的区别详解
云原生·eureka
唐大爹7 小时前
kubeadm方式安装k8s续:
云原生·容器·kubernetes
陈小肚7 小时前
openeuler 22.03 lts sp4 使用 kubeadm 部署 k8s-v1.28.2 高可用集群
kubernetes
ly14356786197 小时前
94 、k8s之rbac
云原生·容器·kubernetes
.生产的驴9 小时前
Docker 消息队列RabbitMQ 安装延迟消息插件
运维·spring boot·后端·docker·容器·rabbitmq·java-rabbitmq
Lill_bin9 小时前
ElasticSearch底层原理解析
大数据·分布式·elasticsearch·搜索引擎·zookeeper·云原生·jenkins
问道飞鱼10 小时前
kubenets基础-kubectl常用命令行
kubernetes
阿里云云原生19 小时前
Serverless 安全新杀器:云安全中心护航容器安全
安全·云原生·serverless