nfs

所有节点

#所有机器安装
yum install -y nfs-utils

主节点

#nfs主节点
echo "/app/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
# /app/nfs/data/ :存放数据的目录
mkdir -p /app/nfs/data # 创建 存放数据的目录
systemctl enable rpcbind --now
systemctl enable nfs-server --now
#配置生效
exportfs -r

从节点

showmount -e 192.168.111.101


mkdir -p /app/nfs/data  # 应该 先创建目录,再挂载

mount -t nfs 192.168.111.101:/app/nfs/data /app/data # 挂载192.168.111.101:/app/nfs/data到本机的/app/data
# 写入一个测试文件
echo "hello nfs server" >/app/data/test.txt 

创建Pod

nfs-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dep
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.18.0
        volumeMounts:
        - name: root
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
        - name: root
          nfs:
            server: 192.168.111.101
            path: /app/data/nfs

在这里插入图片描述

查看Pod
在这里插入图片描述

创建文件

 cd /app/data/nfs/
 vim index.html
 <h1> Hello World!</h1>

在这里插入图片描述

访问测试

kubectl expose deploy nginx-dep --port=80 --type=NodePort --target-port=80
kubectl get svc #查看服务

在这里插入图片描述

在这里插入图片描述

PV、PVC

PV和PVC概述

● 前面我们已经学习了使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml配置nfs。由于kubernetes支持的存储系统有很多,要求客户全部掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用,kubernetes引入了PV和PVC两种资源对象。

● PV(Persistent Volume)是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下PV由kubernetes管理员进行创建和配置,它和底层具体的共享存储技术有关,并通过插件完成和共享存储的对接。

● PVC(Persistent Volume Claim)是持久化卷声明的意思,是用户对于存储需求的一种声明。换言之,PVC其实就是用户向kubernetes系统发出的一种资源需求申请。
在这里插入图片描述

PV的使用

pvc.yaml

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

pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /app/data/nfs
    server: 192.168.111.101

pv-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dep
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.18.0
        volumeMounts:
        - name: root
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
        - name: root
          persistentVolumeClaim:
            claimName: my-pvc
kubectl apply -f pvc.yaml
kubectl apply -f pv.yaml
kubectl apply -f pv-nginx.yaml

在这里插入图片描述

查看Pod、PV、PVC

kubectl get po
kubectl get pv
kubectl get pvc

在这里插入图片描述

暴露服务

kubectl expose deploy nginx-dep --port=80 --type=NodePort --target-port=80
kubectl get svc #查看服务

在这里插入图片描述

创建文件

 cd /app/data/nfs/
 vim index.html
 <h1> Hello World!</h1>

在这里插入图片描述

访问测试

kubectl get svc

在这里插入图片描述
在这里插入图片描述

Secret

Secret的主要作用就是加密数据,然后存在etcd里面,让Pod容器以挂载Volume方式进行访问

场景:用户名 和 密码进行加密

一般场景的是对某个字符串进行base64编码 进行加密

echo -n 'admin' | base64

在这里插入图片描述

变量形式挂载到Pod

创建secret加密数据的yaml文件 secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

创建Secret

kubectl apply  -f secret.yaml

查看Secret

kubectl get secret

在这里插入图片描述

secret-var.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx:1.18.0
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password

创建Pod

kubectl apply -f  secret-var.yaml

在这里插入图片描述

进入容器,查看结果

kubectl exec -it mypod /bin/bash
echo $SECRET_USERNAME
echo $SECRET_PASSWORD

在这里插入图片描述

删除Pod

kubectl delete -f secret-var.yaml

数据卷形式挂载

创建secret加密数据的yaml文件 secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

创建Secret

kubectl apply  -f secret.yaml

secret-vol.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx:1.18.0
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret

创建Pod

kubectl apply -f secret-vol.yaml

进入容器,查看结果

kubectl exec -it mypod /bin/bash
ls /etc/foo

在这里插入图片描述

ConfigMap

ConfigMap作用是存储不加密的数据到etcd中,让Pod以变量或数据卷Volume挂载到容器中

应用场景:配置文件

创建配置文件

首先我们需要创建一个配置文件 redis.properties

redis.port=127.0.0.1
redis.port=6379
redis.password=123456

创建ConfigMap

使用命令创建configmap

kubectl create configmap redis-config --from-file=redis.properties # --from-file 表示从哪个文件生成configmap 

然后查看详细信息

kubectl describe cm redis-config

在这里插入图片描述

变量的形式挂载到Pod

创建我们的配置文件myconfig.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info
  special.type: hello

# 创建ConfigMap
kubectl apply -f myconfig.yaml
# 获取
kubectl get cm

在这里插入图片描述

configmap-var.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(LEVEL) ---$(TYPE)" ]
      env:
        - name: LEVEL
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.level
        - name: TYPE
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.type
  restartPolicy: Never

创建Pod

kubectl apply -f configmap-var.yaml

查看Pod
在这里插入图片描述
查看结果

kubectl logs pod mypod

在这里插入图片描述

数据卷形式挂载

创建我们的配置文件myconfig.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info
  special.type: hello

# 创建ConfigMap
kubectl apply -f myconfig.yaml
# 获取
kubectl get cm

在这里插入图片描述

configmap-vol.yaml
提前准备好redis-config

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
      volumeMounts:
      - name: configmap-volume
        mountPath: /etc/config
  volumes:
    - name: configmap-volume
      configMap:
        name: redis-config
  restartPolicy: Never

kubectl apply -f configmap-vol.yaml
kubectl describe cm redis-config

在这里插入图片描述

在这里插入图片描述

查看结果

kubectl logs mypod

在这里插入图片描述

完成!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