k8s中pod的管理

一、资源管理

1.概述

说到k8s中的pod,即荚的意思,就不得不先提到k8s中的资源管理,k8s中可以用以下命令查看我们的资源:

kubectl api-resources

 比如我们现在需要使用k8s开启一个东西,那么k8s通过apiserver去对比etcd里面的数据,并且去调用scheduler来确定我这个东西要放在哪台主机上,还需要调用managecontroller(控制器)去控制pod开启的数量和时间,以及监控pod的状态 

而我们的pod有Deployment,CronJob,DaemonSet,ReplicaSet,Job,StatefulSet,Hpa,通过我们的控制器开启pod,开启pod之后pod中的数据,即程序便运行起来了,程序运行了之后不能像docker一样通过暴露端口的方式直接被访问,还需要service(微服务),对端口进行暴露,最终我们通过service微服务来访问pod中的数据。而pod中的数据持久化是通过建立volume卷,再把pod中的目录挂载到宿主机上,这样pod中的数据就能持久化到宿主机上了。

2.资源管理方式

  • 命令式对象管理:直接使用命令去操作kubernetes资源:
    kubectl run nginx-pod --image=nginx:latest --port=80
  •  命令式对象配置:通过命令配置和配置文件去操作kubernetes资源
    kubectl create/patch -f nginx-pod.yml
  •  声明式对象配置:通过apply命令和配置文件去操作kubernetes资源
    kubectl apply -f nginx-pod.yml
    类型适用环境优点缺点
    命令式对象管理测试简单只能操作活动对象,无法审计、跟踪
    命令式对象配置开发可以审计、跟踪项目大时,配置文件多,操作麻烦
    声明式对象配置开发支持目录操作意外情况下难以调试

    kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署

kubectl命令的语法如下:

 kubectl  [command]  [type]  [name]  [flags] 

  • comand:指定要对资源执行的操作,例如create、get、delete
  • type:指定资源类型,比如deployment、pod、service
  • name:指定资源的名称,名称大小写敏感
  • flags:指定额外的可选参数

 查看所有pod

kubectl get pod

查看某个pod

kubectl get pod pod_name

查看某个pod,以yaml格式展示结果

kubectl get pod pod_name o yaml

显示集群版本

kubectl version

显示集群信息

kubectl cluster-info

 

创建一个webcluster控制器,控制器中pod数量为2

kubectl create deployment webcluster --image nginx/nginx:latest --replicas 2

查看资源帮助

kubectl explain deployment

 查看控制器参数帮助

kubectl explain deployment.spec

编辑控制器配置

kubectl patch deployments.apps webcluster -p '{"spec": {"replicas":4}}'

删除资源

kubectl delete deployments.apps webcluster

 运行和调试命令示例

运行pod

kubectl run testpod --image nginx/nginx:latest

 端口暴露

kubectl run testpod --image nginx/nginx:latest

kubectl expose pod testpod --port 80 --target-port 80

 查看资源详细信息

kubectl describe pods testpod

查看资源日志

kubectl logs pods/testpod

运行交互pod

ctrl+pq退出不停止pod

kubectl run -it testpod --image busybox

 进入到已经运行的容器,且容器有交互环境

kubectl attach pods/testpod -it

 在已经运行的pod中运行指定命令

kubectl exec -it pods/testpod1 /bin/bash

拷贝文件到pod中

kubectl cp testpod1.yml testpod1:/
kubectl exec -it pods/testpod1 /bin/bash

 复制pod中的文件到本机

kubectl cp testpod1:/testpod1.yml testpod1.yml

 运行非交互pod

kubectl run nginx --image nginx/nginx:latest

 高级命令示例

利用命令生成yaml模板文件

kubectl create deployment --image nginx/nginx:latest webcluster --dry-run=client -o yaml > webcluster.yml
kubectl apply -f webcluster.yml

 管理标签

