03-k8s的pod资源01-数据持久化、env环境变量、网络暴露

这篇具有很好参考价值的文章主要介绍了03-k8s的pod资源01-数据持久化、env环境变量、网络暴露。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、pod资源的概述

1,pod资源是k8s集群当中,最小的管理单位;

2,其他所有资源都是围绕着为pod资源提供服务的;给pod提供服务的;

3,pod就是“一组”容器,一个pod中可以有1个或者多个容器;

二、pod的数据持久化

1,emptyDir存储卷

        emptyDir存储卷,本质上是一个临时的目录,其生命周期与pod相同,pod被删除,则数据也会被删除;

· 编写pod资源清单

[root@k8s231 pod]# cat 05-nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-multiple
spec:
   containers:
   - image: nginx:1.20.1-alpine
     name: c1

[root@k8s231 pod]# kubectl apply -f 05-nginx.yaml 
pod/nginx-multiple created

· pod中nginx写入静态文件模拟访问

[root@k8s231 pod]# kubectl exec nginx-multiple -it -- sh
/ # cd /usr/share/nginx/html/
/usr/share/nginx/html # echo xinjizhiwa > index.html 
/usr/share/nginx/html # exit
[root@k8s231 pod]# curl 10.100.2.11
xinjizhiwa

· 模拟容器挂掉

[root@k8s233 ~]# docker container rm -f c8e5fb7c17bc
c8e5fb7c17bc

[root@k8s231 pod]# curl 10.100.2.11 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

· 重新编辑pod清单挂载存储卷

[root@k8s231 pod]# cat 05-nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: m05
spec:
   #声明存储卷
   volumes:
   - name: xinjizhiwa-dir
     #声明存储卷类型为emptyDir
     emptyDir: {}

   containers:
   - image: nginx:1.20.1-alpine
     name: c1
     #容器挂载存储卷
     volumeMounts:
     #挂载存储卷的名称
     - name: xinjizhiwa-dir
       #指定挂载的目录
       mountPath: /usr/share/nginx/html/

[root@k8s231 pod]# kubectl apply -f 05-nginx.yaml 

· 进入nginx容器,写一个静态文件

[root@k8s231 pod]# kubectl exec m05 -it -- sh 
/ # echo xinjizhiwa > /usr/share/nginx/html/index.html

· 再次模拟容器挂掉

[root@k8s233 ~]# docker kill e4877ef03ad4

· 自动重新拉起容器后,再次模拟访问nginx

[root@k8s231 pod]# curl 10.100.2.12
xinjizhiwa

发现数据没丢,说明存储卷挂载成功,实现pod内容器的持久化;

问题来了,当我们删除pod,数据还会存在吗?

[root@k8s231 pod]# curl 10.100.2.13
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>

#可以看到,当pod挂掉之后,数据也随之丢失;

· emptyDir存储卷特点总结

1,容器挂掉,数据不会丢失;

2,pod挂掉,数据会丢失;

3,所以,不推荐使用;

2,hostPath存储卷

03-k8s的pod资源01-数据持久化、env环境变量、网络暴露,k8s系列,kubernetes,docker,容器

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

        在不同worker节点的pod就无法数据共享了;

· 编辑pod资源清单,挂载hostPath存储卷

[root@k8s231 pod]# vim 06-pod-hostpath.yaml

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

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

· 创建pod资源

[root@k8s231 pod]# kubectl apply -f 06-pod-hostpath.yaml

· k8s232创建挂载目录,写入index文件

[root@k8s232 ~]# mkdir -p /xinjizhiwa/pod-volumes
[root@k8s232 ~]# echo xinjizhiwa > /xinjizhiwa/pod-volumes/index.html

· 此时访问nginx

[root@k8s231 pod]# curl 10.100.1.4
xinjizhiwa

· 模拟删除pod再创建查看数据是否丢失

#1,模拟删除pod

[root@k8s231 pod]# kubectl delete pods m06
pod "m06" deleted

#2,重新创建pod
[root@k8s231 pod]# kubectl apply -f 06-pod-hostpath.yaml 
pod/m06 created
[root@k8s231 pod]# kubectl get pods -o wide 
NAME   READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
m05    1/1     Running   0          74m   10.100.2.13   k8s233   <none>           <none>
m06    1/1     Running   0          6s    10.100.1.5    k8s232   <none>           <none>

#3,再次访问,发现数据没有丢失;
[root@k8s231 pod]# curl 10.100.1.5
xinjizhiwa

此时,持久化成功;

3,NFS存储卷

03-k8s的pod资源01-数据持久化、env环境变量、网络暴露,k8s系列,kubernetes,docker,容器

· 所有节点安装nfs,harbor节点配置nfs

        本次学习我们使用harbor节点作为存储节点

