4.1.k8s的pod-创建,数据持久化,网络暴露,env环境变量

news2025/1/13 8:07:00

目录

一、Pod介绍

二、指令创建和管理Pod

三、资源清单创建pod

1.挂载hostPath存储卷

2.NFS存储卷

所有节点安装nfs

k8s3编辑NFS配置文件

k8s1,k8s2节点开机挂载

编辑pod资源清单,挂载nfs

四、pod网络暴露

1.hostNetwork使用宿主机的网络

2.宿主机端口映射

五、pod中容器的环境变量env


一、Pod介绍

Pod 是包含一个或多个容器的容器组,是 Kubernetes 中创建和管理的最小对象。

Pod 有以下特点:

  • Pod是kubernetes中最小的调度单位原子单元,Kubernetes直接管理Pod而不是容器。
  • 其他所有资源都是围绕着为pod资源提供服务的,给pod提供服务的。
  • 同一个Pod中的容器总是会被自动安排到集群中的同一节点(物理机或虚拟机)上,并且一起调度
  • Pod可以理解为运行特定应用的“逻辑主机”,这些容器共享存储、网络和配置声明(如资源限制)。
  • 每个 Pod 有唯一的 IP 地址。 IP地址分配给Pod,在同一个 Pod 内,所有容器共享一个 IP 地址和端口空间,Pod 内的容器可以使用localhost互相通信。

例如,你可能有一个容器,为共享卷中的文件提供 Web 服务器支持,以及一个单独的 "边车 (sidercar)" 容器负责从远端更新这些文件,如下图所示:

二、指令创建和管理Pod

# 创建pod

[root@k8s1 pod]# kubectl run mynginx --image=nginx:1.16.1-alpine
# 查看pod的IP和运行节点信息
[root@k8s1 pod]# kubectl get pod --watch -owide
# 描述,可以用来排查问题
[root@k8s1 pod]# kubectl get pod --watch -owide
# 查看pod的运行日志
[root@k8s1 pod]# kubectl logs mynginx
# 使用Pod的ip+pod里面运行容器的端口
[root@k8s1 pod]# curl 10.100.1.4

# 在容器中执行命令
[root@k8s1 pod]# kubectl exec mynginx -it -- /bin/sh
# -it 交互模式 
# --rm 退出后删除容器,多用于执行一次性任务或使用客户端

[root@k8s1 pod]# kubectl run mynginx --image=nginx:1.16.1-alpine -it --rm -- /bin/sh

# 删除
[root@k8s1 pod]# kubectl delete pod mynginx
# 强制删除

[root@k8s1 pod]# kubectl delete pod mynginx --force

三、资源清单创建pod

1.挂载hostPath存储卷

  • 将物理机节点中的目录挂载到pod中,pod意外宕机,或者被删除,数据不丢失;
  • 同一个pod中不同的容器之间数据共享;
  • 同一个worker节点,不同的pod之间的数据共享;
  • 在不同worker节点的pod无法数据共享;

# 编写资源清单

[root@k8s1 pod]# vi pod-hostpath.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  #指定pod创建在哪个worker节点中;
  nodeName: k8s1
  volumes:
  - name: hp-01
    #声明存储卷类型是hostPath;物理机节点目录挂载
    hostPath: 
      #指定hostPath的路径(物理机挂载路径)
      path: /data/pod-volumes

  containers:
  - name: c1
    image: nginx:1.16.1-alpine
    volumeMounts:
    - name: hp-01
      mountPath: /usr/share/nginx/html/

# 创建pod资源 
[root@k8s1 pod]# kubectl apply -f pod-hostpath.yaml

[root@k8s2 pod-volumes]# mkdir -p /data/pod-volumes
[root@k8s2 pod-volumes]# echo oslee > /data/pod-volumes/index.html

# 访问nginx

[root@k8s1 pod]# kubectl get pod -owide
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE   NOMINATED NODE   READINESS GATES
mypod   1/1     Running   0          33s   10.100.0.2   k8s1   <none>           <none>
[root@k8s1 pod]# curl 10.100.0.2
oslee

