K8S-Pod的环境变量,重启策略,数据持久化,资源限制

news2025/1/22 7:05:50

1. Pod容器的三种重启策略

注意:k8s所谓的重启容器指的是重新创建容器

cat 07-restartPolicy.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-web-imagepullpolicy-always
spec:
  nodeName: k8s233.oldboyedu.com
  ## 当容器异常退出时,始终重启容器
  restartPolicy: Always
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/linux85-web:v1 
    imagePullPolicy: Always 
    command:
    - "sleep"
    - "10"
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-web-imagepullpolicy-onfailure
spec:
  nodeName: k8s233.oldboyedu.com
  ## 当容器正常退出时不会重启容器,当容器异常退出时,会重启容器
  restartPolicy: OnFailure
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/linux85-web:v1 
    imagePullPolicy: Always 
    command:
    - "sleep"
    - "10"
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-web-imagepullpolicy-never
spec:
  nodeName: k8s233.oldboyedu.com
  ## 当容器退出时,始终不重启容器
  restartPolicy: Never
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/linux85-web:v1 
    imagePullPolicy: Always 
    command:
    - "sleep"
    - "10"

2. 如何向指定的容器传递环境变量

## 编写资源清单
apiVersion: v1
kind: Pod
metadata:
  name: nginx-web-env
spec:
  nodeName: k8s233.oldboyedu.com
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/linux85-web:v1 
    ##像容器传递环境变量
    env:
      ## 指定变量的名称
    - name: SCHOOL
      ## 指定变量的值
      value: oldboyedu
    - name: CLASS
      value: linux85
    - name: OLDBOYEDU_POD_NAME
     ## 不使用自定义的变量值,而是引用别处的值
      valueFrom: 
         ## 值引用某个字段
        fieldRef:
            ## 指定字段的路径
           fieldPath: "metadata.name"
    - name: OLDBOUEDU_NODENAME
      valueFrom:
        fieldRef:
           fieldPath: "spec.nodeName"

3. 数据持久化之emptyDir 

当我们不使用存储卷的时候

##编写资源清单
apiVersion: v1
kind: Pod
metadata:
  name: nginx-web-volume-emptydir-001
spec:
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/nginx:1.20.1-alpine

我们将nginx改为指定的内容

我们当nginx这个容器强行终止,由于容器重启策略,容器会自动重启。

 此时我们看到容器重启一次

当我们再次访问nginx的时候,显然这不是我们期望的结果。所以我们用到了数据持久化

## 编写资源清单
apiVersion: v1
kind: Pod
metadata:
  name: nginx-web-volume-emptydir-001
spec:
 ##定义存储卷
  volumes:
  ## 指定存储卷名称
  - name: data01
    ## 指定存储卷类型位emptyDir类型
    ##  当pod被删除时,数据会被随之删除。它的作用是:1. 对容器数据进行持久化存储,当删除容器时,数据不会丢失。 2. 可以实现同一个Pod内不同容器的数据共享
    emptyDir: {}
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/nginx:1.20.1-alpine
    ##指定挂载点
    volumeMounts:
   ## 指定存储卷名称
    - name: data01
   ## 挂载目录
      mountPath: /usr/share/nginx/html
   #    volumeMounts:
   ## 指定存储卷名称
    - name: data01
   ## 挂载目录
      mountPath: /usr/share/nginx/html
   - name: alpine
    image: harbor.oldboyedu.com/linux/alpine:latest
    stdin: true
    volumeMounts:
    - name: data01
      mountPath: /oldboyedu-data

4. 数据持久化之hostPath

## 编写资源清单
apiVersion: v1
kind: Pod
metadata:
  name: volume-hostdir-002
spec:
  nodeName: k8s233.oldboyedu.com
  volumes:
  - name: linux85-data
    ## 指定类型为宿主机存储卷,该存储卷主要用于容器访问宿主机路径的需求
    hostPath:
      ## 指定存储卷路径
      path: /oldboyedu-data
  containers:
  - name: linux 
    image: harbor.oldboyedu.com/linux/alpine:latest
    stdin: true
    volumeMounts:
      ## 指定存储卷名称
    - name: linux85-data
      ## 指定挂载点
      mountPath: /oldboyedu-data

 查看调度的节点并创建内容

到k8s233节点创建目录并写点内容 

 回到master节点进入容器查看是否有内容,我们将123改为456,在回到k8s233节点查看

 

5. 数据持久化之nfs

## 所有节点需要安装nfs相关的软件包
yum -y install  nfs-utils

## k8s231节点设置共享目录
mkdir -p /oldboyedu/data/kubernetes
cat > /oldboyedu/data/kubernetes <<'EOF'
/oldboyedu/data/kubernets *(rw,no_root_squash)
EOF

