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

目录

一、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: k8s1volumes:- name: hp-01#声明存储卷类型是hostPath;物理机节点目录挂载hostPath: #指定hostPath的路径(物理机挂载路径)path: /data/pod-volumescontainers:- name: c1image: nginx:1.16.1-alpinevolumeMounts:- name: hp-01mountPath: /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: k8s1volumes:- name: nfs-data# 指定存储卷的类型是nfsnfs:#指定nfs在哪个节点server: k8s3# 指定nfs挂在路径path: /data/nfs_data/nginxcontainers:- name: c1image: nginx:1.16.1-alpinevolumeMounts:- name: nfs-datamountPath: /usr/share/nginx/html---apiVersion: v1
kind: Pod
metadata:name: volumes-nfs02
spec:nodeName: k8s2volumes:- name: nfs-data# 指定存储卷的类型是nfsnfs:#指定nfs在哪个节点server: k8s3# 指定nfs挂在路径path: /data/nfs_data/nginxcontainers:- name: c1image: nginx:1.16.1-alpinevolumeMounts:- name: nfs-datamountPath: /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: truecontainers:- name: c1image: 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: k8s2containers:- name: c1image: 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: c1image: nginx:1.16.1-alpine#声明环境变量env:#name就是key- name: oslee#value就是value值value: hello- name: k8svalue: 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.hqwc.cn/news/596706.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OneAPI】贴纸生成API

OneAPI新接口发布&#xff1a;贴纸生成 生成一个10241024像素的贴纸。 API地址&#xff1a;POST https://oneapi.coderbox.cn/openapi/api/stickers 请求参数&#xff08;body&#xff09; 参数名类型必填含义说明prompt提示词是提示词示例&#xff1a;一只可爱的小狗 响应…

ZYNQ学习之Petalinux 设计流程实战

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ PetaLinux工具提供了在 Xilinx 处理系统上自定义、构建和部署嵌入式 Linux 解决方案所需的…

【ARM 嵌入式 C 常用数据结构系列 25.1 -- linux 双向链表 list_head 使用详细介绍】

请阅读【嵌入式开发学习必备专栏 】 文章目录 内核双向链表双向链表的数据结构初始化双向链表在双向链表中添加元素遍历双向链表链表使用示例注意事项 内核双向链表 在Linux内核中&#xff0c;双向链表是一种广泛使用的数据结构&#xff0c;允许从任意节点高效地进行前向或后向…

FPGA笔试面试题目记录

1 logic utilization 题目&#xff1a;Rank the following operations from lowest utilization to highest. Assume that all variables are 32-bit integers,that the operations are implemented using LUTs ony and that the synthesiser will produce an optimal digital…

1.微服务

一、微服务是什么 微服务是一种架构风格&#xff0c;即&#xff0c;一个应用应该是一组小型服务&#xff0c;每个服务器只负责一种服务&#xff0c;服务之间可以通过 HTTP 的方式进行互通。每一个功能元素最终都是一个可独立替换和独立升级的软件单元。 可以说&#xff0c;微…

双连通分量算法

1. 连通图概念 连通图&#xff1a;无向图任意两点之间存在通路。 强连通&#xff1a;有向图&#xff08;前提&#xff09;中&#xff0c;任意两点都有至少一条通路&#xff0c;则此图为强连通图。 弱连通图&#xff1a;将有向图的有向边换成无向边得到的图是连通图&#xff0c…

Spring Cloud介绍

一、SpringCloud总体概述 Cloud Foundry Service Broker&#xff1a;通用service集成进入Cloud Foundry Cluster&#xff1a;服务集群 Consul&#xff1a;注册中心 Security&#xff1a;安全认证 Stream&#xff1a;消息队列 Stream App Starters&#xff1a;Spring Cloud Stre…

面试题——JVM老年代空间担保机制(我的想法)

这里借用一下人家的图&#xff0c;来说一下我的想法&#xff0c;嘻嘻。。。。 原文链接&#xff1a;一道面试题&#xff1a;JVM老年代空间担保机制-CSDN博客? 嗯&#xff0c;我觉得老年代担保机制的主要作用就是避免频繁触发FULL GC&#xff0c;这其实也是因为年轻代Minor GC…

自动驾驶_交通标志识别:各目标检测算法评测

自动驾驶|交通标志识别&#xff1a;各目标检测算法评测 论文题目&#xff1a;Evaluation of Deep Neural Networks for traffic sign detection systems 开源代码&#xff1a;https://github.com/aarcosg/traffic-sign-detection 附赠自动驾驶学习资料和量产经验&#xff1a;…

sharo反序列化漏洞

启动docker 服务 sudo service docker start 打开靶场 sudo docker run -d -p 80:8080 medicean/vulapps:s_shiro_1 输入docker虚拟机地址打开靶机sharo框架 如何利用漏洞 打开工具目录在终端中打开 输入靶机地址 打开yaki监听端口可以设置为6666 返回工具填写靶机ip和端口 …

idea开发 java web 高校学籍管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 高校学籍管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 css jq…

【STM32】存储器和位带映射(bit band mapping)

文章目录 0 前言1 关于地址和存储器2 STM32内部存储器3 位带映射&#xff08;bit band mapping&#xff09;4 扩展&#xff1a;IAP 0 前言 最近在研究stm32标准库&#xff0c;对使用宏定义实现位操作的函数非常感兴趣&#xff0c;简单的一句PAout(1) 0;就能实现某个引脚电平的…