Kubernatas Pod卷 - Pod镜像的升级和回滚 - 探针

news2024/9/23 7:26:58

目录

扩展:

Pod创建的拓扑图:

提出的问题:

Pod 卷的使用:Pod的数据持久化问题

配置 Pod 以使用卷进行存储

参考文档:配置 Pod 以使用卷进行存储 | Kubernetes

有状态应用和无状态应用:

Pod 配置卷

 1、创建 Pod:

2、验证 Pod 中的容器是否正在运行,然后留意 Pod 的更改:

3、因为我们选择的创建卷的类型是emptyDir

4、如果我们在创建卷的时候使用的类型是hostPath:

Pod里的镜像的升级和回滚

参考网址:Deployments | Kubernetes

1、创建 Deployment

2、创建 Pod:

3、对nginx镜像进行升级(原nginx:1.14.2  升级后 nginx:1.16.1)

方法一:

方法二:直接修改deploy_nginx.yaml 文件中的nginx镜像版本,再重新运行该文件

发布的策略

参考文档:https://www.cnblogs.com/nulige/articles/10929182.html

回滚:就是我们可以将nginx的版本降低 ,从而形成Deployment的回滚

K8s的探针(probe)

kubelet的3种探针

参考文档:配置存活、就绪和启动探针 | Kubernetes

3种探针类型:存活探针(livenessProbe)、就绪探针(readinessProbe)、启动探针(startupProbe)

检查机制:使用探针来检查容器有四种不同的方法

添加存活、就绪和启动探针

实验:


扩展:

容器服务 ACK  --》阿里云提供支持的

容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理;2021年成为国内唯一连续三年入选Gartner公共云容器报告的产品,2022年国内唯一进入Forrester领导者象限。其整合了阿里云虚拟化、存储、网络和安全能力,助力企业高效运行云端Kubernetes容器化应用。

Pod创建的拓扑图:

提出的问题:

问题1:taints和 toleration是怎样查看的?如何知道那些机器上由污点,哪些Pod可以容忍?

查看某个节点详细信息(kubectl describe node表示所有节点的详细信息)

[root@master pod]# kubectl describe node master

查看master是否打过污点taints:(证明master打过污点taints)

[root@master pod]# kubectl describe node master | grep -i taints
Taints:             node-role.kubernetes.io/master:NoSchedule
[root@master pod]# 


grep -i 表示不区分大小写啦

查看Pod是否存在容忍度:

[root@master pod]# kubectl describe pod etcd-master -n kube-system | grep -i tolerations
Tolerations:       :NoExecute op=Exists
[root@master pod]# 

问题2:deployment:全自动调度:根据node的算力 --》它到底是如何跟node评分的(最底层的机制)

问题3:Pod亲和性调度算法,是否在你的工作中出现过导致某台node节点负载过高,从而出现故障

Pod 卷的使用:Pod的数据持久化问题

配置 Pod 以使用卷进行存储

参考文档:配置 Pod 以使用卷进行存储 | Kubernetes

只要容器存在,容器的文件系统就会存在,因此当一个容器终止并重新启动,对该容器的文件系统改动将丢失。 对于独立于容器的持久化存储你可以使用卷。 这对于有状态应用程序尤为重要,例如键值存储(如 Redis)和数据库。

有状态应用和无状态应用:

有状态应用:有状态服务 可以说是 需要数据存储功能的服务、或者指多线程类型的服务,队列等。(mysql数据库、kafka、zookeeper等)

每个实例都需要有自己独立的持久化存储

在创建、删除、扩容/缩容和更新 StatefulSets 的 Pods,是需要讲究顺序的

mysql: 有状态 : 启动的时候,必须按照顺序,并且pod是有固定的编号不允许随机分配
    master ,slave

    写数据--》master上写

特点:缩容的时候是顺序进行的,不是随机的

无状态应用:

(1)、是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的。

(2)、多个实例可以共享相同的持久化数据。例如:nginx实例,tomcat实例等

(3)、相关的k8s资源有:ReplicaSet、ReplicationController、Deployment等,由于是无状态服务,所以这些控制器创建的pod序号都是随机值。并且在缩容的时候并不会明确缩容某一个pod,而是随机的,因为所有实例得到的返回值都是一样,所以缩容任何一个pod都可以。

特点:

随便访问那个pod都会得到一样的结果

pod的序号是随机的

缩容的时候是随机进行的,删除或者增加,顺序是随机的

