第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet会重启它,但是容器中国的文件将丢失–容器以干净的状态(镜像最初的状态)重新启动。其次在pod中同时运行多个容器时,这些容器之间通常需要共享文件。kubernetes中的volume抽象就很好的解决这些问题。

Kubernetes中的卷有明确的寿命,与封装它的pod相同。所以,卷的生命比pod中的所有容器都长,当这个容器重启时数据仍然得以保存。当然,当pod不再存在时,卷也将不复存在。也许更重要的是,kubernetes支持多种类型的卷,pod可以同时使用任意数量的卷。

kubernetes支持以下类型的卷

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

emptyDir

当pod被分配给节点时,首先创建emptyDir卷,并且只要该pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod中 的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同的或者不同的路径上。当出于任何原因从节点中删除pod时,emptyDir中的数据将被永久删除。

=注意:容器崩溃不会从节点中移除pod,因此emptyDir卷中的数据在容器崩溃时是安全的

emptyDir的用法:

  • 暂存空间,例如用于基于磁盘的合并排序
  • 用作长时间计算崩溃恢复时的检查点
  • Web服务器容器提供数据时,保存内容管理器容器中提取的文件。
  • 这里的image得从node节点的docker images中进行查看,然后选择(因为是从私有仓库中下载下来的),因为没有找到合适的 所有在下面的运行中开始出错了
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: registry.aliyuncs.com/google_containers/pause 
    name: test-container
    volumeMounts:
    - name: cache-volume
      mountPath: /cache
  volumes:
  - name: cache-volume
    emptyDir: {}


[root@master volume]# vim em.yaml
[root@master volume]# kubectl apply -f em.yaml
pod/test-pd configured
[root@master volume]# kubectl get pod
NAME                                             READY   STATUS             RESTARTS   AGE
ds-test-r7ct2                                    1/1     Running            0          8m20s
ds-test-sp7z4                                    1/1     Running            0          8m20s
ds-test-wm84n                                    1/1     Running            0          8m21s
hello-1623503580-5qx6h                           0/1     Completed          0          2m24s
hello-1623503640-4xdsv                           0/1     Completed          0          84s
hello-1623503700-kpwz6                           0/1     Completed          0          23s
test-pd                                          1/1     Running            0          6m29s

出现的问题

[root@master volume]# kubectl exec test-pd -it -- /bin/sh
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "/bin/sh": stat /bin/sh: no such file or directory: unknown
command terminated with exit code 126
[root@master volume]# kubectl exec -it test-pd /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "/bin/sh": stat /bin/sh: no such file or directory: unknown
command terminated with exit code 126
[root@master volume]# kubectl exec test-pd -it -- /bin/sh
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "/bin/sh": stat /bin/sh: no such file or directory: unknown
command terminated with exit code 126
[root@master volume]# 

nfs

数据卷emptydir是本地存储,pod重启, 数据就不存在了,要使pod重启数据还存在,需要对数据进行持久化存储。

1.nfs 网络存储

pod重启,数据还存在

第一步 找一台服务器专门作为nfs服务端

(1)安装nfs

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

(2) 设置挂载路径

# 存储目录,*允许所有人连接,rw读写权限,sync文件同时写入硬盘及内存,no_root_squash 使用者root用户自动修改为普通用户
vim  /etc/exports

/data/nfs     *(rw,no_root_squash,sync)#也可以写成图片上的内容

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

(3)挂载路径需要创建出来

[root@kuangshen ~]# vim /etc/exports
[root@kuangshen ~]# mkdir /data
[root@kuangshen ~]# cd /data
[root@kuangshen data]# mkdir nfs
[root@kuangshen data]# ls
nfs

第二步 在k8s集群node节点安装nfs

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

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

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

第三步 在nfs服务器启动nfs服务

[root@kuangshen data]# systemctl start nfs
[root@kuangshen data]# ps -ef | grep nfs
root     32603     2  0 19:31 ?        00:00:00 [nfsd4_callbacks]
root     32609     2  0 19:31 ?        00:00:00 [nfsd]
root     32610     2  0 19:31 ?        00:00:00 [nfsd]
root     32611     2  0 19:31 ?        00:00:00 [nfsd]
root     32612     2  0 19:31 ?        00:00:00 [nfsd]
root     32613     2  0 19:31 ?        00:00:00 [nfsd]
root     32614     2  0 19:31 ?        00:00:00 [nfsd]
root     32615     2  0 19:31 ?        00:00:00 [nfsd]
root     32616     2  0 19:31 ?        00:00:00 [nfsd]
root     32719 30878  0 19:32 pts/0    00:00:00 grep --color=auto nfs

第四步 在k8s集群部署应用使用nfs持久化网络存储

[root@master pv]# vim nfs-nginx.yaml  #这里粘贴的内容就是下面nfs-nginx.yaml文件里面的内容
[root@master pv]# kubectl apply -f nfs-nginx.yaml
deployment.apps/nginx-dep1 created

        
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dep1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
        - name: html
          nfs:
            server: nfs服务端的ip地址
            path: /data/nfs      

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

[root@master pv]# kubectl get pods
NAME                                             READY   STATUS              RESTARTS   AGE
ds-test-489bb                                    1/1     Running             0          2d
ds-test-4rvcr                                    1/1     Running             0          2d
ds-test-nx6kt                                    1/1     Running             0          2d
hello-1623412080-9hq98                           0/1     Completed           0          3m3s
hello-1623412140-dgssl                           0/1     Completed           0          2m3s
hello-1623412200-9mqss                           0/1     Completed           0          63s
hello-1623412260-ffkxx                           0/1     ContainerCreating   0          12s
nginx-dep1-7d6c86b544-gc4cr                      0/1     ContainerCreating   0          8m35s