2.NFS存储卷

所有节点安装nfs

# 安装nfs

yum -y install nfs-utils
# 创建共享目录

mkdir -p /data/nfs_data

k8s3编辑NFS配置文件

# 配置nfs

[root@k8s3 data]# vim /etc/exports
/data/nfs_data/ 10.128.0.0/16(rw,no_root_squash,no_all_squash,sync)

# 启动并开机自启
[root@k8s3 data]# systemctl enable --now nfs

# 命令使配置立即生效

[root@k8s3 data]# exportfs -r

# 查看nfs共享目录是否存在

[root@k8s3 data]# exportfs
/data/nfs_data  10.128.0.0/16
[root@k8s3 data]#

k8s1,k8s2节点开机挂载

# 挂载共享目录

mount -t nfs 10.128.175.196:/data/nfs_data/ /data/nfs_data/ -o nolock,nfsvers=3,vers=3

# 开机自动挂载
vim /etc/rc.d/rc.local
mount -t nfs 10.128.175.196:/data/nfs_data/ /data/nfs_data/ -o nolock,nfsvers=3,vers=3

编辑pod资源清单,挂载nfs

[root@k8s1 pod]# vi pod-nfs.yaml

apiVersion: v1
kind: Pod
metadata:
  name: volumes-nfs01
spec:
  nodeName: k8s1
  volumes:
  - name: nfs-data
    # 指定存储卷的类型是nfs
    nfs:
      #指定nfs在哪个节点
      server: k8s3
      # 指定nfs挂在路径
      path: /data/nfs_data/nginx
  containers:
  - name: c1
    image: nginx:1.16.1-alpine
    volumeMounts:
    - name: nfs-data
      mountPath: /usr/share/nginx/html

---

apiVersion: v1
kind: Pod
metadata:
  name: volumes-nfs02
spec:
  nodeName: k8s2
  volumes:
  - name: nfs-data
    # 指定存储卷的类型是nfs
    nfs:
      #指定nfs在哪个节点
      server: k8s3
      # 指定nfs挂在路径
      path: /data/nfs_data/nginx
  containers:
  - name: c1
    image: nginx:1.16.1-alpine
    volumeMounts:
    - name: nfs-data
      mountPath: /usr/share/nginx/html

# 创建pod资源

[root@k8s1 pod]# kubectl apply -f pod-nfs.yaml 
pod/volumes-nfs created

# 访问nginx

[root@k8s1 pod]# echo oslee > /data/nfs_data/nginx/index.html
[root@k8s1 pod]# curl 10.100.1.8
oslee
[root@k8s1 pod]# 

四、pod网络暴露

1.hostNetwork使用宿主机的网络

# 编辑pod资源清单

[root@k8s1 pod]# vi pod-hnw.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-hnw
spec:
  #声明使用宿主机的网络;
  hostNetwork: true
  containers:
  - name: c1
    image: nginx:1.16.1-alpine

# 查看pod

[root@k8s1 pod]# kubectl get pods -o wide

# 此时可以外部浏览器访问

2.宿主机端口映射

# 编辑pod清单

[root@k8s1 pod]# vi pod-hostport.yaml

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-hpm
spec:
  nodeName: k8s2
  containers:
  - name: c1
    image: nginx:1.16.1-alpine
    #声明容器与宿主机端口映射;
    ports:
    - name: c1-port
      #容器端口
      containerPort: 80
      #宿主机端口
      hostPort: 99
      #指定访问协议(默认不写是TCP协议,其实不用写)
      # protocol: TCP

# 创建pod资源

[root@k8s1 pod]# kubectl apply -f pod-hostport.yaml 
pod/my-pod-hpm created
 # 外部浏览器访问 http://{ip}:99

五、pod中容器的环境变量env

pod中的环境变量跟linux一致,key=value