[root@harbor ~]# yum -y install nfs-utils

创建共享目录

[root@harbor ~]# mkdir -p /k8s/data/

编辑NFS配置文件

#1,修改配置文件
[root@harbor ~]# vim /etc/exports

#2,启动并开机自启
[root@harbor ~]# systemctl enable --now nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

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

[root@harbor ~]# exportfs 
/k8s/data         <world>

· harbor节点创建要挂在的nfs目录

[root@harbor ~]# mkdir /k8s/data/nginx

· 编辑pod资源清单,挂载nfs

[root@k8s231 pod]# vim 07-pod-nfs.yaml

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

· 创建pod资源

[root@k8s231 pod]# kubectl apply -f 07-pod-nfs.yaml 

· 验证,删除pod重新创建数据是否丢失

[root@k8s231 pod]# kubectl delete pods volumes-nfs 
pod "volumes-nfs" deleted
[root@k8s231 pod]# kubectl apply -f 07-pod-nfs.yaml 
pod/volumes-nfs created
[root@k8s231 pod]# kubectl get pods -o wide 
NAME          READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
volumes-nfs   1/1     Running   0          4s    10.100.2.15   k8s233   <none>           <none>
[root@k8s231 pod]# curl 10.100.2.15
xinjizhiwa

· 创建两个pod,都挂载相同nfs存储卷

知识点:【---】代表同一个yaml文件中,多个资源;

[root@k8s231 pod]# cat 07-pod-nfs.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: volumes-nfs01
spec:
  nodeName: k8s233
  volumes:
  - name: nfs-data
    # 指定存储卷的类型是nfs
    nfs:
      #指定nfs在哪个节点
      server: harbor
      # 指定nfs挂在路径
      path: /k8s/data/nginx
  containers:
  - name: c1
    image: nginx:1.20.1-alpine
    volumeMounts:
    - name: nfs-data
      mountPath: /usr/share/nginx/html

---

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

· 验证是否访问结果都一样

[root@k8s231 pod]# kubectl apply -f 07-pod-nfs.yaml 
pod/volumes-nfs01 created
pod/volumes-nfs02 created

[root@k8s231 pod]# kubectl get pods -o wide 
NAME            READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
volumes-nfs01   1/1     Running   0          4s    10.100.2.16   k8s233   <none>           <none>
volumes-nfs02   1/1     Running   0          4s    10.100.1.6    k8s232   <none>           <none>

[root@k8s231 pod]# curl 10.100.2.16
xinjizhiwa
[root@k8s231 pod]# curl 10.100.1.6
xinjizhiwa

至此,nfs存储卷挂载、验证成功;

三、pod网络暴露

1,hostNetwork使用宿主机的网络

· 编辑pod资源清单

[root@k8s231 pod]# cat 08-pod-hnw.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: m08
spec:

  #声明使用宿主机的网络;
  hostNetwork: true
  containers:
  - name: c1
    image: nginx:1.20.1-alpine

· 查看pod

发现,ip不再是pod网段,而是宿主机的ip地址了;

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

03-k8s的pod资源01-数据持久化、env环境变量、网络暴露,k8s系列,kubernetes,docker,容器

此时外部浏览器访问测试

03-k8s的pod资源01-数据持久化、env环境变量、网络暴露,k8s系列,kubernetes,docker,容器

2,宿主机端口映射

03-k8s的pod资源01-数据持久化、env环境变量、网络暴露,k8s系列,kubernetes,docker,容器

· 编辑pod清单

[root@k8s231 pod]# vim 09-pod-hostport.yaml

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

· 创建pod资源

[root@k8s231 pod]# kubectl apply -f 09-pod-hostport.yaml

测试访问宿主机的99端口,看是否能够访问到pod的80端口;

03-k8s的pod资源01-数据持久化、env环境变量、网络暴露,k8s系列,kubernetes,docker,容器

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

        什么事pod中容器的环境变量?

        跟linux中的env是一个意思,key=value

[root@k8s231 pod]# xinjizhiwa=HELLO
[root@k8s231 pod]# echo $xinjizhiwa
HELLO

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

1,编辑pod资源清单

[root@k8s231 pod]# vim 10-pod-env.yaml

apiVersion: v1
kind: Pod
metadata:
  name: m10
spec:
  containers:
  - name: c1
    image: nginx:1.20.1-alpine
    #声明环境变量
    env:
    #name就是key
    - name: xinjizhiwa
      #value就是value值
      value: HELLO
    - name: k8s
      value: 1.23.17

2,创建pod资源

[root@k8s231 pod]# kubectl apply -f 10-pod-env.yaml 
pod/m10 created

3,进入到pod容器中,验证是否传递成功

[root@k8s231 pod]# kubectl exec m10 -it -- sh
/ # env
k8s=1.23.17
xinjizhiwa=HELLO
..........

