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
- name: c1-port
#容器端口
containerPort: 80
#宿主机端口
hostPort: 99
#指定访问协议(默认不写是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
>
>