[root@k8s1 ~]# name=oslee
[root@k8s1 ~]# echo $name
oslee

也就是说,我们通过pod资源清单的编写,可以为容器中声明env环境变量;

# 编辑pod资源清单

[root@k8s1 ~]# vi pod-env.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-env
spec:
  containers:
  - name: c1
    image: nginx:1.16.1-alpine
    #声明环境变量
    env:
    #name就是key
    - name: oslee
      #value就是value值
      value: hello
    - name: k8s
      value: 1.23.17

 # 创建pod资源

[root@k8s1 ~]# kubectl apply -f pod-env.yaml 
pod/pod-env created

# 测试变量
[root@k8s1 ~]# kubectl exec -it pod-env -- /bin/sh
/ # echo $oslee
hello
/ # echo $k8s
1.23.17

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

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

相关文章

Struts2的入门:新建项目——》导入jar包——》jsp,action,struts.xml,web.xml——》在项目运行

文章目录 配置环境tomcat 新建项目导入jar包新建jsp界面新建action类新建struts.xml,用来配置action文件配置Struts2的核心过滤器&#xff1a;web.xml 启动测试给一个返回界面在struts.xml中配置以实现页面的跳转&#xff1a;result再写个success.jsp最后在项目运行 配置环境 …

实现点击用户头像或者id与其用户进行聊天(vue+springboot+WebSocket)

用户点击id直接与另一位用户聊天 前端如此&#xff1a; <template><!-- 消息盒子 --><div class"content-box" :style"contentWidth"><!-- 头像&#xff0c;用户名 --><div class"content-box-top box--flex">&l…

sqlmap(四)案例

一、注入DB2 http://124.70.71.251:49431/new_list.php?id1 这是墨者学院里的靶机&#xff0c;地址&#xff1a;https://www.mozhe.cn/ 1.1 测试数据库类型 python sqlmap.py -u "http://124.70.71.251:49431/new_list.php?id1" 1.2 测试用户权限类型 查询选…

【linux】ubuntu ib网卡驱动如何适配

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

晚枫|2024年3月总结,人生中第一次「车祸」

这个3月&#xff0c;真正做到了&#xff1a;过得紧张又刺激&#xff01; 1、第一次「车祸」 整个3月&#xff0c;凌晨1点之前没睡过觉&#xff0c;大部分时间都是2点以后睡。 从去年10月和朋友一起办Python中国的活动开始&#xff0c;就逐渐进入这种状态了。 除了本职工作因…

c# wpf LiveCharts 绑定 简单试验

1.概要 c# wpf LiveCharts 绑定 简单试验 2.代码 <Window x:Class"WpfApp3.Window2"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schem…

Python3 Ubuntu

一、安装中文输入法 1.sudo apt install ibus-sunpinyin 2.点击右上角输入法&#xff0c;然后点击加号&#xff0c;输入yin添加进来&#xff0c;最后选中输入法即可 二、安装截屏软件 1.sudo apt install gnome-screenshot 三、安装opencv-python 1.pip3 install --upgrade…

CleanMyMac ----MacBook卡顿处理小妙招

MacBook 是苹果公司的一款非常流行的笔记本电脑&#xff0c;但使用时 间久了之后很容易出现卡顿的问题。那么出现卡顿的原因有哪些呢&#xff1f; MacBook卡顿怎么处理?先找出卡顿的一般原因&#xff1a; 我们需要排除 MacBook 的硬件问题。可以通过访问 Mac 系统自带的硬件检…

【C++】红黑树讲解及实现

前言&#xff1a; AVL树与红黑树相似&#xff0c;都是一种平衡二叉搜索树&#xff0c;但是AVL树的平衡要求太严格&#xff0c;如果要对AVL树做一些结构修改的操作性能会非常低下&#xff0c;比如&#xff1a;插入时要维护其绝对平衡&#xff0c;旋转的次数比较多&#xff0c;更…

pyside6怎么使用Qt Designer设计自定义组件

