k8s实战-3

news2024/11/27 18:41:45

k8s实战-3

  • 一、Ingress
    • 1.安装
    • 2.测试
  • 二、存储抽象
    • 1.环境准备
    • 2.PV和PVC
    • 3.ConfigMap
    • 4.Secret
  • 总结


一、Ingress

Ingress 类似于一个“网关”,它负责将外部 HTTP 请求路由到集群内的服务。你可以把它想象成一个“交通警察”,根据请求的 URL 和路径,决定将请求发送到哪个服务。

Ingress 的主要功能

路由规则:定义 URL 路径到服务的映射关系。
负载均衡:将请求分发到集群内的多个服务实例。
TLS 终止:支持 TLS/SSL 加密,可以终止 TLS 连接并将明文请求转发到后端服务。
名称空间隔离:可以在不同的名称空间中定义 Ingress 规则,实现服务隔离。

在这里插入图片描述

1.安装

先从远程拉取yaml配置文件

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/baremetal/deploy.yaml

然后,在apply该配置文件,即可安装ingress

kubectl apply -f deploy.yaml

然后使用下面命令查看ingress是否安装成功

 kubectl get pod,svc -n ingress-nginx

在这里插入图片描述
这下面是关于ingress的端口,未来所有的请求流量都是通过下面的端口进行访问的:

http://IP:31xxx
https://IP:30xxx

在这里插入图片描述

2.测试

测试案例:

创建两个Deployment副本均为2:hello-server、nginx-demo
创建两个Servce,为hello-server、nginx-demo,分别绑定对应的deployment

现在目的是:外部请求流量来到之后,通过请求hello.atguigu.com:31405把请求转接给hello-server进行处理,demo.atguigu.com:31405转接给nginx-demo进行处理。
在这里插入图片描述首先编写yaml配置文件:

apiVersion: networking.k8s.io/v1
kind: Ingress  
metadata:
  name: ingress-host-bar
spec:
  ingressClassName: nginx
  rules:
  - host: "hello.atguigu.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: hello-server
            port:
              number: 8000
  - host: "demo.atguigu.com"
    http:
      paths:
      - pathType: Prefix
        path: "/nginx"  # 把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404
        backend:
          service:
            name: nginx-demo  ## java,比如使用路径重写,去掉前缀nginx
            port:
              number: 8000

应用配置文件:

kubectl apply -f xx.yaml

可以看到servicedeployment均已创建完成:
在这里插入图片描述
接下来,需要设置主机域名。这里需要在本机的hosts文件中添加如下域名对应关系:

公网IP hello.atguigu.com
公网IP demo.atguigu.com

设置完域名对应关系后,可以在浏览器中进行访问:

http://hello.atguigu.com:ingress端口
https://demo.atguigu.com:ingress端口

二、存储抽象

k8s中,存储对象主要用于管理和调度持久存储资源。这些存储对象帮助你在集群中管理和访问持久数据。

在这里插入图片描述

在这里插入图片描述

1.环境准备

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

主节点:

#nfs主节点
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
#创建对应文件夹
mkdir -p /nfs/data
#开机自动rpc绑定
systemctl enable rpcbind --now
#开机自启动nfs
systemctl enable nfs-server --now
#配置生效
exportfs -r

子节点:


#执行以下命令挂载 nfs 服务器上的共享目录到本机路径 /root/nfsmount
mkdir -p /nfs/data

mount -t nfs 主节点私网IP:/nfs/data /nfs/data

# 写入一个测试文件
echo "hello nfs server" > /nfs/data/test.txt

然后可以在其他节点查看并修改文件内容,实现每个结点的数据同步

原生方式数据挂载

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-pv-demo
  name: nginx-pv-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-pv-demo
  template:
    metadata:
      labels:
        app: nginx-pv-demo
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
        - name: html
          nfs:
            server: 172.31.0.4
            path: /nfs/data/nginx-pv

2.PV和PVC

在这里插入图片描述

PersistentVolume (PV)k8s 集群中的一个存储资源对象,它代表了一个持久化的存储空间,可以由集群中的 Pod 使用。