kubectl run nginx --image nginx/nginx:latest
kubectl get pods --show-labels
kubectl label pods nginx app=karl
kubectl get pods --show-labels

 更改标签

kubectl label pods nginx app=webcluster --overwrite

删除标签

kubectl label pods nginx app-

二、pod

1.手动建立pod(生产不推荐)

Kubernetes Pod 是 Kubernetes 中最小的可部署单元,它代表集群中运行的单个实例。Pod 包含一个或多个紧密相关的容器,这些容器共享存储和网络资源,并且总是作为一个整体进行调度和管理。Kubernetes Pod 是 Kubernetes 中的基本构建块,用于封装和管理应用程序的容器。通过共享网络和存储资源,Pod 提供了一种灵活和高效的方式来部署和管理应用程序。理解 Pod 的概念和使用方法是掌握 Kubernetes 的基础。

查看所有pods

kubectl get pods

建立一个名为revkarl的pod

kubectl run revkarl --image nginx/nginx:latest

 显示pod的较为详细的信息

kubectl get pods -o wide

 2.利用控制器管理pod(推荐) 

  1. 自动化管理自动创建和删除:  
  • 自动创建和删除:控制器可以自动创建、删除和管理 Pod,确保集群始终处于期望的状态。例如,Deployment 控制器可以根据指定的副本数自动创建或删除 Pod。
  • 自动恢复:如果 Pod 出现故障或崩溃,控制器会自动检测并重新创建新的 Pod,确保应用的高可用性。 

      2.高可用性和容错性

  • 自动重启:控制器可以监控 Pod 的健康状态,如果某个 Pod 失败,控制器会自动重启它,确保应用始终可用。
  • 负载均衡:通过 ReplicationController 或 ReplicaSet,可以确保多个 Pod 实例在不同的节点上运行,实现负载均衡和故障隔离

      3.水平扩展 

  • 自动扩展:使用 Horizontal Pod Autoscaler (HPA),可以根据 CPU 使用率或其他指标自动调整 Pod 的数量,以应对负载变化。
  • 手动扩展:管理员可以轻松地手动增加或减少 Pod 的副本数,以适应业务需求。

     4. 滚动更新和回滚

  • 滚动更新:使用 Deployment 控制器,可以进行滚动更新,逐步替换旧的 Pod 实例,确保应用在更新过程中始终保持可用。
  • 回滚:如果新版本的 Pod 出现问题,可以轻松地回滚到之前的版本,确保应用的稳定性和可靠性。

    5. 资源配置和管理 

  • 资源请求和限制:控制器可以为 Pod 设置资源请求和限制,确保每个 Pod 都有足够的资源来运行,同时避免资源浪费。
  • 亲和性和反亲和性:通过设置亲和性和反亲和性规则,可以控制 Pod 的调度行为,确保 Pod 在合适的节点上运行,提高性能和可靠性。

   6. 简化运维

  • 集中管理:控制器提供了一种集中管理多个 Pod 的方式,简化了运维工作。管理员可以通过一个控制器管理多个 Pod,而不是单独管理每个 Pod。
  • 标准化:控制器提供了一种标准化的方式来管理 Pod,确保所有 Pod 都遵循相同的标准和规范。 

   7. 服务发现和负载均衡

  • 服务发现:通过 Service 对象,可以为一组 Pod 提供稳定的网络标识符,实现服务发现。
  • 负载均衡:Service 对象可以自动将流量分发到后端的 Pod,实现负载均衡。 

 建立控制器并自动运行pod

kubectl create deployment revkarl --image nginx/nginx:latest

为revkarl扩容

 为revkarl缩容

3.应用版本的更新 

利用控制器建立pod

kubectl create deployment revkarl --image myapp:v1 --replicas 2

暴露端口

kubectl expose deployment revkarl --port 80 --target-port 80
service/revkarl exposed

 查看历史版本

kubectl rollout history deployment revkarl

 更新控制器镜像版本

kubectl set image deployments/revkarl myapp=myapp:v2

 访问测试一下:

 版本回滚

