k8s相关的概念

news2025/6/23 7:19:40

1.1 K8S YAML文件详解

K8S Yaml 配置文件主要分为:基本标签、元数据标签、资源内容 三个部分,要想对K8S熟练的掌握,必须要了解YAML配置文件中常见的参数和指令的含义。
1)基本标签主要是在文件起始位置,例如:

apiVersion: v1 #版本号,例如v1;
kind: Namespace #类型或者控制器;

2)元数据标签主要是在文件中部位置,例如:

metadata:    #数据标签
  name: nginx-deployment
  labels:		 #子标签
    app: nginx	#业务容器

3)资源内容主要是在文件末尾位置,例如:

spec:         #Pod中容器的详细定义
  containers:      #Pod中容器列表
  - name: nginx     #容器名称
    image: nginx    #容器的镜像名称
    imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
    command: nginx    #容器的启动命令列表,如不指定,使用打包时使用的启动命令
    args: -g daemon off     #容器的启动命令参数列表
    workingDir: /root/     #容器的工作目录
    volumeMounts:    #挂载到容器内部的存储卷配置
    - name: nginx     #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
      mountPath: /usr/share/nginx/html    #存储卷在容器内mount的绝对路径
      readOnly: boolean    #是否为只读模式
    ports:       #需要暴露的端口库号列表
    - name: nginx     #端口号名称
      containerPort: 80   #容器需要监听的端口号
      hostPort: 80    #容器所在主机需要监听的端口号,默认与Container相同
      protocol: TCP     #端口协议,支持TCP和UDP,默认TCP
    env:       #容器运行前需设置的环境变量列表
    - name: WEB     #环境变量名称
      value: www.jfedu.net    #环境变量的值
    resources:       #资源限制和请求的设置
      limits:      #资源限制的设置
        cpu: 1000m    #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
        memory: 1024m     #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
      requests:      #资源请求的设置
        cpu: 100m    #Cpu请求,容器启动的初始可用数量
        memory: 1024m     #内存清楚,容器启动的初始可用数量
    livenessProbe:     #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
      exec:      #对Pod容器内检查方式设置为exec方式
        command: [string]  #exec方式需要制定的命令或脚本
      httpGet:       #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
        path: string
        port: number
        host: string
        scheme: string
        HttpHeaders:
        - name: string
          value: string
      tcpSocket:     #对Pod内个容器健康检查方式设置为tcpSocket方式
         port: number
       initialDelaySeconds: 0  #容器启动完成后首次探测的时间,单位为秒
       timeoutSeconds: 0   #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
       periodSeconds: 0    #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
       successThreshold: 0
       failureThreshold: 0
       securityContext:
         privileged:false
    restartPolicy: [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
    nodeSelector: obeject  #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
    imagePullSecrets:    #Pull镜像时使用的secret名称,以key:secretkey格式指定
    - name: string
    hostNetwork:false      #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
    volumes:       #在该pod上定义共享存储卷列表
    - name: string     #共享存储卷名称 (volumes类型有很多种)
      emptyDir: {}     #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
      hostPath: string     #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
        path: string     #Pod所在宿主机的目录,将被用于同期中mount的目录
      secret:      #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
        scretname: string  
        items:     
        - key: string
          path: string
      configMap:     #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
        name: string
        items:
        - key: string
          path: string

1.2 Kubectl常见指令操作

K8S云计算平台部署&创建完成后,可以通过Kubeclt指令,查看Pods和Service的详细信息:

#查看K8S集群所有的节点信息;
kubectl get nodes
#删除K8S集群中某个特定节点;
kubectl delete nodes/10.0.0.123
#获取K8S集群命名空间;
kubectl  get  namespace
#获取K8S所有命名空间的有哪些部署;
kubectl  get  deployment --all-namespaces
#查看Nginx部署详细的信息;
kubectl describe deployments/nginx -n default
#将Nginx部署的镜像更新至Nginx1.19版本;
kubectl -n default set image deployments/nginx nginx=nginx:v1.19
#将Nginx部署的POD组容器副本数调整为3个;
kubectl patch deployment nginx -p '{"spec":{"replicas":3}}' -n default
#获取Nginx 部署的yaml配置,输出到nginx.yaml文件;
kubectl get deploy nginx -o yaml --export >nginx.yaml
#修改nginx.yaml文件,重新应用现有的nginx部署;
kubectl apply -f nginx.yaml
#获取所有命名空间的详细信息、VIP、运行时间等;
kubectl  get  svc  --all-namespaces
#获取所有pod所属的命名空间;
kubectl  get  pods  --all-namespaces
#获取所有命名空间Pod详细IP信息;
kubectl get pods -o wide --all-namespaces
#查看dashboard服务详细信息;
kubectl  describe  service/kubernetes-dashboard  --namespace="kube-system"
#获取dashboard容器详细信息;
kubectl  describe  pod/kubernetes-dashboard-530803917-816df --namespace="kube-system"
#强制删除dashboard容器资源;
kubectl  delete pod/kubernetes-dashboard-530803917-816df --namespace="kube-system" --grace-period=0 --force
#强制删除一个Node上面所有的容器、服务、部署,不再接受新的pod进程资源创建;
kubectl drain 10.0.0.122 --force --ignore-daemonsets --delete-local-data
#恢复Node上接受新的pod进程资源创建;
kubectl uncordon 10.0.0.122

在这里插入图片描述
在这里插入图片描述
通过google浏览器访问:http://10.0.0.122:8080/如图所示:
在这里插入图片描述
然后访问:http://10.0.0.122:8080/ui/,如图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. K8S开启IPVS模块

早期的kubernetes版本kube-proxy采用的是netfilter模块方式实现Service服务转发和代理。Kubernetes从1.8.版本开始,kube-proxy正式引入了IPVS模式,IPVS模式与iptables同样基于netfilter框架。

Ipvs是采用的hash表,当Service数量达到一定规模时hash查表的速度优势就会显现出来了,从而提高Service转发性能。

1)修改Kube-proxy的configmap,在config.conf中找到mode参数,改为mode: “ipvs”。操作方法和指令如下:

