k8s的操作指令和yaml文件

一、项目的生命周期

创建----》发布----》更新----》回滚----》删除

 1.创建

kubectl create deployment nginx1 --image=nginx:1.22 --replicas=3

#基于deployment控制器创建pod,控制器的名称是nginx1,pod使用的镜像是nginx:1.22,pod的数量有3个

2.发布

kubectl expose 暴露的是service的类型,可以供内网访问的一个方式

kubectl expose deployment nginx1 --port=80 --target-port=80

service的类型* 

(1)ClusterIP

        当设置控制器的暴露端口时,不指定type,默认就是clusterip,service的默认类型。访问这个ip可以直接访问pod,但是外部的请求是不能直接到达的。仅限于集群内部的通信。

(2)NodePort*

        需要在创建的时候指定端口类型(--type=NodePort),一旦设定为NodePort,会在每个节点上都开放一个端口,每个节点上的端口都是相同的,NodePort的端口号的范围是30000-32767

(3)LoadBalancer

        这个地址一般是云平台服务商提供的地址,仅限于公有云服务平台上设置的service。可以通过这个地址直接访问,实现负载均衡。(收费服务)

(4) ExternalName

        不能提供负载均衡的服务,service映射到集群外的域名,不涉及后端的pod的负载均衡。

k8s需要Service的原因

  • service一旦和控制器的标签关联之后,会自动的发现该控制器pod的变化,自动的获取pod的数量和ip地址的变化。
  • service既可以关联一个控制器,也可以关联多个控制器,也可以关联pod。
  • pod是不断变化的,service是不变的,所以必须要有一个中间状态。

3.更新

kubectl set  #更新应用资源

kubectl set image deployment nginx1 nginx=nginx:1.15 --record
#--record 记录

deployment的更新方式:滚动更新

先更新其中一部分,然后更新所有

版本更新过程 

以3个pod为例

  • 首先在确保正常提供服务的情况下,在三个pod实例正常运行的情况下,生成一个新的指定版本呢的pod实例
  • 等到新的pod实例创建成功后,会删除第一个pod实例
  • 而后再生成第二个新版本的pod实例,再删除第二个,依此类推,一直到该deployment下的所有pod资源全部升级完毕

注意:资源更新后,其原本pod实例中的数据并不会被继承。如果有需要的话,可以先对数据进行备份,等到升级完毕后,再同步数据。

4.回滚

kubectl rollout history deployment #查看更新历史  

kubectl rollout undo deployment nginx --to-revision=1 #回滚到版本号1

5.删除

kubectl delete deployment nginx1 #删除控制器

kubectl delete service nginx-service #删除service

kubectl delete pod nginx1-869649574d-mspkq 

基于控制器创建的pod,删除pod相当于是重启,pod的数量是不会变化的,删除控制器,才会删除pod

二、项目的发布方式

1.蓝绿发布

        把应用服务器分为蓝组和绿组,要先升级蓝组,先把蓝组从负载均衡中移除出去,蓝组继续为用户提供服务。

        蓝组升级完毕之后,加入到负载均衡当中,把绿组移除,再升级绿组,完成之后,再把绿组加入到负载均衡当中去。

特点

  • 如果升级有问题,影响范围比较大
  • 发布策略简单
  • 用户无感知,平滑过渡
  • 早期成本较高,现在有了负载均衡之后,成本也降低了

2.金丝雀发布

        在升级的时候,先升级一小部分,然后暂停整个升级,一部分是新的,另一大部分还是旧的。 筛选出一小部分用户在新的版本上应用,观察,如果没有问题再把剩余的部分全部更新到新版本。

特点

  • 一旦出现问题,影响范围很小,调整和修复也很快
  • 充分评估了版本的性能,稳定,出问题的话对用户的体验影响也很小。
  • 用户无感知,平滑过渡

kubectl set image deployment nginx nginx=1.18 && kubectl rollout pause deployment nginx #暂停更新

