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

bash 复制代码
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 \ \ \[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

bash 复制代码
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

bash 复制代码
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

bash 复制代码
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

bash 复制代码
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

相关推荐
yBmZlQzJ3 小时前
财运到内网穿透域名解析技术机制与中立评估
运维·经验分享·docker·容器·1024程序员节
sim20205 小时前
把某个pod固定到某个节点
kubernetes
yBmZlQzJ5 小时前
内网穿透工具通过端口转发实现内外网通信
运维·经验分享·docker·容器·1024程序员节
DeepHacking5 小时前
Overleaf 本地Docker部署
运维·docker·容器
孤岛悬城6 小时前
46 Docker资源管理
docker·容器·云计算
学Linux的语莫10 小时前
kompose、docker转k8s
docker·容器·kubernetes
阿里云云原生10 小时前
探秘 AgentRun丨流量一大就瘫痪?如何解决 AI 模型调用之痛
云原生
是Yu欸11 小时前
从Ascend C算子开发视角看CANN的“软硬协同”
c语言·开发语言·云原生·昇腾·ascend·cann·开放社区
光头熊11 小时前
一次 nerdctl prune -a 导致 Kubernetes 节点不可用的复盘
kubernetes
码界奇点11 小时前
基于微服务架构的企业身份与访问管理系统设计与实现
微服务·云原生·架构·车载系统·毕业设计·源代码管理