Kubernetes学习笔记03

news2024/11/26 0:46:57

第八章、Kubernetes控制器Controller详解

Statefulset

Statefulset主要是用来部署有状态应用

对于StatefulSet中的Pod,每个Pod挂载自己独立的存储,如果一个Pod出现故障,从其他节点启动一个同样名字的Pod,要挂载上原来Pod的存储继续以它的状态提供服务。

无状态应用

我们原来使用 deployment,部署的都是无状态的应用,那什么是无状态应用?

  • 认为Pod都是一样的
  • 没有顺序要求
  • 不考虑应用在哪个node上运行
  • 能够进行随意伸缩和扩展

有状态应用

上述的因素都需要考虑到

  • 让每个Pod独立的
  • 让每个Pod独立的,保持Pod启动顺序和唯一性
  • 唯一的网络标识符,持久存储
  • 有序,比如mysql中的主从

适合StatefulSet的业务包括数据库服务MySQL 和 PostgreSQL,集群化管理服务Zookeeper、etcd等有状态服务

StatefulSet的另一种典型应用场景是作为一种比普通容器更稳定可靠的模拟虚拟机的机制。传统的虚拟机正是一种有状态的宠物,运维人员需要不断地维护它,容器刚开始流行时,我们用容器来模拟虚拟机使用,所有状态都保存在容器里,而这已被证明是非常不安全、不可靠的。

使用StatefulSet,Pod仍然可以通过漂移到不同节点提供高可用,而存储也可以通过外挂的存储来提供 高可靠性,StatefulSet做的只是将确定的Pod与确定的存储关联起来保证状态的连续性。

部署有状态应用

无头service, ClusterIp:none

这里就需要使用 StatefulSet部署有状态应用

然后通过查看pod,能否发现每个pod都有唯一的名称

然后我们在查看service,发现是无头的service

这里有状态的约定,肯定不是简简单单通过名称来进行约定,而是更加复杂的操作

  • deployment:是有身份的,有唯一标识
  • statefulset:根据主机名 + 按照一定规则生成域名

每个pod有唯一的主机名,并且有唯一的域名

  • 格式:主机名称.service名称.名称空间.svc.cluster.local
  • 举例:nginx-statefulset-0.default.svc.cluster.local

DaemonSet

DaemonSet 即后台支撑型服务,主要是用来部署守护进程

长期伺服型和批处理型的核心在业务应用,可能有些节点运行多个同类业务的Pod,有些节点上又没有这类的Pod运行;而后台支撑型服务的核心关注点在K8S集群中的节点(物理机或虚拟机),要保证每个节点上都有一个此类Pod运行。节点可能是所有集群节点,也可能是通过 nodeSelector选定的一些特定节点。典型的后台支撑型服务包括:存储、日志和监控等。在每个节点上支撑K8S集群运行的服务。

守护进程在我们每个节点上,运行的是同一个pod,新加入的节点也同样运行在同一个pod里面

  • 例子:在每个node节点安装数据采集工具

这里是不是一个FileBeat镜像,主要是为了做日志采集工作

进入某个 Pod里面,进入

kubectl exec -it ds-test-cbk6v bash

通过该命令后,我们就能看到我们内部收集的日志信息了

Job和CronJob

一次性任务 和 定时任务

  • 一次性任务:一次性执行完就结束
  • 定时任务:周期性执行

Job是K8S中用来控制批处理型任务的API对象。批处理业务与长期伺服业务的主要区别就是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出了。成功完成的标志根据不同的 spec.completions 策略而不同:单Pod型任务有一个Pod成功就标志完成;定数成功行任务保证有N个任务全部成功;工作队列性任务根据应用确定的全局成功而标志成功。

Job

Job也即一次性任务

使用下面命令,能够看到目前已经存在的Job

kubectl get jobs

在计算完成后,通过命令查看,能够发现该任务已经完成

我们可以通过查看日志,查看到一次性任务的结果

kubectl logs pi-qpqff

CronJob

定时任务,cronjob.yaml如下所示

这里面的命令就是每个一段时间,这里是通过 cron 表达式配置的,通过 schedule字段

然后下面命令就是每个一段时间输出

我们首先用上述的配置文件,创建一个定时任务

kubectl apply -f cronjob.yaml

创建完成后,我们就可以通过下面命令查看定时任务

kubectl get cronjobs

我们可以通过日志进行查看

kubectl logs hello-1599100140-wkn79

然后每次执行,就会多出一个 pod

删除svc 和 statefulset

使用下面命令,可以删除我们添加的svc 和 statefulset

kubectl delete svc web kubectl delete statefulset --all