kubectl rollout resume deployment nginx #恢复更新

三、k8s管理资源的方式

1.陈述式-->命令行

kubectl get cs/pod/ns/svc 

kubectl create deployment ...

kubectl expose  deployment ...

kubectl set image deployment ...

kubectl rollout history deployment ...

kubectl rollout undo deployment ... --to-revision=...

kubectl delete pod/deployment/svc

kubectl logs (-f) ...

kubectl descibe deployment/pod/svc

kubectl explain pod/deploment/svc

......

 2.声明式-->yaml文件

kubectl get pod test1 -o yaml > pod.yaml #生成一个参考yaml文件

pod类型

kubectl explain pod

vim first.yaml

apiVersion: v1     #定义api的接口
kind: Pod            #创建资源对象的类型
#----------------------------------固定开头
metadata:
#元数据信息,包括pod的名称和标签
  name: nginx-test-pod
  labels: 
    app1: nginx1
spec:
#pod内使用的容器,包括容器的名称和镜像的版本
  containers:
  - name: nginx
    image: nignx:1.22

kubectl apply -f first.yaml #运行直接生效

kubectl delete -f first.yaml #删除了yaml就删除了对应的pod

deployment类型

kubectl explain deployment

vim deployment.yaml

apiVersion: apps/v1
kind: Deployment
#前提条件,固定开头
metadata:
#元数据信息,定义资源对象的名称,对象的命名空间,标签等信息
  name: nginx-yaml
  labels: 
    app1: nginx-yaml
  namespace: abc
spec:
#定义控制器的资源参数,包括副本数、匹配的标签和容器失败时是否重启等等容器相关的属性
  replicas: 3 
#定义副本数
  selector:
#定义标签选择器
    matchLabels:
      app: nginx-yaml
  template:
#定义业务模板,多个副本都会按照这个模板生成统一的pod
    metadata:
      labels:
        app: nginx-yaml
#固定格式,三个标签的值都必须保持一致
    spec:
    #控制器pod使用的容器参数
      containers:
      - name: nginx
        image: nginx:1.22
        #ports:
        #- containerPort: 80
        #当容器的默认端口是人为指定过的,定义容器对外的端口,可省略字段
          #hostPort: 80
          #可以直接和宿主机的度那口映射,不需要再指定service,但是只能在yaml文件当中,不能在命令行中执行。一般不用hostPort,且要把kind换成Daemonset
          #Daemonset可以用hostPort
      restartPolicy: Always
      #pod内的容器的重启策略 

kubectl apply -f deployment.yaml --force #强制生效

service类型

kubectl explain service

vim service.yaml

apiVersion: v1
kind: Service
metadata:
#service的名称和标签
  name: nginx-abc
  namespace: abc
  labels:
    test1: nginx
spec:
#定义service的参数类型
  type: NodePort
  ports: 
  - port: 80
    targetPort: 80
  selector:
  #匹配对应的资源的标签
    app: nginx-yaml

kubectl edit svc -n abc nginx-abc #修改nginx-abc的配置文件

多个类型的可以写在一个yaml文件当中,用---分割开来。

pod内的容器的重启策略

        当pod内的容器重启失败或者运行时报错的重启策略

  • always: 默认模式,一直重启(自愈机制的核心)
  • Never: 都不重启
  • Onfailure:只有状态是非0才会重启,是0不重启

基于控制器(deployment)创建的pod的重启策略只能是always

command和args字段

apiVersion:vl
#定义api的接口
kind: Pod
#创建资源对象的类型
metadata:
#元数据信息,pod的名称,和标签
  name: nginx-test-pod
  labels:
    app1: nginx1
spec:
#pod内使用的容器,容器的名称,和镜像的版本
  containers:
  - name: centos
    image: centos:7
    command: ["echo"]
    args: ["hello,world!"]
  restartPolicy: onFailure