第一步&#xff0c;新建一个自定义组件的python文件 from PySide6.QtWidgets import QPlainTextEdit from PySide6.QtCore import Signal,Qtclass CustomPlainTextEdit(QPlainTextEdit):enterPressed Signal(str)def __init__(self, parentNone):super().__init__(parent)def…

EChart简单入门

echart的安装就细不讲了&#xff0c;直接去官网下&#xff0c;实在不会的直接用cdn,省的一番口舌。 cdn.staticfile.net/echarts/4.3.0/echarts.min.js 正入话题哈 什么是EChart&#xff1f; EChart 是一个使用 JavaScript 实现的开源可视化库&#xff0c;Echart支持多种常…

【环境变量】常见的环境变量 | 相关指令 | 环境变量系统程序的结合理解

目录 常见的环境变量 HOME PWD SHELL HISTSIZE 环境变量相关的指令 echo&env export unset 本地变量 环境变量整体理解 程序现象_代码查看环境变量 整体理解 环境变量表 环境变量表的传递 环境变量表的查看 测试验证 少说废话&#x1f197; 每个用户…

前端canvas项目实战——在线图文编辑器(八):复制、删除、锁定、层叠顺序

目录 前言一、效果展示二、实现步骤1. 复制2. 删除3. 锁定4. 层叠顺序 三、实现过程中发现的bug1. clone方法不复制自定义属性2. 复制「锁定」状态的对象&#xff0c;得到的新对象也是「锁定」状态 四、Show u the code后记 前言 上一篇博文中&#xff0c;我们细致的讲解了实现…

高精度端到端在线校准环视相机和LIDAR(精度0.2度内!无需训练数据)

高精度端到端在线校准环视相机和LIDAR&#xff08;精度0.2度内&#xff01;无需训练数据&#xff09; 附赠自动驾驶学习资料和量产经验&#xff1a;链接 写在前面 在自动驾驶车辆的使用寿命内&#xff0c;传感器外参校准会因振动、温度和碰撞等环境因素而发生变化。即使是看似…

智过网:非安全专业能否报考注安?哪些专业可以报考?

近年来&#xff0c;随着社会对安全生产管理的日益重视&#xff0c;注册安全工程师&#xff08;简称注安&#xff09;这一职业逐渐受到广大从业人员的青睐。然而&#xff0c;对于许多非安全专业的朋友来说&#xff0c;他们可能会困惑&#xff1a;非安全专业是否可以报考注安&…

微软推出GPT-4 Turbo优先使用权:Copilot for Microsoft 365商业用户享受无限制对话及增强图像生成能力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

thinkphp6入门(22)-- 如何下载文件

假设在public/uploads文件夹下有一个文件test.xlsx 在前端页面添加下载链接&#xff0c;用户点击该链接即可下载对应的文件。 <a href"xxxxxxx/downloadFile">下载文件</a> 2. 在后端控制器方法中&#xff0c;我们需要获取要下载的文件路径&#xff0…

Prometheus+grafana环境搭建Docker服务(docker+二进制两种方式安装)(八)

由于所有组件写一篇幅过长&#xff0c;所以每个组件分一篇方便查看&#xff0c;前七篇链接如下 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 Prometheusgrafana环…

软考115-上午题-【计算机网络】-HTML

一、真题 真题1&#xff1a; alink属性表示一个链接的当前激活状态的颜色&#xff0c;即用户正在点击或已经点击的链接的颜色。 vlink属性用于设定已访问过的超链接文本的显示颜色&#xff0c;即用户已经点击过并且已经访问过的链接的颜色。 真题2&#xff1a; <table bord…

智能感应门改造工程

今天记录一下物联网专业学的工程步骤及实施过程 智能感应门改造工程 1 规划设计1.1 项目设备清单1.2项目接线图 软件设计信号流 设备安装与调试工程函数 验收 1 规划设计 1.1 项目设备清单 1.2项目接线图 软件设计 信号流 设备安装与调试 工程函数 工程界面: using System; …