Replication Controller

Replication Controller 简称 RC,是K8S中的复制控制器。RC是K8S集群中最早的保证Pod高可用的API对象。通过监控运行中的Pod来保证集群中运行指定数目的Pod副本。指定的数目可以是多个也可以是1个;少于指定数目,RC就会启动新的Pod副本;多于指定数目,RC就会杀死多余的Pod副本。

即使在指定数目为1的情况下,通过RC运行Pod也比直接运行Pod更明智,因为RC也可以发挥它高可用的能力,保证永远有一个Pod在运行。RC是K8S中较早期的技术概念,只适用于长期伺服型的业务类型,比如控制Pod提供高可用的Web服务。

Replica Set

Replica Set 检查 RS,也就是副本集。RS是新一代的RC,提供同样高可用能力,区别主要在于RS后来居上,能够支持更多种类的匹配模式。副本集对象一般不单独使用,而是作为Deployment的理想状态参数来使用

第九章、Kubernetes配置管理

Secret

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

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

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

echo -n 'admin' | base64

变量形式挂载到Pod

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

然后使用下面命令创建一个pod

kubectl create -f secret.yaml

通过get命令查看

kubectl get pods

然后我们通过下面的命令,进入到我们的容器内部

kubectl exec -it mypod bash

然后我们就可以输出我们的值,这就是以变量的形式挂载到我们的容器中

# 输出用户 echo $SECRET_USERNAME # 输出密码 echo $SECRET_PASSWORD

最后如果我们要删除这个Pod,就可以使用这个命令

kubectl delete -f secret-val.yaml

数据卷形式挂载

首先我们创建一个 secret-val.yaml 文件

然后创建我们的 Pod

# 根据配置创建容器 kubectl apply -f secret-val.yaml # 进入容器 kubectl exec -it mypod 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

然后查看详细信息

kubectl describe cm redis-config

Volume数据卷形式挂载

首先我们需要创建一个 cm.yaml

然后使用该yaml创建我们的pod

# 创建 kubectl apply -f cm.yaml # 查看 kubectl get pods

最后我们通过命令就可以查看结果输出了

kubectl logs mypod

以变量的形式挂载Pod

首先我们也有一个 myconfig.yaml文件,声明变量信息,然后以configmap创建

然后我们就可以创建我们的配置文件

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

然后我们创建完该pod后,我们就需要在创建一个 config-var.yaml 来使用我们的配置信息

最后我们查看输出

kubectl logs mypod

第十章、Kubernetes集群安全机制

概述

当我们访问K8S集群时,需要经过三个步骤完成具体操作

  • 认证
  • 鉴权【授权】
  • 准入控制

进行访问的时候,都需要经过 apiserver, apiserver做统一协调,比如门卫

  • 访问过程中,需要证书、token、或者用户名和密码
  • 如果访问pod需要serviceAccount

认证

对外不暴露8080端口,只能内部访问,对外使用的端口6443

客户端身份认证常用方式

  • https证书认证,基于ca证书
  • http token认证,通过token来识别用户
  • http基本认证,用户名 + 密码认证

鉴权

基于RBAC进行鉴权操作

基于角色访问控制

准入控制

就是准入控制器的列表,如果列表有请求内容就通过,没有的话 就拒绝

RBAC介绍

基于角色的访问控制,为某个角色设置访问内容,然后用户分配该角色后,就拥有该角色的访问权限

k8s中有默认的几个角色

  • role:特定命名空间访问权限
  • ClusterRole:所有命名空间的访问权限

角色绑定

  • roleBinding:角色绑定到主体
  • ClusterRoleBinding:集群角色绑定到主体

主体

  • user:用户
  • group:用户组
  • serviceAccount:服务账号

RBAC实现鉴权

  • 创建命名空间

创建命名空间

我们可以首先查看已经存在的命名空间

kubectl get namespace

然后我们创建一个自己的命名空间 roledemo

kubectl create ns roledemo

命名空间创建Pod

为什么要创建命名空间?因为如果不创建命名空间的话,默认是在default下

kubectl run nginx --image=nginx -n roledemo

创建角色

我们通过 rbac-role.yaml进行创建

tip:这个角色只对pod 有 get、list权限

然后通过 yaml创建我们的role

# 创建

kubectl apply -f rbac-role.yaml

# 查看

kubectl get role -n roledemo

创建角色绑定

我们还是通过 role-rolebinding.yaml 的方式,来创建我们的角色绑定

然后创建我们的角色绑定

# 创建角色绑定

kubectl apply -f rbac-rolebinding.yaml

# 查看角色绑定

kubectl get role, rolebinding -n roledemo

