K8S精进之路-控制器StatefulSet有状态控制 -(2)

news/2024/9/28 19:52:23/

状态说明


  在进行StatefulSet部署之前,我们首先可能要了解一下,什么是"有状态应用"和"无状态应用"。无状态应用就是pod无论部署在哪里,在哪台服务器上提供服务,都是一样的结果,比如经常用的nginx。有状态应用中,最经常用的那就属数据库了,因为数据库一般都是绑定了网络状态和存储状态。特别是主从数据库,哪些是主数据库,哪些是从数据库,都有明显的状态标识。离开标识的这台机器,可能就用不了了。

那在K8S中主要表现的状态有哪些呢,如果抽象成现实应用中,一般就是网络拓扑状态和存储状态。

网络拓扑:这意味着在k8s中运行中的应用对应的各个pod实例,都会有固定的启动顺序,而且不管实例pod销毁后新建,网络标识还是原来的网络标识,其它应用要找到它,还是通过原来的网络标识一样能找到。

存储状态:比如,当数据库实例销毁重建后,我存储的数据还是照样是原来的那份数据。数据库存储的数据是有状态的,是直接和这个应用绑定的,不论你pod实例重建多少次都会取到这份自己的数据。

我们先看看StatefulSet是怎样固定网络拓扑状态的。在网络中一般要标识一个地址,都是通过IP地址或者是域名。但是IP地址是不方便被记忆的,所以用一个域名是非常方便的。在K8S中,通过系统的Service DNS是可以确定一个POD的网络标识的。

固定网络拓扑

我们新建一个Headless的Service和nginx

apiVersion: v1
kind: Service
metadata:name: nginxlabels:app: nginx
spec:ports:- port: 80name: webclusterIP: Noneselector:app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:serviceName: "nginx"replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.22.1ports:- containerPort: 80name: web

创建之后发现两个Pod运行,分别为web-0,web-1,IP地址分别是10.244.3.18,10.244.2.20。虽然分配了ip但是ip是动态,唯一固定的是这两个pod的域名和它们创建启动的顺序,先创建web-0,然后是web-1。我们通过<pod-name>.<svc-name>.<namespace>.svc.cluster.local的方式来固定这两个pod的地址。
在这里插入图片描述
我们通过web-0.nginx.default.svc.cluster.local和web-1.nginx.default.svc.cluster.local可以在集群内部访问到这两个Pod。我们接下来通过k8s的coredns来解析这两个域名。先找到coredns的ip地址,然后通过dig来解析。
在这里插入图片描述

在这里插入图片描述
解析后发现pod的域名刚好指向这两个pod的ip地址。我现在删除上面的pod,然后重建,再解析他们的域名,发现ip地址变了,但是域名还是那个域名。

kubectl delete -f teststatefulpod.yaml ; kubectl apply -f teststatefulpod.yaml

在这里插入图片描述

固定存储状态

对于应用的存储,这里用pvc来固定应用的存储位置。相对开发人员这里只要熟悉pvc的配置即可,pv的配置一般由运维人员去配置安装。这里我们用分布式存储Rook+Ceph,安装方式可以参考这篇文章<<Centos7.9在K8s安装生产级别的分布式存储Rook+Ceph>>。

我们创建一个带存储的nginx配置

apiVersion: v1
kind: Service
metadata:name: nginxlabels:app: nginx
spec:ports:- port: 80name: webclusterIP: Noneselector:app: nginxstorage: 1Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:serviceName: "nginx"replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.22.1ports:- containerPort: 80name: webvolumeMounts:- name: wwwmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: wwwspec:storageClassName: rook-ceph-blockaccessModes:- ReadWriteOnceresources:requests:storage: 1Gi

创建完成后,会出现两个自动创建的pvc,而且是根据pod名创建的。
在这里插入图片描述
我们分别对这两个nginx的首页加上特殊标志。

kubectl exec web-0 -- sh -c 'echo hello $(hostname) > /usr/share/nginx/html/index.html'
kubectl exec web-1 -- sh -c 'echo hello $(hostname) > /usr/share/nginx/html/index.html'

然后通过ip分别访问这两个nginx.各自首页分别返回了内容,一个是web-0,一个web-1.
在这里插入图片描述
然后删除这两个pod应用,再重建,发现pod虽然重建ip也变了,但是挂载的磁盘还是原来的,内容也没有变。存储状态也是一直保存着的。

kubectl delete -f teststatefulpod.yaml
kubectl apply -f teststatefulpod.yaml

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/1530805.html

相关文章

提升工作效率,引领编程新时代

---  随着科技的发展&#xff0c;我们的工作环境也日益复杂&#xff0c;面对的工作压力也越来越大。为了适应这种快节奏的工作环境&#xff0c;选择合适的编程工具成为了提升工作效率的关键。那么&#xff0c;哪款编程工具能让你的工作效率翻倍呢&#xff1f;本文将探讨智能的…

架构师论文备考-论特定领域软件架构

摘要 在2022年3月&#xff0c;我加入了公司新智慧公交平台系统的研发团队&#xff0c;担任架构师一职。我参与了系统整体架构的讨论与设计&#xff0c;并在软件设计方面&#xff0c;指导了调度模块的设计与开发。新智慧公交平台以调度模块为核心&#xff0c;旨在为公交行业调度…

MySQL连接查询解析与性能优化成本

文章目录 一、连接查询1.连接查询基础1. INNER JOIN内连接2. LEFT JOIN (或 LEFT OUTER JOIN)左外连接3. RIGHT JOIN (或 RIGHT OUTER JOIN)右外连接4. FULL OUTER JOIN 2.连接查询的两种过滤条件3.连接的原理 二、性能优化成本1.基于成本的优化2.调节成本常数(1)mysql.server_…

关于公司小程序项目在登录流程获取token并全局使用的梳理(学习篇)

首先打开公司的项目&#xff0c;由于公司前端使用的是tarojsvuebabel&#xff0c;因此需要先安装tarojs-cli并运行编译 之后研究前端前辈们的代码&#xff0c;来学习一下前端怎么获取token并全局使用 首先思路搞清楚&#xff0c;token是通过调取后端的登录接口&#xff0c;并…

接口自动化

一、数据库及数据库操作概念 1.数据库概述 概念 存数据的仓库,程序中数据的载体 数据库和变量都可以存储数据,二者有什么区别? 持久性不同:数据库可以持久性存储数据(将数据写入磁盘文件),而变量不能(运行在内存中) 分类: 关系型数据库(MySQL、Oracle、SQLite):安全 由行和…

前端sm2国密加密时注意

如下方法&#xff1a; export function encrypt(str) {const sm2 require("sm-crypto").sm2;const cipherMode 1; // 1 - C1C3C2&#xff0c;0 - C1C2C3&#xff0c;默认为1//自定义密钥let publicKey "xxxxxxxx";//此处加密let a sm2.doEncrypt(str,…

OpenCV特征检测(8)检测图像中圆形的函数HoughCircles()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在灰度图像中使用霍夫变换查找圆形。 该函数使用霍夫变换的一种修改版本在灰度图像中查找圆形。 例子&#xff1a; #include <opencv2/imgp…

Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版

CleanMyMac X 4.15.6 for mac中文版下载是一款功能更加强大的系统优化清理工具&#xff0c;软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉&#xff0c;节省宝贵的磁盘空间。CleanMyMac X 4.15.6 for mac 软件与最新macOS系统更加兼容&#xff0c;流畅地…