#输出hello,world!

        类似于docker的CMD和ENTRYPOINT,command和args级别比cmd和entrypoint要高,会覆盖原有容器的命令输出。args也会给command传参数。

         command和agrs在一个yaml文件中,非传参的情况下,只能存在一个,表示容器的启动命令,会覆盖原容器的启动命令。

多条命令一定要加上/bin/bash和-c;多个命令之间要用分号隔开,一个命令也可以用/bin/bash和-c

写法一:

args:
- /bin/bash
- -C
- while true; do sleep 3600; done

写法二:
args: ["/bin/bash","-c","touch /opt/123;echo 123 > /opt/123; cat /opt/123; sleep 3600"] 

#运行单个命令

command: ["/usr/bin/test","-e","/etc/passwd"]

args: ["/bin/bash","-c","test -e /etc/passwd"] 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁 DeepSeek 模型高效部署密码:蓝耘平台全解析

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

k8s部署rabbitmq

1. 创建provisioner制备器(如果已存在,则不需要) 1.1 编写nfs-provisioner-rbac.yaml配置文件 apiVersion: v1 kind: ServiceAccount metadata:name: nfs-client-provisionernamespace: wms --- kind: ClusterRole apiVersion: rbac.author…

评估大模型(LLM)摘要生成能力:方法、挑战与策略

大语言模型(LLMs)有着强大的摘要生成能力,为信息快速提取和处理提供了便利。从新闻文章的快速概览到学术文献的要点提炼,LLMs 生成的摘要广泛应用于各个场景。然而,准确评估这些摘要的质量却颇具挑战。如何确定一个摘要…

dmd-50

dmd-50 一、查壳 无壳,64位 二、IDA分析 main 下面的内容中数据经过R键转换,你就会知道v41的内容,以及是当v41成立时key是有效的。 v41870438d5b6e29db0898bc4f0225935c0 结合上面的函数知道:v41经过MD5解密后是key 注意是…

关于图像锐化的一份介绍

在这篇文章中,我将介绍有关图像锐化有关的知识,具体包括锐化的简单介绍、一阶锐化与二阶锐化等方面内容。 一、锐化 1.1 概念 锐化(sharpening)就是指将图象中灰度差增大的方法,一次来增强物体的轮廓与边缘。因为发…

全程Kali linux---CTFshow misc入门(38-50)

