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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

03垃圾回收篇(D1_垃圾收集器算法底层导论)

目录 一、为什么我们要去了解垃圾收集和内存分配 二、对象已死&#xff1f; 1. 引用计数算法 2. 可达性分析算法 3. 再谈引用 4. 生存还是死亡 5. 回收方法区 三、垃圾收集算法 1. 简介 2. 分代收集理论 2.1. 弱分代/强分代假说 2.2. 前面两代假说的缺陷 3. 标记-清…

【wiki知识库】08.添加用户登录功能--后端SpringBoot部分

目录 一、今日目标? 二、SpringBoot后端实现 2.1 新增UserLoginParam 2.2 修改UserController 2.3 UserServiceImpl代码 2.4 创建用户上下文工具类 2.5?通过token校验用户&#xff08;重要&#xff09; 2.6 创建WebMvcConfig 2.7 用户权限校验拦截器 一、今日目标 上…

分布式 IO 模块:开启药品罐装产线高效生产新纪元

在药品生产的精密领域&#xff0c;每一个环节都关乎着客户的健康与安全。药品罐装产线作为药品生产的关键环节&#xff0c;其高效运行与精准控制至关重要。明达技术MR30分布式 IO 模块&#xff0c;正以其卓越的性能&#xff0c;成为实现药品罐装产线高效控制&#xff0c;确保产…

【北京迅为】iTOP-4412全能版使用手册-第八十七章 安装Android Studio

iTOP-4412全能版采用四核Cortex-A9&#xff0c;主频为1.4GHz-1.6GHz&#xff0c;配备S5M8767 电源管理&#xff0c;集成USB HUB,选用高品质板对板连接器稳定可靠&#xff0c;大厂生产&#xff0c;做工精良。接口一应俱全&#xff0c;开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

基于海思soc的智能产品开发(视频的后续开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们讨论了camera&#xff0c;也讨论了屏幕驱动&#xff0c;这些都是基础的部分。关键是&#xff0c;我们拿到了这些视频数据之后&#xff0c;…

Linux -- HTTP 请求 与 响应 报文

目录 请求报文&#xff1a; 请求方法 响应报文&#xff1a; 状态码 与 状态码描述 共性 常见的报头 请求报文&#xff1a; 请求方法 方法说明GET获取资源POST传输实体主体PUT传输文件HEAD获得报文首部DELETE删除文件OPTIONS询问支持的方法TRACE追踪路径CONNECT要求用…

HTML<img>标签

例子 如何插入图片&#xff1a; <img src"img_girl.jpg" alt"Girl in a jacket" width"500" height"600"> 下面有更多“自己尝试”的示例。 定义和用法 该<img>标签用于在 HTML 页面中嵌入图像。 从技术上讲&#x…

C++ 面向对象(继承)

三、继承 3.1 继承的概念 基于一个已有的类 去重新定义一个新的类&#xff0c;这种方式我们叫做继承 关于继承的称呼 一个类B 继承来自 类 A 我们一般称呼 A类&#xff1a;父类 基类 B类: 子类 派生类 B继承自A A 派生了B 示例图的语法 class vehicle // 车类 {}class …

mfc操作json示例

首先下载cJSON,加入项目; 构建工程,如果出现, fatal error C1010: unexpected end of file while looking for precompiled head 在cJSON.c文件的头部加入#include "stdafx.h"; 看情况,可能是加到.h或者是.cpp文件的头部,它如果有包含头文件, #include &…

基于微信小程序的模拟考试系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Android10.0定制服务 APK安装或者更新过自动打开APK

需求描述 当用户APK安装|更新 成功之后自动打开APK。 实现思路 编写服务 注册接受安装广播 并判断安装的APK包名是否为客户APK包名,并自动打开。 具体实现 diff --git a/android/build/make/core/tasks/check_boot_jars/package_whitelist.txt b/android/build/make/cor…

linux 下tensorrt的yolov8的前向推理(python 版本)的实现

一、yolov8的python实现的环境搭建 #通过pip安装 pip install ultralytics #通过git克隆GitHub仓库 git clone <https://github.com/ultralytics/ultralytics.git> cd ultralytics #安装依赖 pip install -r requirements.txt #执行推理 yolo predict model./yolov8n.pt …

AI News(1/21/2025):OpenAI 安全疏忽:ChatGPT漏洞引发DDoS风险/OpenAI 代理工具即将发布

1、OpenAI 的安全疏忽&#xff1a;ChatGPT API 漏洞引发DDoS风险 德国安全研究员 Benjamin Flesch 发现了一个严重的安全漏洞&#xff1a;攻击者可以通过向 ChatGPT API 发送一个 HTTP 请求&#xff0c;利用 ChatGPT 的爬虫对目标网站发起 DDoS 攻击。该漏洞源于 OpenAI 在处理…

【数据挖掘实战】 房价预测

本次对kaggle中的入门级数据集&#xff0c;房价回归数据集进行数据挖掘&#xff0c;预测房屋价格。 本人主页&#xff1a;机器学习司猫白 机器学习专栏&#xff1a;机器学习实战 PyTorch入门专栏&#xff1a;PyTorch入门 深度学习实战&#xff1a;深度学习 ok&#xff0c;话不多…

ElasticSearch 学习课程入门(一)

引子 前文已经介绍了windows下如何安装ES&#xff0c;接下来的文章我会边学习边记录。OK&#xff0c;那就让我们开始吧。 一、ES基础操作 1、预备知识 &#xff08;1&#xff09;RESTful REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 …

QML Binding和Qt.binding详解

一、Binding详解 1、介绍 QML Binding是一种声明式的编程概念&#xff0c;它允许在Qt Quick应用中自动更新属性之间的关系。通过使用Binding&#xff0c;我们可以在属性之间建立依赖关系&#xff0c;当其中一个属性的值发生变化时&#xff0c;绑定的属性会自动更新。QML Bind…

【优选算法】3----快乐数

这是第三篇算法题&#xff0c;也是十分的不好想&#xff0c;虽然定位在简单&#xff0c;但我感觉还是有些难度的~ -------------------------------------begin----------------------------------------- 题目解析&#xff1a; 同样的&#xff0c;这道算法题&#xff0c;看题…

计算机网络 (52)秘钥分配

一、重要性 在计算机网络中&#xff0c;密钥分配是密钥管理中的一个核心问题。由于密码算法通常是公开的&#xff0c;因此网络的安全性主要依赖于密钥的安全保护。密钥分配的目的是确保密钥在传输过程中不被窃取或篡改&#xff0c;同时确保只有合法的用户才能获得密钥。 二、方…

Docker Load后存储的镜像及更改镜像存储目录的方法

Docker Load后存储的镜像及更改镜像存储目录的方法 Docker Load后存储的镜像更改镜像存储目录的方法脚本说明注意事项Docker作为一种开源的应用容器引擎,已经广泛应用于软件开发、测试和生产环境中。通过Docker,开发者可以将应用打包成镜像,轻松地进行分发和运行。而在某些场…

【三国游戏——贪心、排序】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e510; int a[N], b[N], c[N]; int w[4][N]; int main() {int n;cin >> n;for(int i 1; i < n; i)cin >> a[i];for(int i 1; i < n; i)cin >> b[i…