kubectl -n kube-system get cm kube-proxy -o yaml | sed 's/mode: ""/mode: "ipvs"/g' | kubectl replace -f - 
#或者手动修改
kubectl -n kube-system edit cm kube-proxy
kubectl -n kube-system get cm kube-proxy -o yaml | grep mode
    mode: "ipvs"
#重启kube-proxy pod        
kubectl -n kube-system delete pods -l k8s-app=kube-proxy
#确认ipvs模式开启成功
kubectl -n kube-system logs -f -l k8s-app=kube-proxy | grep ipvs
日志中打印出Using ipvs Proxier,说明ipvs模式已经开启。

2)修改完成之后,可以通过ipvsadm工具来查看Service转发后端的Pods容器列表信息,如下:
ipvsadm -L -n
在这里插入图片描述

4. Kubernetes 容器升级概念

传统的网站升级更新,通常是将服务全部下线,业务停止后再更新版本和配置,然后重新启动并提供服务。这样的模式已经完全不能满足发展需求了。

高并发、高可用系统普及的今天,服务的升级更新至少要做到“业务不中断”。而滚动更新(Rolling-update)恰是满足这一需求的一种系统更新升级方案。

滚动更新就是针对多实例服务的一种不中断服务的更新升级方式。一般情况,对于多实例服务,滚动更新采用对各个实例逐个进行单独更新而非同一时刻对所有实例进行全部更新的方式。

对于Kubernetes集群部署的Service来说,Rolling update就是指一次仅更新一个Pod,然后逐个进行更新,而不是在同一时刻将该Service下面的所有Pod shutdown,然后去更新,逐个更新可以避免将业务中断;
kubernetes在kubectl cli工具中仅提供了对Replication Controller的rolling-update支持,通过kubectl -help查看指令信息;
在这里插入图片描述

5. Kubernetes 容器升级实战

1)查看部署列表,获取部署应用名称;

kubectl get deployments -n default

在这里插入图片描述
2)查看正在运行的pod;

kubectl get pods -n default

在这里插入图片描述

3)通过pod描述,查看部署程序的当前映像版本;

kubectl describe pods -n default

在这里插入图片描述
4)仓库源中提前制作最新更新的镜像,执行如下指令,升级镜像版本即可;(升级之前一定要保证仓库源中有最新提交的镜像)

kubectl -n default set image deployments/nginx-v1 nginx-v1=docker.io/nginx:v1

在这里插入图片描述

6. Kubernetes 容器升级测试

1)Nginx原始容器列表;
在这里插入图片描述
在这里插入图片描述
2)更新完成之后,Nginx容器列表如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7 Kubernetes 容器升级验证

1)检查K8s更新rollout状态;
kubectl -n default rollout status deployments/nginx-v1
在这里插入图片描述
2)检查pod详情;

kubectl describe pods -n default

在这里插入图片描述
在这里插入图片描述

8 Kubernetes 容器升级回滚

1)K8S容器回滚指令如下;

kubectl -n default rollout undo deployments/nginx-v1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2)查看已经部署的版本;