第三十八题: ctfshow{48b722b570c603ef58cc0b83bbf7680d} 第三十九题: 37换成1,36换成0,就得到长度为287的二进制字符串,因为不能被8整除所以,考虑每7位转换一个字符,得到flag。 ctfshow{5281…

vue3学习四

七 标签ref属性 设置标签ref属性&#xff0c;类似于设置标签id。 普通标签 <template name"test4"> <p ref"title" id"title" click"showinfo">VIEW4</p> <View3/><script lang"ts" setup>…

STM32 软件SPI读写W25Q64

接线图 功能函数 //写SS函数 void My_W_SS(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue); }//写SCK函数 void My_W_SCK(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue); }//写MOSI函数 void My_W_MOSI(uint8_t Bit…

pytest-xdist 进行多进程并发测试

在自动化测试中&#xff0c;运行时间过长往往是令人头疼的问题。你是否遇到过执行 Pytest 测试用例时&#xff0c;整个测试流程缓慢得让人抓狂&#xff1f;别担心&#xff0c;pytest-xdist 正是解决这一问题的利器&#xff01;它支持多进程并发执行&#xff0c;能够显著加快测试…

CLion2024.3.2版中引入vector头文件报错

报错如下&#xff1a; 在MacBook端的CLion中引入#include <vector>报 vector file not found&#xff08;引入map、set等也看参考此方案&#xff09;&#xff0c;首先可以在Settings -> Build,Execution,Deployment -> Toolchains中修改C compiler和C compiler的路…

【RocketMQ 存储】- 同步刷盘和异步刷盘

文章目录 1. 前言2. 概述3. submitFlushRequest 提交刷盘请求4. FlushDiskWatcher 同步刷盘监视器5. 同步刷盘但是不需要等待刷盘结果6. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 RocketMQ 存储部分系列文章&#xff1a; 【RocketMQ 存储】- RocketMQ存储类 MappedFile【Rock…

了解传输层TCP协议

目录 一、TCP协议段格式 二、TCP原理 1.确认应答 2.超时重传 3.连接管理 建立连接 断开连接 4.滑动窗口 5.流量控制 6.拥塞控制 7.延时应答 8.捎带应答 9.面向字节流 10.TCP异常情况 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如…

第 26 场 蓝桥入门赛

3.电子舞龙【算法赛】 - 蓝桥云课 问题描述 话说这年头&#xff0c;连舞龙都得电子化&#xff01;这不&#xff0c;蓝桥村的老程序员王大爷突发奇想&#xff0c;用LED灯带和一堆传感器鼓捣出了一条“电子舞龙”&#xff0c;它能根据程序指令在村里的广场上“翩翩起舞”。 广…

老游戏回顾:TL2

TL2是一部ARPG游戏&#xff0c;是TL的续作游戏&#xff0c;由位于美国西雅图的Runic Games开发&#xff0c;游戏于2012年9月20日上市&#xff0c;简体中文版于2013年4月10日在国内上市。 2有非常独特的艺术风格&#xff0c;这些在1中就已经形成&#xff0c;经过升级将使这款游…

前端实现 GIF 图片循环播放

前言 使用 img 加载 GIF 图片&#xff0c;内容只会播放一次&#xff0c;之后就会自动暂停&#xff1b; 通过定时器在一段时间后重新加载图片的方式&#xff0c;会导致浏览器内存不断增大&#xff0c;并且可能会有闪烁、卡顿的问题&#xff1b; ImageDecoder WebCodecs API 的…

1-2 面向对象编程方法

1.0 面向对象编程思维 在面向对象风格中&#xff0c;结构体被看做数据&#xff08;data&#xff09;&#xff0c;而操作数据的函数称作方法&#xff08;method&#xff09;。目前函数 和数据是分离的&#xff0c;函数并不直接操作数据&#xff0c;我们需要拿到函数返回的结果&a…

LVGL4种输入设备详解(触摸、键盘、实体按键、编码器)

lvgl有触摸、键盘、实体按键、编码器四种输入设备 先来分析一下这四种输入设备有什么区别 &#xff08;1&#xff09;LV_INDEV_TYPE_POINTER 主要用于触摸屏 用到哪个输入设备保留哪个其他的也是&#xff0c;保留触摸屏输入的任务注册&#xff0c;其它几种种输入任务的注册&…

让文物“活”起来,以3D数字化技术传承文物历史文化!

文物&#xff0c;作为不可再生的宝贵资源&#xff0c;其任何毁损都是无法逆转的损失。然而&#xff0c;当前文物保护与修复领域仍大量依赖传统技术&#xff0c;同时&#xff0c;文物管理机构和专业团队的力量相对薄弱&#xff0c;亟需引入数字化管理手段以应对挑战。 积木易搭…

如何通过 ESPN API 获取 NBA 球队的赛程表

对于 NBA 爱好者和开发者来说&#xff0c;通过 API 获取球队赛程表是一项非常实用的功能&#xff0c;尤其是如果你正在构建一个应用或网站&#xff0c;需要自动化获取比赛安排的情况下。今天&#xff0c;我将为大家介绍如何通过 ESPN 提供的 API 获取 NBA 球队的赛程表。 1. ES…

LM Studio 部署本地大语言模型

一、下载安装 1.搜索&#xff1a;lm studio LM Studio - Discover, download, and run local LLMs 2.下载 3.安装 4.更改成中文 二、下载模型(软件内下载) 1.选择使用代理&#xff0c;否则无法下载 2.更改模型下载目录 默认下载位置 C:\Users\用户名\.lmstudio\models 3.搜…