• 【云原生】2.5 Kubernetes 核心实战(下)


     哈喽~大家好呀,我们这篇继续开始上篇和上上篇的讲解(感觉我在水文,这是这系列的最后一篇了,偷偷告诉你们,下一篇有惊喜哟~),好吧,废话少说,我们就来开始上课吧!

     

     🥇个人主页:个人主页​​​​​             

    🥈 系列专栏:【云原生系列】

    🥉与这篇相关的文章:            

     

    目录

    一、基本概念与NFS环境搭建

    1、搭建网络文件系统

    2、Deplryment使用NFS进行挂载

     二、PV 与 PVC使用

    1、创建pv池

    三、使用SConfigMap抽取配置

    四、Secret场景示例


    一、基本概念与NFS环境搭建

    看图,在未来,我们有各种各样的 Pod,有一些数据想挂在外面修改,比如:我们将 Pod 的 / data,挂在到 / a里面,其他也一样。

     

    当我们三号机某一应用出现故障时,这是他会故障转移,等 5 分钟后还没自愈成功,这是会转移到 2 号机上面,但三号机的数据会在 2 号机吗?答案是不会。我们将外面的叫——存储层。

    1、搭建网络文件系统

    要搭建,必须所有的人都安装 nfs

    所有机器安装

    yum install -y nfs-utils

    然后在主节点设置 nfs 主节点

    echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
    1. mkdir -p /nfs/data
    2. systemctl enable rpcbind --now
    3. systemctl enable nfs-server --now

    检查配置是否生效

    exportfs -r

     

     执行命令挂载 nfs 服务器上的共享目录到本机路径 /root/nfsmount

    1. mkdir -p /nfs/data
    2. mount -t nfs 172.31.0.4:/nfs/data /nfs/data

    写入测试文件

    echo "hello nfs server" > /nfs/data/test.txt

    2、Deplryment使用NFS进行挂载

    输入一下代码来测试一下

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. app: nginx-pv-demo
    6. name: nginx-pv-demo
    7. spec:
    8. replicas: 2
    9. selector:
    10. matchLabels:
    11. app: nginx-pv-demo
    12. template:
    13. metadata:
    14. labels:
    15. app: nginx-pv-demo
    16. spec:
    17. containers:
    18. - image: nginx
    19. name: nginx
    20. volumeMounts:
    21. - name: html
    22. mountPath: /usr/share/nginx/html
    23. volumes:
    24. - name: html
    25. nfs:
    26. server: 172.31.0.4
    27. path: /nfs/data/nginx-pv

     二、PV 与 PVC使用

    啥是 PV?啥又是 PVC ?

    PV:持久卷(Persistent Volume),将应用需要持久化的数据保存到指定位置

    PVC:持久卷申明(Persistent Volume Claim),申明需要使用的持久卷规格

    举个例子,假设我们需要 1GB 的持久卷(PV),那么 PVC 就是我们 Pod 要去申请的申请书,申请书与 PV 的卷符合之后,再来确定位置。

     1、创建pv池

    nfs主节点

    1. mkdir -p /nfs/data/01
    2. mkdir -p /nfs/data/02
    3. mkdir -p /nfs/data/03

    创建PV

    注:记得改 server 的地址)

    1. apiVersion: v1
    2. kind: PersistentVolume
    3. metadata:
    4. name: pv01-10m
    5. spec:
    6. capacity:
    7. storage: 10M
    8. accessModes:
    9. - ReadWriteMany
    10. storageClassName: nfs
    11. nfs:
    12. path: /nfs/data/01
    13. server: 172.31.0.4
    14. ---
    15. apiVersion: v1
    16. kind: PersistentVolume
    17. metadata:
    18. name: pv02-1gi
    19. spec:
    20. capacity:
    21. storage: 1Gi
    22. accessModes:
    23. - ReadWriteMany
    24. storageClassName: nfs
    25. nfs:
    26. path: /nfs/data/02
    27. server: 172.31.0.4
    28. ---
    29. apiVersion: v1
    30. kind: PersistentVolume
    31. metadata:
    32. name: pv03-3gi
    33. spec:
    34. capacity:
    35. storage: 3Gi
    36. accessModes:
    37. - ReadWriteMany
    38. storageClassName: nfs
    39. nfs:
    40. path: /nfs/data/03
    41. server: 172.31.0.4

     

     PV 创建好了之后再来创建 PVC

    创建Pod绑定PVC

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. app: nginx-deploy-pvc
    6. name: nginx-deploy-pvc
    7. spec:
    8. replicas: 2
    9. selector:
    10. matchLabels:
    11. app: nginx-deploy-pvc
    12. template:
    13. metadata:
    14. labels:
    15. app: nginx-deploy-pvc
    16. spec:
    17. containers:
    18. - image: nginx
    19. name: nginx
    20. volumeMounts:
    21. - name: html
    22. mountPath: /usr/share/nginx/html
    23. volumes:
    24. - name: html
    25. persistentVolumeClaim:
    26. claimName: nginx-pvc

    三、使用SConfigMap抽取配置

    在这里挂在文件用 ConfigMap

    作用:抽取应用配置,并且可以自动更新

    创建配置,redis保存到k8s的etcd;

    kubectl create cm redis-conf --from-file=redis.conf

    data是所有真正的数据,key:默认是文件名   value:配置文件的内容 

    1. apiVersion: v1
    2. data:
    3. redis.conf: |
    4. appendonly yes
    5. kind: ConfigMap
    6. metadata:
    7. name: redis-conf
    8. namespace: default

    创建Pod

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: redis
    5. spec:
    6. containers:
    7. - name: redis
    8. image: redis
    9. command:
    10. - redis-server
    11. - "/redis-master/redis.conf" #指的是redis容器内部的位置
    12. ports:
    13. - containerPort: 6379
    14. volumeMounts:
    15. - mountPath: /data
    16. name: data
    17. - mountPath: /redis-master
    18. name: config
    19. volumes:
    20. - name: data
    21. emptyDir: {}
    22. - name: config
    23. configMap:
    24. name: redis-conf
    25. items:
    26. - key: redis.conf
    27. path: redis.conf

    检查默认配置

    1. kubectl exec -it redis -- redis-cli
    2. 127.0.0.1:6379> CONFIG GET appendonly
    3. 127.0.0.1:6379> CONFIG GET requirepass

    修改ConfigMap

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: example-redis-config
    5. data:
    6. redis-config: |
    7. maxmemory 2mb
    8. maxmemory-policy allkeys-lru

    检查配置是否更新

    1. kubectl exec -it redis -- redis-cli
    2. 127.0.0.1:6379> CONFIG GET maxmemory
    3. 127.0.0.1:6379> CONFIG GET maxmemory-policy

    检查指定文件内容是否已经更新

    修改了CM。Pod里面的配置文件会跟着变

    配置值未更改,因为需要重新启动 Pod 才能从关联的 ConfigMap 中获取更新的值。

    原因:我们的Pod部署的中间件自己本身没有热更新能力

    四、Secret场景示例

    Secret 对象类型用来保存敏感信息,例如密码、令牌和密钥等信息。 将这些信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。

    1. kubectl create secret docker-registry leifengyang-docker \
    2. --docker-username=leifengyang \
    3. --docker-password=Lfy123456 \
    4. --docker-email=534096094@qq.com
    5. ##命令格式
    6. kubectl create secret docker-registry regcred \
    7. --docker-server=<你的镜像仓库服务器> \
    8. --docker-username=<你的用户名> \
    9. --docker-password=<你的密码> \
    10. --docker-email=<你的邮箱地址>
    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: private-nginx
    5. spec:
    6. containers:
    7. - name: private-nginx
    8. image: leifengyang/guignginx:v1.0
    9. imagePullSecrets:
    10. - name: leifengyang-docker

    好了致辞我们 k8s 篇就讲完了,下一篇就来到了 KubeSphere 篇。

     (求关注)持续更新中……

  • 相关阅读:
    想读项目源码?可为什么总是读不下去?
    Python技能树测评
    【PS-8】选区
    模拟pdf运行js脚本触发xss攻击及防攻击
    油管评论抓取软件,专为文科生、小白用户开发!
    scipy.optimize.linprog()函数--求解线性规划问题
    那些转到IT行业的人,现在怎样了?
    Flink1.15源码解析--任务提交流程----flink run
    4-面试官:有哪些创建线程的方法?推荐使用哪种?
    LVS负载均衡集群
  • 原文地址:https://blog.csdn.net/aasd23/article/details/125564019