简单理解:

PV 类似于一块“硬盘”:这块硬盘可以被集群中的 Pod 使用。
PV 由集群管理员创建:可以是静态创建的存储资源,也可以是动态创建的存储资源。
PV 一旦创建,就会一直存在:除非被手动删除。

主要特点:

存储类型:PV 支持多种存储类型,如 NFS、iSCSI、AWS EBS、Azure Disk 等。
访问模式:PV 支持不同的访问模式,如 ReadWriteOnce(RWO)、ReadOnlyMany(ROX)、ReadWriteMany(RWX)等。
回收策略:PV 支持不同的回收策略,如 Retain(保留)、Recycle(循环利用)、Delete(删除)等。

案例:

首先,先创建一个PV池:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv01-10m
spec:
  capacity:
    storage: 10M
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/01
    server: 172.31.0.4
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv02-1gi
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/02
    server: 172.31.0.4
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv03-3gi
spec:
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/03
    server: 172.31.0.4

这里的01-02-03目录要在nfs/data目录下创建好

然后,应用配置文件

kubectl apply -f pv.yaml

可以查看到PV池:
在这里插入图片描述

PersistentVolumeClaim (PVC) 是对存储资源的一个请求,用于声明所需的存储容量和访问模式。Pod 可以通过 PVC 来请求存储资源。

简单理解:

PVC 类似于一份“存储订单”:这份订单指定了所需存储的空间大小和访问模式。
PVC 会自动与符合条件的 PV 绑定:从而获得实际的存储空间。

主要特点:

存储请求:PVC 指定所需存储的容量和访问模式。
动态供应:如果集群中有 StorageClass 配置,PVC 可以触发动态供应流程来创建新的 PV。
绑定 PV:PVC 会自动与符合条件的 PV 绑定。

在上面创建的PV池的基础上,创建一个PVC:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nginx-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi
  storageClassName: nfs

它会选在最接近的储存空间的PV,如下:
在这里插入图片描述
当然,一般情况下,我们会在创建pod的时候创建PVC并绑定,如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-deploy-pvc
  name: nginx-deploy-pvc
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-deploy-pvc
  template:
    metadata:
      labels:
        app: nginx-deploy-pvc
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
        - name: html
          persistentVolumeClaim:
            claimName: nginx-pvc

3.ConfigMap

ConfigMap 是一种用于存储非机密配置信息的对象。ConfigMap 可以用来存储应用程序的配置数据,如环境变量、命令行参数等,从而使配置与部署代码分离,便于管理和更新。

ConfigMap 的作用

存储配置数据:ConfigMap 可以用来存储各种配置信息,如数据库连接字符串、环境变量等。
环境隔离:通过使用 ConfigMap,可以轻松地在不同的环境(如开发、测试、生产)之间共享相同的代码基础,同时使用不同的配置。
简化部署:ConfigMap 使得你可以独立于应用代码更新配置,无需重新部署整个应用。

ConfigMap 的使用场景

环境变量:将配置作为环境变量传递给容器。
命令行参数:将配置作为命令行参数传递给容器。
配置文件:将配置作为文件挂载到容器内。

在这里插入图片描述
这段配置文件就是上面图示的内容

apiVersion: v1
kind: Pod
metadata:
  name: redis
spec:
  containers:
  - name: redis
    image: redis
    command:
      - redis-server
      - "/redis-master/redis.conf"  #指的是redis容器内部的位置
    ports:
    - containerPort: 6379
    volumeMounts:
    - mountPath: /data
      name: data
    - mountPath: /redis-master
      name: config
  volumes:
    - name: data
      emptyDir: {}
    - name: config
      configMap:
        name: redis-conf
        items:
        - key: redis.conf
          path: redis.conf

可以修改ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-redis-config
data:
  redis-config: |
    maxmemory 2mb
    maxmemory-policy allkeys-lru 

检查配置是否更新:

kubectl exec -it redis -- redis-cli

127.0.0.1:6379> CONFIG GET maxmemory
127.0.0.1:6379> CONFIG GET maxmemory-policy