使用证书识别身份

我们首先得有一个 rbac-user.sh 证书脚本

这里包含了很多证书文件,在TSL目录下,需要复制过来

通过下面命令执行我们的脚本

./rbac-user.sh

最后我们进行测试

# 用get命令查看 pod 【有权限】

kubectl get pods -n roledemo

# 用get命令查看svc 【没权限】

kubectl get svc -n roledmeo

第十一章、Kubernetes核心技术Ingress

前言

原来我们需要通过将端口号暴露到外部,使用 Service 的 NodePort 类型来实现。这样,每个节点都会启动该端口,从而使得在访问时,可以通过任何节点的 IP 地址和相应的端口号来访问服务。

但是NodePort还存在一些缺陷

  • 因为端口不能重复,所以每个端口只能使用一次,一个端口对应一个应用
  • 实际访问中都是用域名,根据不同域名跳转到不同端口服务中

Ingress和Pod关系

pod 和 ingress 是通过service进行关联的,而ingress作为统一入口,由service关联一组pod中

  • 首先service就是关联我们的pod
  • 然后ingress作为入口,首先需要到service,然后发现一组pod
  • 发现pod后,就可以做负载均衡等操作

Ingress工作流程

在实际的访问中,我们都是需要维护很多域名, a.com 和 b.com

然后不同的域名对应的不同的Service,然后service管理不同的pod

需要注意,ingress不是内置的组件,需要我们单独的安装

使用Ingress

步骤如下所示

  • 部署ingress Controller【需要下载官方的】
  • 创建ingress规则【对哪个Pod、名称空间配置规则】

创建Nginx Pod

创建一个nginx应用,然后对外暴露端口

# 创建

pod kubectl create deployment web --image=nginx

# 查看

kubectl get pods

对外暴露端口

kubectl expose deployment web --port=80 --target-port=80 --type:NodePort

部署 ingress controller

下面我们来通过yaml的方式,部署我们的ingress,配置文件如下所示

这个文件里面,需要注意的是 hostNetwork: true,改成ture是为了让后面访问到

kubectl apply -f ingress-con.yaml

通过这种方式,其实我们在外面就能访问,这里还需要在外面添加一层

kubectl apply -f ingress-con.yaml

最后通过下面命令,查看是否成功部署 ingress

kubectl get pods -n ingress-nginx

创建ingress规则文件

创建ingress规则文件,ingress-h.yaml

添加域名访问规则

在windows 的 hosts文件,添加域名访问规则【因为我们没有域名解析,所以只能这样做】

最后通过域名就能访问

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

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

相关文章

Vitis HLS 学习笔记--AXI4 主接口

目录 1. 简介 2. 认识MAXI 3. MAXI突发操作 3.1 全局/本地存储器 3.2 MAXI优势与特点 3.3 查看MAXI报告 3.3.1 HW Interfaces 3.3.2 M_AXI Burst Information 3.4 MAXI 资源消耗 4. 理解 Volatile 4.1 标准C/C中的 volatile 4.2 HLS 中的 volatile 5. 总结 1. 简介…

CACTER AI实验室:AI大模型在邮件安全领域的应用

随着人工智能技术的飞速发展,AI已经深入到生活的各个领域。AI大模型在邮件安全领域展现出巨大潜力,尤其是反钓鱼检测上的应用,正逐渐展现出其独特的价值。 4月24日,CACTER AI实验室高级产品经理刘佳雄在直播交流会上分享了CACTER …

飞腾FT2000/4+银河麒麟全国产VPX架构 6U尺寸标准板卡,适用于船舶、交通等领域

XM-FT2000-VPX主板 XM-FT2000-VPX主板为VPX架构 6U尺寸标准板卡,提供的接口有DVI、USB、网络、UART、PCIE等接口。 处理器: FT2000/4四核国产处理器 芯片: 兆芯ZX-200芯片组 内存: 国产内存颗粒,双通道DDR4&#xff0…

应用场景:四大场景,用虚拟直播技术助力破圈

应用场景:四大场景用虚拟直播技术助力破圈 直播场景有四大类,看看你适合,哪一类场景的搭建: 1.教育型直播:寓教于货,文化浓厚; 人设:老师人设,以内容输出,“…

Python从0到100(十七):面向对象编程进阶

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

AI Agent新对决:LangGraph与AutoGen的技术角力

AI Agent变革未来,LangGraph对抗AutoGen ©作者|Blaze 来源|神州问学 引言 比尔.盖茨曾在他的博客上发表一篇文章:《AI is about to completely change how you use computers》。在文章中,比尔盖茨探讨AI Agent对我们未来生活的巨大影…