/ # echo $xinjizhiwa
HELLO
/ # echo $k8s
1.23.17

至此,env环境变量传递成功;文章来源地址https://www.toymoban.com/news/detail-833207.html

到了这里,关于03-k8s的pod资源01-数据持久化、env环境变量、网络暴露的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DevOps工具:k8s数据共享与持久化-nfs

    可伸缩 :可利用k8s集群的资源执行自动化任务。 可追溯 :通过将构建产物和相关数据持久化,可以确保每个构建版本的可追溯性,有利于快速排查和解决问题,同时可回滚到之前得版本。而CI、CD和测试各阶段都可能产生文件(不适合存储数据库),因此需要持久化。 数据

    2024年03月25日
    浏览(41)
  • 第18关 K8s数据安全无忧——持久化存储详解

    ------ 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维,本期课程将深入解析Kubernetes的持久化存储机制,包括PV、PVC、StorageClass等的工作原理、使用场景、最佳实践等,帮您构建稳定可靠的状态存储,确保应用和数据 100% 安全。 Volume 我们这里先来聊聊K8s的存储模型V

    2024年02月05日
    浏览(45)
  • k8s1.28.8版本安装prometheus并持久化数据

    本文参考 前置要求: 已经部署了NFS或者其他存储的K8s集群. 这里注意networkpolicies网络策略问题,可以后面删除这个策略,这里可以查看我之前的文档。 部署kube-prometheus 这里是配置好才执行这个,我们还没有配置存储什么的需要进行修改 持久化数据我这里用的是NFS创建动态的

    2024年04月15日
    浏览(31)
  • 持续集成部署-k8s-数据持久化-NFS安装与使用

    网络文件系统(Network File System, NFS),是基于内核的文件系统,nfs主要是通过网络实现服务器和客户端之间的数据传输,采用远程过程调用RPC(Romete Procedure Call)机制,让不同的机器节点共享文件目录。只需将nfs服务器共享的文件目录挂载到nfs客户端,这样客户端就可以对远程

    2024年02月07日
    浏览(38)
  • k8s 持久化存储

    我们继续来查看 k8s 的卷,上一次我们分享了将磁盘挂载到容器中,empyDir 和 gitRepo 都是会随着 pod 的启动而创建,随着 pod 的删除而销毁 那么我们或许会有这样的需求,期望在 pod 上面读取节点的文件或者使用节点的文件系统来访问节点的设备 这个时候,我们就可以让 hostP

    2024年02月16日
    浏览(40)
  • K8S之持久化存储

    在K8S中部署的应用都是以pod容器的形式运行的,假如部署数据库服务 例如:MySQL、Redis等,需要对产生的数据做备份。如果pod不挂载数据卷,那pod被删除或重启后这些数据会随之消失,想要长久的保留这些数据就要用到pod数据持久化存储。 查看K8S支持哪些存储 常用的如下:

    2024年04月09日
    浏览(41)
  • [Kubernetes]5. k8s集群StatefulSet详解,以及数据持久化(SC PV PVC)

    前面通过 deployment 结合 service 来部署 无状态的应用 ,下面来讲解通过 satefulSet 结合 service 来部署 有状态的应用 无状态: 无状态 (stateless) 、牲畜 (cattle) 、无名 (nameless) 、可丢弃 (disposable) 有状态: 有状态 (stateful) 、宠物 (pet) 、具有名 (haviing name) 、不可丢弃 (non-disposable) St

    2024年02月01日
    浏览(41)
  • 【k8s存储--使用OpenEBS做持久化存储】

    使用OpenEBS,你可以将有持久化数据的容器,像对待其他普通容器一样来对待。OpenEBS本身也是通过容器来部署的,支持Kubernetes、Swarm、Mesos、Rancher编排调度,存储服务可以分派给每个pod、应用程序、集群或者容器级别,包括: 跨节点的数据持久化 跨可用区和云厂商的数据同步

    2024年04月23日
    浏览(34)
  • 飞天使-k8s基础组件分析-持久化存储

    emptyDir hostpath pv和pvc介绍 nfs作为静态pv案例 nfs作为动态pv案例 使用本地文件夹作为pv 改变默认存储类及回收策略 参考文档

    2024年02月11日
    浏览(40)
  • Kubernetes基础(二十三)-k8s持久化存储详解

    1.1 介绍 在容器中的磁盘文件是短暂的,当容器崩溃时,Kubelet会重新启动容器,但容器运行时产生的数据文件都将会丢失,之后容器会以最干净的状态启动。另外,当一个Pod运行多个容器时,各个容器可能需要共享一些文件,诸如此类的需求都可以使用Volume解决。Pod只需要通

    2024年03月17日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包