配置值未更改,因为需要重新启动 Pod 才能从关联的 ConfigMap 中获取更新的值。
原因:我们的Pod部署的中间件自己本身没有热更新能力

4.Secret

Secret 是一种用于存储敏感信息的对象,如密码、密钥、令牌等。Secret 旨在保护敏感数据,防止它们直接出现在 Pod 的配置或镜像中,从而提高安全性。

Secret的作用

存储敏感数据:Secret 可以用来存储密码、API 密钥、证书等敏感信息。
安全传输:Secret 数据在传输过程中会被加密,防止数据泄露。
环境隔离:可以为不同的环境(如开发、测试、生产)创建不同的 Secret。
生命周期管理:Secret 可以随着 Pod 的生命周期一起管理,当 Pod 不再需要时,可以安全地销毁 Secret。

Secret 的类型

Kubernetes 支持几种类型的 Secret

Opaque:用于存储不透明的二进制数据,如密码、证书等。
kubernetes.io/dockerconfigjson:用于存储 Docker 配置 JSON 文件,通常包含 Docker 登录凭证。
kubernetes.io/service-account-token:用于存储服务账户 Token。
kubernetes.io/tls:用于存储 TLS 证书和密钥。

创建secret:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: cGFzc3dvcmQ=
  password: cGFzc3dvcmQ=
kubectl apply -f secret.yaml

使用:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    env:
    - name: USERNAME
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: username
    - name: PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: password

总结

本篇主要介绍了k8s中的ingress和存储抽象,并没有涉及到很深的解释,只是从使用的角度上介绍如何去用这些内容,想要更深一步的理解还需进一步学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2192621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无锡自闭症康复寄宿学校:每天的康复方式揭秘

无锡自闭症康复寄宿学校的启示:揭秘广州星贝育园的日常康复方式 在自闭症儿童的教育与康复领域,每一所学校都在用自己的方式探索着前行的道路。无锡的自闭症康复寄宿学校以其独特的康复方式和显著的效果,为众多家庭带来了希望。而在广州&…

jvisualvm学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程:封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

前端工程化 - Vue

环境准备 Vue-cli是Vue官方提供的一个脚手架,用户快速生成一个Vue的项目模板。 Vue-cli提供了如下功能: 统一的目录结构本地调试热部署单元测试集成打包上线 需要安装Node.js 安装Vue-cli npm install -g vue/cli通过vue --version指令查看是否安装成…

蓝桥杯省赛真题打卡day4

[蓝桥杯 2013 省 A] 大臣的旅费 题目描述 很久以前,T 王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。 为节省经费,T 国的大臣们经过思考,制定了一套优秀的修建方案&am…

模电中二极管,三极管和电容的应用

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&am…

使用 Python 遍历文件夹

要解决这个问题,使用 Python 的标准库可以很好地完成。我们要做的是遍历目录树,找到所有的 text 文件,读取内容,处理空行和空格,并将处理后的内容合并到一个新的文件中。 整体思路: 遍历子目录&#xff1…

三维模型点云化工具V1.0使用介绍:将三维模型进行点云化生成

三维软件绘制的三维模型导入之后,可以生成点云,用于替代实际的激光扫描过程,当然,主要是用于点云算法的测试和验证,没法真正模拟扫描的效果,因为太过于理想化了。 功能介绍 将三维软件绘制的三维模型变成…

一个月学会Java 第3天 对类的深刻认识

Day3 对类的深刻认识 第一章 方法 在Day2的时候已经浅浅的认识过类,但是还是不够深刻,我们现在来深刻的认识一下类是什么和他的结构,首先在认识类的结构之前我们需要再认识和了解这么一个东西,他就是——方法 方法(method)也叫函…

iMazing只能苹果电脑吗 Win和Mac上的iMazing功能有区别吗

在当今数字时代,管理和备份手机数据变得越来越重要。无论是转移照片、备份短信,还是管理应用程序,一个强大的工具可以大大简化这些操作。iMazing作为一款备受好评的iOS设备管理软件,已经成为许多用户的选择。但是,许多…

