文章目录

  • nfs
  • 所有节点
  • 主节点
  • 从节点
  • 创建Pod
  • 创建文件
  • 访问测试
  • PV、PVC
  • PV和PVC概述
  • PV的使用
  • 暴露服务
  • 创建文件
  • 访问测试
  • Secret
  • 变量形式挂载到Pod
  • 数据卷形式挂载
  • ConfigMap
  • 创建配置文件
  • 创建ConfigMap
  • 变量的形式挂载到Pod
  • 数据卷形式挂载


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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器

查看Pod

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_nginx_02

创建文件

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_linux_03

访问测试

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_nginx_04

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_05

PV、PVC

PV和PVC概述

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

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

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_kubernetes_06

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_07

查看Pod、PV、PVC

kubectl get po
kubectl get pv
kubectl get pvc

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_08

暴露服务

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_09

创建文件

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_10

访问测试

kubectl get svc

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_nginx_11


k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_12

Secret

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

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

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

echo -n 'admin' | base64

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_kubernetes_13

变量形式挂载到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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_14

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_kubernetes_15

进入容器,查看结果

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_16

删除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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_linux_17

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_18

变量的形式挂载到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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_linux_19

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_kubernetes_20


查看结果

kubectl logs pod mypod

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_21

数据卷形式挂载

创建我们的配置文件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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_linux_22

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

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_nginx_23

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_Pod_24

查看结果

kubectl logs mypod

k8s ingress nginx 绑定原理 k8s nginx配置文件管理_服务器_25

完成!