nginx: 无状态 : 启动的时候,不必须按照顺序,并且pod是随机分配id
    web服务:  访问任意一个web服务器,得到结果都是一样的,而且网页数据也是从同一个地方获取

Pod 配置卷

在本练习中,你将创建一个运行 Pod,该 Pod 仅运行一个容器并拥有一个类型为 emptyDir 的卷, 在整个 Pod 生命周期中一直存在,即使 Pod 中的容器被终止和重启。以下是 Pod 的配置:

apiVersion: v1
kind: Pod
metadata:
  name: redis
spec:
  containers:
  - name: redis
    image: redis
    volumeMounts:
    - name: redis-storage
      mountPath: /data/redis
  volumes:
  - name: redis-storage
    emptyDir: {}

 1、创建 Pod:

[root@master pod]# kubectl apply -f redis.yaml 
pod/redis created
[root@master pod]# 

2、验证 Pod 中的容器是否正在运行,然后留意 Pod 的更改

[root@master pod]# kubectl get pod redis --watch
NAME    READY   STATUS    RESTARTS   AGE
redis   1/1     Running   0          46s
^C[root@master pod]# 

--watch  表示时时监控,一旦Pod发生改变,它就会显示出来

3、因为我们选择的创建卷的类型是emptyDir

[root@master pod]# kubectl get pod redis -o wide
NAME    READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
redis   1/1     Running   0          9m25s   10.244.2.5   node2   <none>           <none>
[root@master pod]# 

那么k8s会在node2上的/var/lib/docker/volums/上随机创建一个空文件夹来存放数据

并且是用来临时存放数据       

[root@node2 redis]# pwd
/var/lib/docker/volumes/1e3244a4c734b42343ed1a8a4b3f4a06030cbe1266a58b34b7b6e7fb54af06c4/_data/redis
[root@node2 redis]# 

4、如果我们在创建卷的时候使用的类型是hostPath:

可以确定volume卷的位置了,因为是自己定义上去的。 

Pod里的镜像的升级和回滚

参考网址:Deployments | Kubernetes

1、创建 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

2、创建 Pod:

[root@master pod]# kubectl apply -f deploy_nginx.yaml 
deployment.apps/nginx-deployment created
[root@master pod]# 