用manim实现Gram-Schmidt正交化过程

在线性代数中,正交基有许多美丽的性质。例如,由正交列向量组成的矩阵(又称正交矩阵)可以通过矩阵的转置很容易地进行反转。此外,例如:在由彼此正交的向量张成的子空间上投影向量也更容易。Gram-Schmidt过程是一个重要的算法&#…

GESP C++三级样题卷

(满分:100 分 考试时间:90 分钟) 一、单选题(每题 2 分,共 30 分) 1.下列关于负数的原码、反码、补码的描述中,正确的是( ) A 原码和反码互为按位取反(符号位除外&…

[ComfyUI]Flux:太强了!任意扩图神器,小红书极致逼真风格出游打卡写实风

随着人工智能技术的不断发展,图像生成与反推技术已经成为了AI领域的一大热点。今天,我们就来为大家详细介绍一款由ComfyUI团队开发的超强图像反推工具——Flux,以及如何使用它实现任意扩图和极致逼真风格出游打卡写实风。 一、Flux&#xff…

k8s-集群部署1

k8s-集群部署1 一、基础环境准备二、docker环境准备三、k8s集群部署1.kubeadm创建集群2.使用kubeadm引导集群 总结 一、基础环境准备 首先,需要准备三个服务器实例,这里我使用了阿里云创建了三个实例,如果不想花钱,也可以在VM上创…

第十一章 缓存之更新/穿透/雪崩/击穿

目录 一、什么是缓存 二、缓存更新策略 2.1. 缓存主动更新策略 2.1.1. Cache Aside模式(主流)‌ 2.1.2. Read/Write Through模式‌ 2.1‌.3. Write Behind模式‌ 2.1.4. 总结 三、缓存穿透 四、缓存雪崩 五、缓存击穿 5.1. 互斥锁实现 5.1.1…

好用且不伤眼镜的超声波清洗机排名!谁才是清洁小能手?

对于经常佩戴眼镜的人来说,眼镜的日常清洁保养极为关键。传统清洁方式可能导致镜片刮花和残留污渍,鉴于此,眼镜专用的超声波清洗机应运而生,利用超声振动技术深入微细缝隙,彻底扫除污垢与油脂,保护镜片免受…

计算机编程入门先学什么最好?零基础入门到精通,收藏这篇就够了

看完其他知友的回答,我认为他们的观点过于局限,并没有真正切中问题的要害。 我们不妨换个角度,站在更高一层来看这个问题「计算机编程入门先学什么最好?」 计算机入门最应该学的是 Linux,而非任何的编程语言。 这篇文…

A_H_README_TO_RECOVER勒索恢复---惜分飞

有客户mysql数据库被黑(业务数据库被删除),创建了一个A_H_README_TO_RECOVER库 [rootwww.xifenfei.com ~]# mysql -uroot -pxxxxx Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; …

站岗放哨树形dp

前言&#xff1a;好久没有写树上dp了&#xff0c;这儿题目还是挺有意思的 题目地址 #include<bits/stdc.h> #include<iostream> using namespace std;//#define int long long int n; const int N (int)1e510; int e[N],ne[N],h[N],idx 0; int dp[2][N];void add…

【笔记】神领物流Day1.1.20权限管家

传智权限管家是一个通用的权限管理中台服务&#xff0c;在神领物流项目中&#xff0c;我们使用权限系统管理企业内部员工&#xff0c;比如&#xff1a;快递员、司机、管理员等。 在权限管家中可以管理用户&#xff0c;管理后台系统的菜单&#xff0c;以及角色的管理。 权限管家…

【百度文心智能体】想开发爆款智能体?来看看 万圣节之夜探秘者 智能体开发流程大揭秘

目录 前言 一. 创作灵感 二. 智能体中Prompt如何设计 2.1 头像 && 聊天背景 2.2 智能体简介 && 角色定位与目标 2.3 思考路径 && 个性化 2.4 开场白 && 自动追问 2.5 插件选择 三. 总结 前言 从2022年11月底ChatGPT …