kubectl rollout history deploy/nginx-v1

在这里插入图片描述
3)查看某个版本详细信息;

kubectl rollout history deployment/nginx-v1 --revision=8

在这里插入图片描述
4)k8s完美支持回滚至某个版本,并且还可以通过资源文件进行配置保留的历史版次量。K8S回滚某个版本命令如下:
kubectl -n default rollout undo deployment/nginx-v1 --to-revision=8
在这里插入图片描述
在这里插入图片描述
k8s精确地控制着整个发布过程,分批次有序地进行着滚动更新,直到把所有旧的副本全部更新到新版本。实际上k8s是通过两个参数来精确地控制着每次滚动的pod数量:

  • maxSurge ,滚动更新过程中运行操作期望副本数的最大pod数,可以为绝对数值(eg:5),但不能为0,也可以为百分数(eg:10%),默认为25%;
  • maxUnavailable ,滚动更新过程中不可用的最大pod数,可以为绝对数值(eg:5),但不能为0,也可以为百分数(eg:10%),默认为25%;
  • 如果未指定这两个可选参数,则k8s会使用默认配置,查找默认配置指令如下:
kubectl -n default get deployment nginx-v1 -o yaml

在这里插入图片描述
在这里插入图片描述
1)查看剖析部署概况;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • DESIRED 最终期望处于READY状态的副本数;
  • CURRENT 当前的副本总数;
  • UP-TO-DATE 当前完成更新的副本数;
  • AVAILABLE 当前可用的副本数;
    2)查看部署的信息效果;
kubectl -n default describe deployment nginx-v1

在这里插入图片描述

3)整个滚动过程是通过控制两个副本集来完成的;

  • 新副本集:nginx-v1-224846633;
  • 旧副本集:nginx-v1-44819141;
    在这里插入图片描述
    4)理想状态下的滚动过程;
  • 创建了一个新的副本集,并为其分配3个新版本的pod,使副本总数达到11,一切正常。
  • 通知旧副本集,销毁2个旧版本的pod,使可用副本总数保持到8,一起正常。
  • 当两个副本销毁成功后,通知新副本集,再新增2个新版本的pod,使副本总数达到11,一切正常。
  • 只要销毁成功,新副本集就会创造新的pod,一直循环,直到旧的副本集pod数量为0。
    5)滚动升级一个服务,实际是创建一个新的RS,然后逐渐将新RS中副本数增加到理想状态,将旧RS中的副本数减小到0的复合操作;

无论理想还是不理想,k8s最终都会使应用程序全部更新到期望状态,都会始终保持最大的副本总数和可用副本总数的不变性。

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

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

相关文章

基于JAVA+SpringBoot+Vue的前后端分离的公益慈善服务平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着网络技术的发展&a…

2023年中国企业营销数字化行业发展趋势分析:企业营销数字化花费增速放缓[图]

随着通信设施和移动互联网的高速发展,中国MarTech市场也面临着一些挑战,在企业数字化转型的浪潮中,通过供需双方共同发力、技术能力不断升级和市场宏观环境的共同加持,助力中国企业营销数字化的发展。 中国企业营销数字化发展脉络…

postman介绍和安装,发送带参数的GET请求(超详细~)

postman的介绍和安装 Postman的介绍 Postman 是一款谷歌开发的接口测试工具,使API的调试与测试更加便捷。 它提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..),附带任何数量的参数 headers。 postman是一款…

Docker快速上手:使用Docker部署Drupal并实现公网访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS,适用于各种不同的网站项目,从小型个人博客到大型企业级门户网站。它的学习…

视频编解码(七)之FOURCC和YUV关系简介

FOURCC是4字节代码,是一个codec中对压缩格式、颜色、像素格式等的标识。按一个字节8bit,FOURCC通常占4字节32bit。 FOURCC is short for “four character code” - an identifier for a video codec, compression format, color or pixel format used i…

1600*C. Circle of Monsters(贪心)