kubectl rollout undo deployment revkarl --to-revision 1

 4.利用yaml文件部署应用

获得资源帮助

kubectl explain pod.spec.containers

 运行简单的单个容器pod

kubectl run revkarl --image myapp:v1 --dry-run=client -o yaml > pod.yml
kubectl apply -f pod.yml

运行多个容器pod

vim pod.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: revkarl
  name: revkarl
spec:
  containers:
  - image: myapp:v1
    name: web1

  - image: myapp:v2
    name: web2

 在一个pod中开启多个容器时一定要确保容器彼此不能互相干扰

 

vim pod.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: revkarl
  name: revkarl
spec:
  containers:
  - image: myapp:v1
    name: web1

  - image: busybox:latest
    name: web2
    command: ["/bin/sh","-c","sleep 1000000"]

 三、pod的生命周期

1.init容器

Pod 可以包含多个容器,应用运行在这些容器里面,同时 Pod 也可以有一个或多个先于应用容器启动的 Init 容器。
Init 容器与普通的容器非常像,除了如下两点:
        o它们总是运行到完成
        o init 容器不支持 Readiness,因为它们必须在 Pod 就绪之前运行完成,每个Init 容器必须运            行成功,下一个才能够运行。
如果Pod的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止。但是,如果 Pod 对应的 restartPolicy 值为 Never,它不会重新启动。

init容器的功能

  • Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。
  • Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。
  • 应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。
  • Init 容器能以不同于Pod内应用容器的文件系统视图运行。因此,Init容器可具有访问 Secrets 的权限,而应用容器不能够访问。
  • 由于 Init 容器必须在应用容器启动之前运行完成,因此 Init 容器提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。一旦前置条件满足,Pod内的所有的应用容器会并行启动。

 init容器示例

kubectl run initpod --image myapp:v1 -o yaml > pod.yml
vim pod.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: initpod
  name: initpod
spec:
  containers:
   - image: myapp:v1
     name: myapp
  initContainers:
   - name: init-myservice
     image: busybox
     command: ["sh","-c","until test -e /testfile;do echo wating for myservice;sleep 2;done"]

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《从零开始大模型开发与微调》真的把大模型说透了!零基础入门一定要看!

2022年底,ChatGPT震撼上线,大语言模型技术迅速“席卷”了整个社会,人工智能技术因此迎来了一次重要进展。与大语言模型相关的研发岗薪资更是水涨船高,基本都是5w月薪起。很多程序员也想跟上ChatGPT脚步,今天给大家带来…

51单片机系列-串口(UART)通信技术

🌈个人主页: 羽晨同学 💫个人格言:“成为自己未来的主人~” 并行通信和串行通信 并行方式 并行方式:数据的各位用多条数据线同时发送或者同时接收 并行通信特点:传送速度快,但因需要多根传输线&#xf…

免杀对抗—GOC#反VT沙盒资源分离混淆加密

前言 今天的主要内容是反VT沙盒,我们都知道生成的后门会被杀软上穿到沙盒中去运行,去逆向。如此一来我们的后门就很容易被查杀掉,但如果我们对后门进行一些操作,让它在被逆向的时候,反编译出一堆乱码,或者…

【大语言模型-论文精读】用于医疗领域摘要任务的大型语言模型评估综述

【大语言模型-论文精读】用于医疗领域摘要任务的大型语言模型评估综述 论文信息: 用于医疗领域摘要任务的大型语言模型评估:一篇叙述性综述, 文章是由 Emma Croxford , Yanjun Gao 博士 , Nicholas Pellegrino , Karen K. Wong 等人近期合作…

STM32PWM应用

