4

17 阅读3分钟

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存储卷


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/38b6a7cc1b9249b698060fd2feed15e4~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MDgwNDUxMTkwMTI=:q75.awebp?rk3s=f64ab15b&x-expires=1770909021&x-signature=89N10ubKlc6iih2Qy8tuVBj4VSM%3D)



##### 所有节点安装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

> 

> 

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

> 

> 

> 



![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/bdba6df2f81a49b0809ffd8ebebce511~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MDgwNDUxMTkwMTI=:q75.awebp?rk3s=f64ab15b&x-expires=1770909021&x-signature=lSHsDHK0QgyQNk6cKOpy5QA6d6s%3D)



#### 2.宿主机端口映射


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/418ef04df7ab4f05b1349b3dfb260ace~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MDgwNDUxMTkwMTI=:q75.awebp?rk3s=f64ab15b&x-expires=1770909021&x-signature=l4VVZWAtQTnT4N2ptZHdtr8Qs20%3D)




> 

> # 编辑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
> 
> 
> 


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/b9b78c4d5d9a4ed685b01e7de8a47d6e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MDgwNDUxMTkwMTI=:q75.awebp?rk3s=f64ab15b&x-expires=1770909021&x-signature=OIwqAO61nvNP1JsuCEupX%2BP92Ro%3D)


## 五、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

> 

>