Problem - 1334C - Codeforces 解析: 对于某个怪兽,他的耗费为两种情况,要么直接用子弹打,要么被前面的怪兽炸,显然第二种情况耗费更少。 统计出所有怪兽的 max(0,a[ i ] - b[ i - 1 ]&#xff…

一句话代码富集分析gost ghost

1.5 ##富集分析---------- #BiocManager::install("gprofiler2") library(gprofiler2) ## We can perform an enrichment analyses with the genes in the complex EnrichmentResults <- gprofiler2::gost(genes_complex, significant TRUE,user_threshold 0.00…

CTF/AWD竞赛标准参考书+实战指南:《AWD特训营》

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

Android JNI代码语法解释

文章目录 JNI中的JNIEXPORT、JNIIMPORT和JNICALLJVM如何查找native方法①按照JNI规范的命名规则②调用JNI提供的RegsterNatives函数&#xff0c;将本地函数注册到JVM中示例代码 JNI数据类型JNI字符串的处理①获取字符串②释放字符串③创建字符串④其他字符串处理API JNI中的JNI…

阿里云李腾飞:基于ECS倚天实例的大数据加速最佳实践

云布道师 为了更好地方便各位开发者和用户了解并应用 ECS 倚天实例&#xff0c;由阿里云弹性计算联合基础软件团队 & 平头哥 & 安谋科技&#xff08;arm&#xff09;&#xff0c;共同发起了【倚天实例迁移课程】&#xff0c;本系列课程共计 10 节课程&#xff0c;共分为…

C++学习day6

1.思维导图 2.作业&#xff1a; 编程题&#xff1a; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象…

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15)

目录 一、理论 1.K8S集群升级 2.集群概况 3.升级集群 4.验证集群 二、实验 1.升级集群 2.验证集群 三、问题 1.给node1节点打污点报错 一、理论 1.K8S集群升级 &#xff08;1&#xff09;概念 搭建K8S集群的方式有很多种&#xff0c;比如二进制&#xff0c;kubeadm…

Outlook导入导出功能灰色,怎么解决

下载安装 Outlook 软件后&#xff0c;登陆账号&#xff0c;然后选择“文件” - “导出”&#xff0c;结果发现“导出”按钮是灰色的&#xff0c;根本无法导出。根据官方说法&#xff1a;由于配置没有完成或者office产品没有正确激活。outlook导出键为灰色原因由于配置没有完成或…

第五篇Android--EditText详解

EditText 字面意思可以编辑的文本。在Android中就是用来接收用户输入的输入框。 1.基本用法 <EditTextandroid:id"id/id_phone_edit"android:layout_width"match_parent"android:layout_height"48dp"android:background"android:color/…

大数据精准营销是从几个维度帮您去筛选准客户?

人工智能和大数据精准营销的存在则可以准确捕捉到消费者最近的心理活动预期&#xff0c;可以根据消费者心理活动准确告诉他&#xff0c;他需要的信息在哪里。由于每个人看到的效果不同&#xff0c;消费者会感觉广告是为他量身打造的。这也就是我们所说的精准营销。 而精准营销…

Elasticsearch 和 Arduino:一起变得更好!

作者&#xff1a;Enrico Zimuel 使用 Arduino IoT 设备与 Elasticsearch 和 Elastic Cloud 进行通信的简单方法 在 Elastic&#xff0c;我们不断寻找简化搜索体验的新方法&#xff0c;并开始关注物联网世界。 来自物联网的数据收集可能非常具有挑战性&#xff0c;尤其是当我们…

【面试经典150 | 哈希表】字母异位词分组

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;排序哈希表方法二&#xff1a;数组作为哈希表的键方法三&#xff1a;字符串作为哈希表的键知识回顾accumulate 写在最后 Tag 【自定义哈希】【哈希表】【数组】 题目来源 49. 字母异位词分组 题目解读 将字符串数组中…

面试全攻略:ElasticSearch分页与MySQL分页的底层逻辑与优化技巧

大家好&#xff0c;我是小米&#xff01;今天&#xff0c;我要和大家一起深入探讨一个在技术面试中经常被问到的问题&#xff1a;ElasticSearch中的分页与MySQL中的分页有什么区别&#xff1f;分页是数据库查询中非常常见的操作&#xff0c;但当我们在不同的数据库中执行分页操…

画面清晰如真:OLED透明拼接屏在金华市的画质表现

金华市位于中国浙江省中西部&#xff0c;是中国重要的历史文化名城之一。 金华市拥有悠久的历史和丰富的文化遗产&#xff0c;如古城墙、古建筑和古镇等。 这为OLED透明拼接屏技术的应用提供了丰富的创作素材和展示主题。 金华市的著名景点 义乌国际商贸城&#xff1a;义乌国…

如何开发一款跑酷游戏?

跑酷游戏&#xff08;Parkour Game&#xff09;是一种流行的视频游戏类型&#xff0c;玩家需要在游戏中控制角色进行极限动作、跳跃、爬墙和各种动作&#xff0c;以完成各种挑战和任务。如果你有兴趣开发一款跑酷游戏&#xff0c;以下是一些关键步骤和考虑事项&#xff1a; 游…