hadoop命令

hadoop命令 目录 hadoop命令 1.查看文件下面有哪些文件和目录 2.获取文件信息 查看文件内容 3.创建一个文件夹 4.剪切 1)从本地hadoop剪切到hdfs并上传到hdfs 2)剪切 从hdfs剪切到本地hadoop目录上 5.删除 1)递归删除 2&#xff0…

HotSpot JVM 为啥要叫做 HotSpot JVM?

1. Java与编译相关的三个概念: 首先了解三个概念 前端编译解释执行编译执行 ▌1.1、前端编译 编译器(javac)将源文件(.java)编译成java字节码文件(.class)的步骤是前端编译。 ▌1.2、解释执…

开放创新:蓝牙墨水屏标签,API接口助力,共创智慧新生态!

在当今科技日新月异的时代,蓝牙技术的发展为物联网应用带来了新的可能性。本文将探讨蓝牙墨水屏标签与API接口的应用,重点关注于串口协议、信号强度与广播频率自定义、蓝牙信标动态更改、蓝牙广播协议和开放定位数据等方面。具体场景包括设备资产显示标签…

python:reportlab 生成pdf:基本用法。

1.首先,打开cmd,安装reportlab pip install -i https://pypi.tuna.tsinghua.edu.cn/simple reportlab #从清华镜像安装更快 然后就可以使用其基本用法。 from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvasdef genera…

【鸿蒙应用】理财App

目录 第一节项目讲解项目介绍 第二节:项目创建登录静态框架编写登录页面设稿新建项目控制台添加项目Login页面封装标题组件 第三节:登录页静态表单编写第四节—内容页架构分析底部栏组件第五节—底部栏组件切换第六节:首页静态页编写第七节&a…

【MySQL 数据宝典】【索引原理】- 004 优化示例-join in exist

一、join 优化原理 1.1 基本连接方式介绍 JOIN 是 MySQL 用来进行联表操作的,用来匹配两个表的数据,筛选并合并出符合我们要求的结果集。 1.2 驱动表的定义 1.2.1 什么是驱动表 多表关联查询时,第一个被处理的表就是驱动表,使用驱动表去关联其他表.驱…

笔记:能量谱密度与功率谱密度(二)

目录 一、ESD与PSD的定义、单位、性质 二、对ESD与PSD的直观理解 三、总结: 某物理量的“分布”在离散系统中,各点(纵坐标含义)的物理意义仍然是该物理量,而在连续系统中,各点(纵坐标含义)的物…

注意力机制略解

引子 例如,现在需要拟合函数f(x),我们已知函数上的若干点(xi,yi) 现在我们想知道在自变量取x’的时候,函数值y’为多少 正常的思路比如拉格朗日插值,牛顿插值,直接去估计函数的表…

Linux网络服务-DHCP

一、DHCP工作原理 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议):用于自动获取IP地址 1.客户端会发送一个广播DHCP Discover报文去寻找DHCP服务器 2.客户端只会接收第一个回复的DHCP服务器的报文 3.服务器会发…

评估LLM

文章目录 一、LLM 基准测试LLM 排行榜 二、评估指标1、传统指标2、非传统指标2.1 基于嵌入的方法2.2 其他基于语言模型的指标2.3 LLM 辅助方法GPTScoreG-Eval 3、可能的陷阱 三、评估基于LLM的应用1、选择评估指标2、评估 评估方法3、构建您的评估集 四、工具1、OpenAI 评估2、…

海外三大AI图片生成器对比(Stable Diffusion、Midjourney、DALL·E 3)

Stable Diffusion DreamStudio 是Stable Diffusion 的官方网页,价格便宜,对图片的操作性强,但同时编辑页面不太直观,对使用者的要求较高。 与 DALLE 和 Midjourney 不同,Stable Diffusion 是开源的。这也意味着&…

微服务:Nacos注册中心

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Nacos注册中心 一、服务注册与发现1.启动Nacos…

【算法每日一练】

蛮有意思的的一道题,最后要判断能否成为一种1~n的全排列,我最这样做的: 整个数组先排序一下。假设遍历到了i,那就判断前面b和r的个数,但是有想到了后面可能还会对前面的结果产生影响,所以就抛弃了这个想法…

项目|保障房房产管理系统,政务房产解决方案

一、系统概况 保障房管理系统是是为了落实中央关于住房保障的相关政策,实现对低收入家庭住房状况的调查管理、保障计划及落实管理、保障申请及审核管理、保障户和保障房源档案管理等。 针对政府保障房产管理的一站式解决方案,专注于为解决复杂、繁琐的…