## 设置nfs开机自启
systemctl enable --now nfs

## 检测服务的挂载信息
exportfs

## 在别的节点挂载nfs并测试
mount -t nfs k8s231.oldboyedu.com:/oldboyedu/data/kubernetes /mnt/
## 编写测试文件 
apiVersion: v1
kind: Pod
metadata:
  name: volume-nfs-001
spec:
  nodeName: k8s232.oldboyedu.com
  volumes:
  - name: data
    ## 指定存储卷类型位nfs,可以跨节点共享数据
    nfs:
    ## 指定nfs服务器的地址
     server: 10.0.0.231
    ## 指定nfs对外暴露的地址
     path: /oldboyedu/data/kubernets
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/nginx:1.20.1-alpine
    volumeMounts:
    - name: data
      mountPath: /usr/share/nginx/html
---
apiVersion: v1
kind: Pod
metadata:
  name: volume-nfs-002
spec:
  nodeName: k8s233.oldboyedu.com
  volumes:
  - name: data
    nfs:
      server: 10.0.0.231
      path: /oldboyedu/data/kubernets
  containers:
  - name: linux 
    image: harbor.oldboyedu.com/linux/alpine:latest
    stdin: true
    volumeMounts:
    - name: data
      mountPath: /oldboyedu-data

6.容器的资源限制

## 编写资源清单
cat 12-nginx-resource.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: stress-002
spec:
  containers:
  - name: stress
    image: jasonyin2020/oldboyedu-linux-tools:v0.1
    args:
    - "tail"
    - "-f"
    - "/etc/hosts"
    ##对容器镜像资源限制
    resources:
     ## 期望目标节点有的资源大小
      requests:
      ## 要求目标节点有10G的可用内存
        memory: 256M
      ## 指定cpu的核心数固定单位1core=1000m
        cpu: 500m
     ##配置资源的使用上限
      limits:
        memory: 500M
        cpu: 1

7. configMap的资源定义及增删改查

1. configMap数据会存储到etcd数据库中,其应用场景主要在于应用程序配置。

2. configMap支持的数据类型:

        (1).键值对

        (2).多行数据

3. Pod使用configMap资源有两种常见方式:

        (1).变量注入

        (2).数据卷挂载

 定义configMap(简称cm)资源

## 编写资源清单
apiVersion: v1
kind: ConfigMap
metadata:
 name: config-demo
##定义cm资源的数据
data:
 school: oldboyedu
 class: linux85
 
 ## 定义多行数据
 my.cfg: |
    datadir: "/var/lib/mysql"
    basedir: "/usr/share/mysql"
    socket: "/tmp/mysql.socket"
 student.info: |
    xingzhibang: "xulingyan"
    xinghui: "linux"
    xulingyan: "xingzhibang" 

8. Pod基于env环境变量引入cm资源 

## 编写资源清单
cat 02-cm-env.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-web-env
spec:
  nodeName: k8s233.oldboyedu.com
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/linux85-web:v1 
    env:
    - name: SCHOOL_LINUX_SCOHHL
      valueFrom:
        configMapKeyRef:
          ## 指定configmap的key
          key: school
          ##指定config的名称
          name: config-demo
    - name: SCHOOL_LINUX_CLASS
      valueFrom:
       configMapKeyRef:
          name: config-demo
          key: class
    - name: SCHOOL_LINUX_mycfg
      valueFrom:
        configMapKeyRef:
          name: config-demo
          key: my.cfg
    - name: SCHOOL_LINUX_studentinfo
      valueFrom:
        configMapKeyRef:
          name: config-demo
          key: student.info

查看环境变量 

9. Pod基于存储卷的方式引入cm资源

##编写资源清单
cat 03-cm-volumes.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: volume-cm-003
spec:
  nodeName: k8s232.oldboyedu.com
  volumes:
  - name: data
    ## 指定存储据的类型为configmap
    configMap:
     ##指定configmap的名称
     name: config-demo
     ##引用conconfigmap的key
     items:
      ##指定key名称
     - key: student.info
      ## 可以理解为指定文件的名称
       path: oldboylinux-student.info
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/nginx:1.20.1-alpine
    command:
    - "tail"
    - "-f"
    - "/etc/hosts"
    volumeMounts:
    - name: data
      mountPath: /etc/nginx/nginx.conf
      ## 当subPath的值和configMap.items.path相同时,mountPath的挂载点是一个文件而非是目录了
      subPath: oldboylinux-student.info

10. port的端口映射

cat 04-games-001.yaml 
apiVersion: v1
kind: Pod
metadata:
 name: linux85-games
