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: 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

相关推荐

  1. K8S环境变量

    2024-04-07 16:52:03       51 阅读
  2. K8S学习指南(48)-k8spod驱逐

    2024-04-07 16:52:03       53 阅读
  3. K8S实现数据持久存储

    2024-04-07 16:52:03       42 阅读
  4. K8s: 集群内Pod通信机制之环境变量

    2024-04-07 16:52:03       30 阅读
  5. k8spod创建pod方式

    2024-04-07 16:52:03       52 阅读
  6. k8s pod网络排查教程

    2024-04-07 16:52:03       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 16:52:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 16:52:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 16:52:03       87 阅读
  4. Python语言-面向对象

    2024-04-07 16:52:03       96 阅读

热门阅读

  1. MySQL基础学习内容指南

    2024-04-07 16:52:03       28 阅读
  2. 设计模式:组合模式

    2024-04-07 16:52:03       41 阅读
  3. 【DevOps工具篇】身份验证管理及SSO登录:Keycloak

    2024-04-07 16:52:03       33 阅读
  4. 【TypeScript系列】代码库结构

    2024-04-07 16:52:03       35 阅读
  5. dfs,LeetCode 1026. 节点与其祖先之间的最大差值

    2024-04-07 16:52:03       39 阅读
  6. QT各种锁及线程同步应用

    2024-04-07 16:52:03       33 阅读
  7. C语言形参与实参

    2024-04-07 16:52:03       43 阅读
  8. Elasticsearch如何选择版本

    2024-04-07 16:52:03       37 阅读
  9. socket套接字函数

    2024-04-07 16:52:03       33 阅读