3、对nginx镜像进行升级(原nginx:1.14.2  升级后 nginx:1.16.1

方法一:

先来更新 nginx Pod 以使用 nginx:1.16.1 镜像,而不是 nginx:1.14.2 镜像。

kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1

或者使用下面的命令:

kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1

Deployment 可确保在更新时仅关闭一定数量的 Pod。默认情况下,它确保至少所需 Pod 的 75% 处于运行状态(最大不可用比例为 25%)。(滚动升级Deployment )

如果仔细查看上述 Deployment ,将看到它首先创建了一个新的 Pod,然后删除旧的 Pod, 并创建了新的 Pod。它不会杀死旧 Pod,直到有足够数量的新 Pod 已经出现。 在足够数量的旧 Pod 被杀死前并没有创建新 Pod。它确保至少 3 个 Pod 可用, 同时最多总共 4 个 Pod 可用。 当 Deployment 设置为 4 个副本时,Pod 的个数会介于 3 和 5 之间。

查看升级后的Deployment中的nginx版本

[root@master pod]# kubectl describe pod nginx-deployment-ff6655784-bh5t5|grep Image:
    Image:          nginx:1.16.1
[root@master pod]# 

方法二:直接修改deploy_nginx.yaml 文件中的nginx镜像版本,再重新运行该文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

重新运行一次deploy_nginx.yaml文件

[root@master pod]# kubectl apply -f deploy_nginx.yaml 
deployment.apps/nginx-deployment configured
[root@master pod]# kubectl get pod -o wide
NAME                               READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
k8s-nginx-6d779d947c-f72hf         1/1     Running   0          22h     10.244.1.4   node1   <none>           <none>
k8s-nginx-6d779d947c-hnhf5         1/1     Running   0          22h     10.244.3.2   node3   <none>           <none>
k8s-nginx-6d779d947c-xgjzg         1/1     Running   0          22h     10.244.2.2   node2   <none>           <none>
my-nginx-cf54cdbf7-8sbns           1/1     Running   0          6h9m    10.244.1.5   node1   <none>           <none>
my-nginx-cf54cdbf7-ptjw7           1/1     Running   0          5h56m   10.244.3.5   node3   <none>           <none>
my-nginx-cf54cdbf7-wf48x           1/1     Running   0          6h9m    10.244.2.4   node2   <none>           <none>
nginx-deployment-67dffbbbb-9kzj8   1/1     Running   0          7s      10.244.1.8   node1   <none>           <none>
nginx-deployment-67dffbbbb-m6qm8   1/1     Running   0          4s      10.244.2.8   node2   <none>           <none>
nginx-deployment-67dffbbbb-qfb2m   1/1     Running   0          6s      10.244.3.8   node3   <none>           <none>
redis                              1/1     Running   0          3h14m   10.244.2.5   node2   <none>           <none>
scnginx                            1/1     Running   0          16h     10.244.2.3   node2   <none>           <none>
[root@master pod]# kubectl describe pod nginx-deployment-67dffbbbb-qfb2m|grep Image:
    Image:          nginx:latest
[root@master pod]# 

发布的策略

金丝雀发布
蓝绿发布
灰度发布
滚动发布 

参考文档:https://www.cnblogs.com/nulige/articles/10929182.html

回滚:就是我们可以将nginx的版本降低 ,从而形成Deployment的回滚

你可能想要回滚 Deployment;例如,当 Deployment 不稳定时(例如进入反复崩溃状态)。 默认情况下,Deployment 的所有上线记录都保留在系统中,以便可以随时回滚 (你可以通过修改修订历史记录限制来更改这一约束)。

K8s的探针(probe)

probe 是由 kubelet 对容器执行的定期诊断。 要执行诊断,kubelet 既可以在容器内执行代码,也可以发出一个网络请求。

使用探针去试探pod是否能正常提供服务

kubelet的3种探针

参考文档:配置存活、就绪和启动探针 | Kubernetes

3种探针类型:存活探针(livenessProbe)、就绪探针(readinessProbe)、启动探针(startupProbe)

检查机制:使用探针来检查容器有四种不同的方法

添加存活、就绪和启动探针

 

实验:

参考实验文档:配置存活、就绪和启动探针 | Kubernetes

1、定义存活命令

2、定义一个存活态 HTTP 请求接口

3、定义 TCP 的存活探测

4、定义 gRPC 存活探针

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

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

相关文章

C++好难(8):C++中的继承

目录 1.继承的概念及定义 &#x1f349;继承的概念 &#x1f349; 继承的定义&#xff1a; &#x1f352;格式定义&#xff1a; &#x1f352;继承关系和访问限定符 &#x1f352;继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域&#xff1a; …

分隔链表(大小链表的连接)

题目&#xff1a; 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 输入&#xff1a;head [1,4,3,2,5,2], x 3 输出&…

前端Vue自定义加载loading组件 通过设置gif实现loading动画 可用于页面请求前loading

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…

Altermanager安装和使用

1、Altermanager使用 1.1 什么是Alertmanager Alertmanager 与 Prometheus 是相互分离的两个组件&#xff0c;Prometheus 服务器根据报警规则将警报发送给 Alertmanager&#xff0c;然后 Alertmanager 将 silencing、inhibition、aggregation 等消息通过电子邮件、dingtalk …

【每日算法】【219. 存在重复元素 II】

☀️博客主页&#xff1a;CSDN博客主页 &#x1f4a8;本文由 我是小狼君 原创&#xff0c;首发于 CSDN&#x1f4a2; &#x1f525;学习专栏推荐&#xff1a;面试汇总 ❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏 ⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&…

LabVIEW-Solidworks联合仿真

介绍 NI Softmotion介绍 LabVIEW NI SoftMotion 采用高级功能块API (应用程序接口) 便于编写运动程序&#xff0c;该功能块API基于由PLCopen 定义的 Motion Control Library 。SoftMotion 包括用于直线、弧线和轮廓运动的功能块及用于进行电子传动、电子凸轮等高级运行的功能块…

Oracle 的删除

前言 最近在工作中需要将一台电脑上的 Oracle &#xff0c;删除 Oracle 与删除 MySQL 不太一样&#xff0c;删除 Oracle 还需要删除注册表中的内容&#xff0c;不然重新安装的时候会报错。 关闭服务 win r 开启运行窗口&#xff0c;输入 services.msc 打开服务列表。 将 O…

【Redis故障排查】「连接失败问题排查和解决」带你深入分析一下Redis阻塞原因以及问题排查方案指南

Redis阻塞原因以及问题排查 尽管我们在日常工作中经常使用Redis作为数据库的缓存&#xff0c;以大大减轻数据库压力并提升用户体验&#xff0c;但Redis也可能出现阻塞情况&#xff0c;导致整个系统变慢&#xff0c;进而影响用户体验。 因此&#xff0c;在面对Redis阻塞的情况…

傅里叶变换通俗理解,附python代码

傅里叶变换可以简单理解为用一系列三角函数去拟合一个目标函数。为什么可以用三角函数拟合&#xff1f;因为三角函数 是一组正交基。 先来回顾一下正交的概念&#xff0c;在二维平面坐标系中&#xff0c;与这两个单位向量&#xff0c;正交&#xff08;内积为0&#xff0c;相互…

单机模型并行最佳实践

单机模型并行最佳实践 模型并行在分布式训练技术中被广泛使用。 先前的帖子已经解释了如何使用DataParallel在多个 GPU 上训练神经网络&#xff1b; 此功能将相同的模型复制到所有 GPU&#xff0c;其中每个 GPU 消耗输入数据的不同分区。 尽管它可以极大地加快训练过程&#x…

MySQL的基本操作及实用示例(面试真题老实用了)

一、MySQL基本操作 常用语句 MySQL是一个常用的关系型数据库管理系统&#xff0c;可以用于存储和管理数据。下面是MySQL的一些基本操作&#xff1a; 1. 连接到MySQL服务器&#xff1a; mysql -u username -p 其中&#xff0c;username是你的用户名&#xff0c;执行该命令后会…

【软件分析/静态分析】chapter5 课程07 过程间分析(Interprocedural Analysis)

&#x1f517; 课程链接&#xff1a;李樾老师和谭天老师的&#xff1a; 南京大学《软件分析》课程07&#xff08;Interprocedural Analysis&#xff09;_哔哩哔哩_bilibili 目录 第五章 过程间分析 5.1 为什么需要过程间分析 5.2 Call Graph 5.2.1 调用图的概念 5.2.2 调…

2023 年 GitHub 上最火的 Java 面试宝典正式上线

笔记特点&#xff1a;条理清晰&#xff0c;含图像化表示更加易懂。 内容概要&#xff1a;包括 Java 集合、JVM、多线程、并发编程、设计模式、Spring 全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Ne…

Vue实现拖拽鼠标圈选、划区域、框选组件sgRectSelect:矩形区域选中checkbox,并回调相关选中、取消选中的操作

边框线虚线动画效果请参阅边框虚线滚动动画特效_虚线滚动效果_你挚爱的强哥的博客-CSDN博客【代码】边框虚线滚动动画特效。_虚线滚动效果https://blog.csdn.net/qq_37860634/article/details/130507289 碰撞检测原理请前往 原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞…

车载以太网 - SomeIP - 协议用例 - RPC

目录 RPC Protocol specification 1、Cleint和Server端应该为一个服务实例的所有的Methodsevents使用一个TCP连接

AtCoder Regular Contest 163 C. Harmonic Mean(构造 补写法)

题目 t(t<500)组case&#xff0c; 给定一个数n(n<500)&#xff0c;构造一个长为n的数组 思路来源 官方题解 题解 注意到 ... 右边累加&#xff0c;等于1-最后一项&#xff0c;可以把最后一项挪到左边 所以&#xff0c; 1. 当n没有在前面的序列里出现过时&#xf…

centos7.6安装mysql

卸载mariadb 解决安装mysql与mariadb冲突问题&#xff08;卸载干净mariadb&#xff09;_何妨徐行的博客-CSDN博客 安装rpm包前可能需要的命令&#xff1a; yum install openssl-devel用于管理rpm包的工具 yum install lrzsz -y 文件传输缺乏rz 下载安装包 去mysql官网 把…

<Linux开发>驱动开发 -之- Linux I2C 驱动

&#xff1c;Linux开发&#xff1e;驱动开发 -之- Linux I2C 驱动 交叉编译环境搭建&#xff1a; &#xff1c;Linux开发&#xff1e; linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下&#xff1a; &#xff1c;Linux开发&#xff1e; -之-系统移植 uboot移植过程详细…

[MMDetection]VOC数据格式转为COCO数据格式

以下脚本可以根据创建VOC格式数据集转换为COCO数据集 其中文件组织格式如下 VOC2007 ------Annotations ------***********.xml ------***********.xml -------ImageSets ------train.txt ------test.txt -------JPEGImages ------***********.jpg ------***********.jpg CO…

【Spring】SpringBoot参数验证10个技巧

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言 1.使用验证注解 2 使用自定义验证注解 3 在服务器端验证 4 提供有意义的错误信息 5 将 i18n 用于错误消息 6 使用分组验证 7 对复杂逻辑使用跨域验证 8 对验证错误使…