spec:
 nodeName: k8s232.oldboylinux.com
 volumes:
 - name: data
   configMap:
     name: oldboyedu-linux85
     items:
     - key: nginx.conf
       path: nginx.conf
 containers:
 - name: game
   images: harbor.oldboyedu.com/oldboy-edu-games/jasonyyin2020/oldboyedu-games:v0.1
   volumeMounts:
   - name: data
     mountPath: /usr/local/nginx/conf/nginx.conf
     subPath: nginx.conf
    ## 指定容器的端口映射相关字段
    ports: 
     # 指定容器的端口号
    - containerPort: 80
     # 绑定主机的IP地址
      hostIP: "0.0.0.0"
     # 指定绑定的端口号
      hostPort: 88
     ## 给该端口起一个名字
      name: game 

11. secret资源的增删改查

cat 01-secret-demo.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: es-https
data:
 dataname: ZWxhc3RpYwo=
 password: b2xkYm95ZWR1Cg==

 只显示字节,不显示具体内容

12. Pod基于env环境变量引入secret资源 

cat 02-secret-env.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-web-secret
spec:
  nodeName: k8s233.oldboyedu.com
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/linux85-web:v1 
    env:
    - name: SCHOOL_LINUX_DATANAME
      valueFrom:
         ## 指定引用的secret资源
          secretKeyRef:
         ## 指定secret的名称
           name: es-https
         ## 指定secret的KEY
           key: dataname
    - name: SCHOOL_LINUX-PASSWORD
      valueFrom:
          secretKeyRef:
           name: es-https
           key: password

13. Pod基于存储卷引用secret资源 

cat 03-secret-volumes.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: volume-secret-004
spec:
  nodeName: k8s232.oldboyedu.com
  volumes:
  - name: data
    ## 指定存储据的类型为secret
    secret:
     ##指定secret的名称
     secretName: es-https
     ##引用secret的key
     items:
      ##指定secret名称
     - key: dataname
      ## 可以暂时理解为指定文件的名称
       path: dataname.info
     - key: password
       path: password
  containers:
  - name: nginx
    image: harbor.oldboyedu.com/web/nginx:1.20.1-alpine
    command:
    - "tail"
    - "-f"
    - "/etc/hosts"
    volumeMounts:
    - name: data
      mountPath: /oldboyedu-data
     # subPath: oldboylinux-student.info

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280229.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见Arthas命令与实践

Arthas 官网&#xff1a;https://arthas.aliyun.com/doc/&#xff0c;官方文档对 Arthas 的每个命令都做出了介绍和解释&#xff0c;并且还有在线教程&#xff0c;方便学习和熟悉命令。 Arthas Idea 的 IDEA 插件。 这是一款能快速生成 Arthas命令的插件&#xff0c;可快速生成…

Django学习笔记(安装和环境配置)-01

Django学习笔记(安装和环境配置)-01 一、创建python环境 1、可以通过安装Anaconda来创建一个python环境 # 创建一个虚拟python环境 conda create -n django python3.8 # 切换激活到创建的环境中 activate django2、安装django # 进入虚拟环境中安装django框架 pip install …

C# 委托和事件思维导图

思维导图 下载链接腾讯云盘 https://share.weiyun.com/fxBH9ESl

css动画水球图

由于echarts水球图动画会导致ios卡顿&#xff0c;所以纯css模拟 展示效果 组件 <template><div class"water-box"><div class"water"><div class"progress" :style"{ --newProgress: newProgress % }"><…

Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )

一、文件处理 1.1、文件操作的重要性和应用场景 1.1.1、重要性 数据持久化&#xff1a; 文件是存储数据的一种非常基本且重要的方式。通过文件&#xff0c;我们可 以将程序运行时产生的数据永久保存下来&#xff0c;以便将来使用。 跨平台兼容性&#xff1a; 文件是一种通用…

电脑如何访问手机文件?

手机和电脑已经深深融入了我们的日常生活&#xff0c;无时无刻不在为我们提供服务。除了电脑远程操控电脑外&#xff0c;我们还可以在电脑上轻松地访问Android或iPhone手机上的文件。那么&#xff0c;如何使用电脑远程访问手机上的文件呢&#xff1f; 如何使用电脑访问手机文件…

stm32 L051 adc配置及代码实例解析

一 cude的设置&#xff1a; 1. 接口的基本设置&#xff1a; 2. 参数的设置&#xff1a; 二 代码的逻辑&#xff1a; 1. 上面的直接生成代码&#xff0c;然后使用下面源码即可读到adc的数据&#xff1a; void adc_battery_start(void) {uint32_t ADC_value 0;HAL_ADC_Start(&…