目录 一、输出比较(OC) 二、PWM: 1、简介 2、基本结构 3、参数计算 三、PWM驱动LED呼吸灯 1、代码 四、PWM驱动Sg90舵机 1、工作原理 2、完整代码 五、PWM驱动直流电机 1、TB6612芯片模块 2、完整代码: 一、输出比较(OC) OC(Outp…

智能医疗:Spring Boot医院管理系统开发

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…

【Python】PDFMiner.six:高效处理PDF文档的Python工具

PDF是一种广泛使用的文件格式,特别适用于呈现固定布局的文档。然而,提取PDF文件中的文本和信息并不总是那么简单。幸好有许多Python库可以帮助我们,其中,PDFMiner.six 是一个功能强大、专门用于PDF文档解析的库。 ⭕️宇宙起点 &a…

cnn突破四(生成卷积核与固定核对比)

cnn突破三中生成四个卷积核,训练6万次,91分,再训练6万次,95分,不是很满意,但又找不到问题点,所以就想了个办法,使用三个固定核,加上三层bpnet神经网络,看看效…

王道-数据结构

1 设数组data[m]作为循环队列的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为____ 答案:D 解析:队列的头指针指向队首元素的实际位置,因此出队操作后,头指针需向上移动一个元素的位置。循环队列的容量为m,所以头指针front加1以后,需…

【d60】【Java】【力扣】509. 斐波那契数

思路 要做的问题:求F(n), F(n)就等于F(n-1)F(n-2),要把这个F(n-1)F(n-2)当作常量,已经得到的值, 结束条件:如果是第1 第2 个数字的时候,没有n-1和n-2,所以…

闯关训练三:Git 基础知识

任务1: 破冰活动:自我介绍 点击Fork目标项目,创建一个新的Fork 获取仓库链接 在连接好开发机的vscode终端中逐行执行以下代码: git clone https://github.com/KelvinIII/Tutorial.git # 修改为自己frok的仓库 cd Tutorial/ git branch -a g…

4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1

目录 前序工作 1. 服务器项目名和本地一致 2. pycharm连接服务器 3. 本地项目对应到服务器项目 4. 简单测试一下同步效果 同步成功 前序工作 在同步到服务器之前,得确保已经完成以下几个前置步骤: 1. 租一个云服务器,可参考&#xff1a…

18734 拓扑排序

### 思路 1. **建模问题**:将课程和依赖关系建模为有向图,其中课程是节点,依赖关系是有向边。 2. **选择算法**:使用拓扑排序算法来确定课程的学习顺序。由于需要确保输出唯一性,同等条件下编号小的课程排在前面&…

WDG看门狗在stm32中的应用

一,WDG看门狗的介绍 看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性看…

2-114 基于matlab的CA模型

基于matlab的CA模型,Singer模型对单机动目标进行跟踪算法,具有10页实验文档。采用蒙特卡罗方法对一个二坐标雷达对一平面上运动的目标进行观测,得到跟踪滤波结果。程序已调通,可直接运行。 下载源程序请点链接:2-114 …

libcurl网络协议库使用Demo

目录 1 libcurl简介 2 libcurl编译 3 使用步骤 4 函数说明 4.1 全局初始化函数 curl_global_init 4.2 全局释放函数 curl_global_cleanup 4.3 libcurl库版本 curl_version 4.4 开启会话 curl_easy_init 4.5 结束会话 curl_easy_cleanup 4.6 设置传输选项 curl_easy_se…

Stable Diffusion绘画 | 插件-Deforum:动态视频生成(中篇)

本篇文章重点讲解参数最多的 关键帧 模块。 「动画模式」选择「3D」: 下方「运动」Tab 会有一系列参数: 以下4个参数,只有「动画模式」选择「2D」才会生效,可忽略: 运动 平移 X 让镜头左右移动: 大于0&a…

Seata学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程:封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

华为eNSP:端口隔离

一,什么是端口隔离 端口隔离是一种网络配置技术,用于将不同的网络设备或用户隔离在不同的虚拟局域网(VLAN)中,以实现网络流量的隔离和安全性提升。通过在交换机或路由器上配置端口隔离,可以将连接到同一设…

【机器学习-无监督学习】概率图模型

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…