查看日志出的错误:

 [root@master pv]# kubectl describe pod nginx-dep1-7d6c86b544-gc4cr

 Warning  FailedMount  23s (x2 over 4m41s)  kubelet            MountVolume.SetUp failed for volume "wwwroot" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t nfs 8.140.99.18:/data/nfs /var/lib/kubelet/pods/b1e30a93-e417-486f-925d-8a079d7ff06d/volumes/kubernetes.io~nfs/wwwroot
Output: mount.nfs: Connection timed out
  Warning  FailedMount  7s (x4 over 6m56s)  kubelet  Unable to attach or mount volumes: unmounted volumes=[wwwroot], unattached volumes=[wwwroot default-token-8vnf8]: timed out waiting for the condition

还没能解决这个问题

下面这截图是成功执行的样子

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

PV和PVC

1.PV:持久化存储,对存储资源进行抽象,对外提供可以调用的地方。(生产者)

2.PVC:用于调用不需要关系内部实现细节(消费者)

3.实现流程

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

pvc.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dep1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
      - name: wwwroot
        persistentVolumeClaim:
          claimName: my-pvc

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

pv.ymal

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /data/nfs
    server: nfs服务端的ip地址
[root@master pv]# rz 

[root@master pv]# ls
pvc.yaml  pv.yaml
[root@master pv]# rz

[root@master pv]# kubectl apply -f pv.yaml
persistentvolume/my-pv unchanged
[root@master pv]# kubectl get pv,pvc
NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
persistentvolume/my-pv   5Gi        RWX            Retain           Bound    default/my-pvc                           3h4m

NAME                            STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/my-pvc    Bound     my-pv    5Gi        RWX                           3h6m
persistentvolumeclaim/myclaim   Pending                                      nfs            20m

[root@master pv]# kubectl get pods
NAME                                             READY   STATUS              RESTARTS   AGE
ds-test-489bb                                    1/1     Running             0          3d
ds-test-4rvcr                                    1/1     Running             0          3d
ds-test-nx6kt                                    1/1     Running             0          3d
hello-1623500940-lf9vs                           0/1     Completed           0          2m38s
hello-1623501000-hxnqg                           0/1     Completed           0          98s
hello-1623501060-l5nlp                           0/1     Completed           0          38s
nginx-dep1-69f5bb95b-585fr                       0/1     ContainerCreating   0          4m12s
nginx-dep1-69f5bb95b-8smrj                       0/1     ContainerCreating   0          4m12s
nginx-dep1-69f5bb95b-wfzxz                       0/1     ContainerCreating   0          4m12s
weave-scope-agent-ui-44tjs                       1/1     Running             0          28h
weave-scope-agent-ui-crnmn                       0/1     ImagePullBackOff    0          28h
weave-scope-agent-ui-d6tm2                       1/1     Running             0          28h
weave-scope-agent-ui-rwpcq                       1/1     Running             0          28h
weave-scope-agent-ui1-cdwzs                      1/1     Running             0          28h
weave-scope-agent-ui1-chkr2                      0/1     ImagePullBackOff    0          28h
weave-scope-agent-ui1-mwqjb                      1/1     Running             0          28h
weave-scope-agent-ui1-tjbmb                      1/1     Running             0          28h
weave-scope-agent-ui3-bp7lc                      0/1     ImagePullBackOff    0          28h
weave-scope-agent-ui3-j6tvt                      1/1     Running             0          28h
weave-scope-agent-ui3-khw2t                      1/1     Running             0          28h
weave-scope-agent-ui3-wq5fw                      1/1     Running             0          28h
weave-scope-cluster-agent-ui3-5b8fcd7c97-f2p84   1/1     Running             0          28h
weave-scope-frontend-ui3-684bccd8f4-8742z        1/1     Running             0          28h
web3-deploy-6799fc88d8-p74vt                     1/1     Running             0          25h
[root@master pv]# 

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

错误信息

 [root@master pv]# kubectl describe pod nginx-dep1-69f5bb95b-585fr  #查看节点详细信息

 Normal   Scheduled    6m53s  default-scheduler  Successfully assigned default/nginx-dep1-69f5bb95b-585fr to node02
  Warning  FailedMount  2m36s  kubelet            MountVolume.SetUp failed for volume "my-pv" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t nfs 8.140.99.18:/data/nfs /var/lib/kubelet/pods/10f49896-989e-4075-9b11-f3533640d602/volumes/kubernetes.io~nfs/my-pv
Output: mount.nfs: Connection timed out
  Warning  FailedMount  21s (x3 over 4m51s)  kubelet  Unable to attach or mount volumes: unmounted volumes=[wwwroot], unattached volumes=[wwwroot default-token-8vnf8]: timed out waiting for the condition

目前 nfs和pv pvc都未能成功,网上找的资料也未能解决这个问题

这是操作成功应该有的截图

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

知识点补充删除所有pod的命令

 kubectl delete pod --all

集群资源监控

1.监控指标

  • 集群监控
    • 节点资源利用率
    • 节点数
    • 运行pods
  • Pod监控
    • 容器指标
    • 应用程序

2.监控平台搭建方案

prometheus + Grafana

(1)prometheus

  • 开源的
  • 监控、报警、数据库
  • 以HTTP协议周期性抓取被监控组件状态
  • 不需要很复杂的集成过程,使用http接口接入就可以了

(2) Grafana

  • 开源的数据分析和可视化工具
  • 支持多种数据源

第155天学习打卡(Kubernetes emptyDir nfs pv和pvc 集群资源监控)

B站学习网址:k8s教程由浅入深-尚硅谷_哔哩哔哩_bilibili

上一篇:Kubernetes主机间cluster ip时通时不通


下一篇:ingress 实战