Vue3初学之Element Plus Dialog对话框,Message组件,MessageBox组件

Dialog的使用&#xff1a; 控制弹窗的显示和隐藏 <template><div><el-button click"dialogVisible true">打开弹窗</el-button><el-dialogv-model"dialogVisible"title"提示"width"30%":before-close&qu…

C++实现矩阵Matrix类 实现基本运算

本系列文章致力于实现“手搓有限元&#xff0c;干翻Ansys的目标”&#xff0c;基本框架为前端显示使用QT实现交互&#xff0c;后端计算采用Visual Studio C。 目录 Matrix类 1、public function 1.1、构造函数与析构函数 1.2、获取矩阵数值 1.3、设置矩阵 1.4、矩阵转置…

数据库-多表关系

项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构。由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系。 多表关系&#xff1a; 一对多 ( 多对一 ) 一对一 多对多 多表关系 …

【STM32G4xx的CAN驱动记录】

STM32G4xx的CAN驱动记录 CAN说明CAN的波特率计算数据测试总结 本文主要记录了基于STM32G4xx的CAN接口解析某型号雷达数据遇到的问题及规避方法&#xff0c;CAN总线波特率500Kbps&#xff0c;采样点要求80%附近。 注意CAN总线同步段的时间&#xff01;&#xff01;&#xff01; …

Cyber Security 101-Security Solutions-Vulnerability Scanner Overview(漏洞扫描程序概述)

了解漏洞扫描程序及其在实际场景中的工作原理。 任务1&#xff1a;什么是漏洞? 想象一下你住在一个小而可爱的房子里。有一天&#xff0c;你注意到 你的屋顶有很多小洞。如果不处理&#xff0c;这些小孔 可能会导致重大问题。下雨时&#xff0c;水会流过来 这些泄漏并损坏您…

Node.js 完全教程:从入门到精通

Node.js 完全教程&#xff1a;从入门到精通 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;允许开发者在服务器端使用 JavaScript。它的非阻塞 I/O 和事件驱动架构使得 Node.js 非常适合于构建高性能的网络应用。本文将详细介绍 Node.js 的安装、基本语…

【经验分享】ARM Linux-RT内核实时系统性能评估工具

【经验分享】ARM Linux-RT内核实时系统性能评估工具 前言下载和编译方法常用工具介绍总结 前言 最近在研究Linux-RT实时系统&#xff0c;介绍下常用的实时系统的性能评估工具。 下载和编译方法 用git下载 git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.…

C++ ——— 模拟实现 vector 类

目录 vector 类的框架 无参数的构造函数 析构函数 获取有效数据个数 获取容量 重载 [] 运算符 可读可写版本 只可读版本 扩容 尾插 实现迭代器 可读可写版本 只可读版本 自定义设置size长度和内容 在任意位置插入 删除任意位置的数据 赋值重载 vector 类的框…

02内存结构篇(D4_JVM内存分配机制)

目录 一、对象的创建 1. 类加载检查 2. 分配内存 3. 初始化零值 4. 设置对象头 32位对象头 64位对象头 5. 执行方法 二、对象大小与指针压缩 三、对象内存分配 1. 对象内存分配流程图 2. 对象栈上分配 3.3 对象在Eden区分配 3.4 大对象直接进入老年代 3.5 长期存…

异步 进程 Promise规范及应用

异步 两个或多个事件不同时存在或发生&#xff0c;区别于同步&#xff0c;同步是顺序执行从上到下&#xff0c;而异步不需要顺序执行&#xff0c;且不依赖于前面的事情是否已完成。 举例&#xff1a; //异步执行 let count 1; let timer setTimeout(function () {count…

C#树图显示目录下所有文件以及文件大小

C#树图显示目录下所有文件以及文件大小 我们在打开某个目录属性时,可以查看到有大小信息.如下图 而一个目录(文件夹)System.IO.Directory是没有FileSize或者Length属性的. 目录(文件夹)的大小是指该目录下所有子目录和所有文件大小的累加,按字节为单位. 新建窗体应用程序Get…

力扣707题——设计链表

#题目 从零开始设计链表&#xff0c;我们拆分成两次任务&#xff0c;今天先看1 ,2 ,4 #代码

机器学习09-Pytorch功能拆解

机器学习09-Pytorch功能拆解 我个人是Java程序员&#xff0c;关于Python代码的使用过程中的相关代码事项&#xff0c;在此进行记录 文章目录 机器学习09-Pytorch功能拆解1-核心逻辑脉络2-个人备注3-Pytorch软件包拆解1-Python有参和无参构造构造方法的基本语法示例解释注意事项…