kubernetes(2)

pod管理

应用部署

上传测试镜像

[root@k8s1 docker]# docker push reg.westos.org/library/myapp:v1
[root@k8s1 docker]# docker push reg.westos.org/library/myapp:v2

创建自助式pod(生产不推荐)

[root@k8s2 ~]# kubectl run demo --image=myapp:v1[root@k8s2 ~]# kubectl get pod -o wide    //使用 wide 输出格式,可以展示更多的列,包括 Node(Pod 所在的节点)、IP、状态、重启次数、版本等信息

查看pod详情

[root@k8s2 ~]# kubectl describe  pod demo        //获取指定 Pod 的各项详细信息,包括容器的状态、日志、事件等

 删除pod

[root@k8s2 ~]# kubectl delete  pod demo

 创建控制器(推荐)

[root@k8s2 ~]# kubectl create deployment myapp --image=myapp:v1 --replicas=3
//创建一个 Deployment 对象的命令,用于管理 Pod,管理的pod副本数为3

控制器自动维护pod副本数

[root@k8s2 ~]# kubectl get pod
[root@k8s2 ~]# kubectl get deployments.apps    //返回所有 Deployments 的名称、可用副本数、所需副本数、更新策略等详细信息

[root@k8s2 ~]# kubectl delete  pod myapp-67984c8646-4j6fs
[root@k8s2 ~]# kubectl get deployments.apps
[root@k8s2 ~]# kubectl get pod

 在远程pod中执行命令

[root@k8s2 ~]# kubectl exec myapp-67984c8646-nwtl9 -- ls /usr/share/nginx/html
//在 Pod myapp-678fcbc488-gqdgk 中执行命令 ls /usr/share/nginx/html

扩容pod数量

[root@k8s2 ~]# kubectl  scale deployment myapp --replicas=6
[root@k8s2 ~]# kubectl get pod

 缩容pod数量

[root@k8s2 ~]# kubectl  scale deployment myapp --replicas=3
[root@k8s2 ~]# kubectl get pod

通过service暴露pod

[root@k8s2 ~]# kubectl expose deployment myapp --port=80 --target-port=80
//kubectl expose deployment myapp 命令创建了一个 Service,并将 Deployment myapp 暴露在集群内部的网络中。
--port 参数指定了 Service 监听的端口号,这里为 80;
--target-port 参数指定了 Service 转发流量到 Deployment 中的 Pod 时所使用的端口号,这里同样为 80。

 查看svc详情

[root@k8s2 ~]# kubectl describe  svc myapp
//获取了名为 myapp 的 Service 的详细信息。该命令输出的信息包括:
Service 的名称、命名空间、标签等基本信息;
Service 的类型(ClusterIP、NodePort、LoadBalancer 等);
Service 的端口信息,包括监听的端口号、协议(TCP/UDP)等;
Service 关联的 Pod 信息,包括选择器、关联的 Pod 的 IP 地址、副本数等;
Service 的 Endpoints 信息,包括关联的 Pod 的 IP 地址和端口号。[root@k8s2 ~]# curl 10.96.20.8
[root@k8s2 ~]# curl 10.96.20.8/hostname.html

service自动发现pod扩容与缩容,自动更新endpoints,实现对应用的负载均衡

service默认使用clusterip类型,只能在集群中访问

nodeport类型,可以在集群外部访问

[root@k8s2 ~]# kubectl edit svc myapp

[root@k8s2 ~]# kubectl get svc

访问集群任意节点+端口

更新应用版本

[root@k8s2 ~]# kubectl set image deployment/myapp myapp=myapp:v2    //将 myapp 容器的镜像更新为 myapp:v2
[root@k8s1 docker]# curl  192.168.81.11:31902

查看应用历史版本

[root@k8s2 ~]# kubectl rollout history deployment myapp    //用于查看 Deployment myapp中所有副本集的升级历史记录

回滚

[root@k8s2 ~]# kubectl rollout undo deployment myapp --to-revision=1

删除应用

[root@k8s2 ~]# kubectl delete  deployments.apps myapp
[root@k8s2 ~]# kubectl delete svc myapp
[root@k8s2 ~]# kubectl get ns

集群通过namespace来做资源隔离,默认操作的资源都指向default

编写yaml文件

获取帮助

[root@k8s2 pod]# kubectl explain pod.spec.containers

获取yaml模版

[root@k8s2 pod]# kubectl run demo --image nginx --dry-run=client  -o yaml > pod.yaml
//--dry-run=client:使用客户端模式,即不会真正创建 Pod,仅会返回 YAML 格式的定义文件
-o yaml:以 YAML 格式输出定义文件
> pod.yaml:将输出的 YAML 定义文件保存到当前目录下的 pod.yaml 文件中
执行该命令会生成一个名为 pod.yaml 的文件,其中包含了一个定义 nginx 镜像 Pod 的 YAML 文件[root@k8s2 pod]# vim pod.yaml
apiVersion: v1        //Kubernetes API的版本
kind: Pod            //资源类型,这里是pod
metadata:            //元数据对象,用于述 Pod 的基本信息,例如标签,名称等。labels:run: demoname: demo
spec:            //制定了pod的具体配置containers:            //定义了 Pod 中的容器- image: nginx        // 指定容器使用的镜像,这里使用的是nginx。name: demoimagePullPolicy: IfNotPresent        //指定镜像拉取策略为IfNotPresent,表示如果本地已经存在相同版本的镜像,则不会从镜像仓库中拉取

 

创建pod

[root@k8s2 pod]# kubectl create -f pod.yaml    //根据pod.yaml文件中的定义来创建一个新的 Kubernetes Pod对象

 查看详情

[root@k8s2 pod]# kubectl get pod -o wide
[root@k8s2 pod]# kubectl describe  pod demo
[root@k8s2 pod]# kubectl get pod demo -o yaml//kubectl get pod -o wide命令会以表格形式显示所有的 Pod 对象,其中包括名称、状态、所在节点、IP地址、版本等信息。-o wide选项可以扩展输出内容,显示更多信息。kubectl describe pod demo命令会以文本形式展示指定名称为 demo 的 Pod 对象的详细信息,包括 Pod 的元数据、各容器的信息、生命周期事件、存储和网络配置等。kubectl get pod demo -o yaml命令会以 YAML 格式展示指定名称为 demo 的 Pod 对象的详细信息,包括 Pod 的元数据、各容器的信息、存储和网络配置等。这种格式的输出可以用于创建或修复 Pod 对象。

 示例

1、

2、

3、

  • Guaranteed,保证级别:Pod 中的容器都设置了 CPU 和 Memory 的 requests 和 limits,并且这些值相等。此时,如果资源满足所有 Guaranteed 类别的 Pod 的需求,则这些 Pod 会被同时调度在集群中,保证它们的运行。
  • Burstable,突发级别:Pod 中至少有一个容器设置了 CPU 和 Memory 的 requests 和 limits,但是这些值不相等。此时,如果资源足够,那么这些 Pod 会被相应地调度,但是它们的性能可能会受到限制,因为它们能够使用的资源是有上限的。
  • BestEffort,尽力级别:Pod 中的容器没有设置 CPU 和 Memory 的 requests 和 limits。此时,这些容器会尽力地获取集群中未被占用的资源,但是它们的资源使用是无法保证的,因为它们需要等待集群中已分配的所有资源使用完毕才能够获得更多的资源。

 4、

5、

[root@k8s2 pod]# kubectl apply -f pod.yml           //更新该 Pod 的配置         
[root@k8s2 pod]# kubectl delete  -f pod.yml         //删除pod

init容器

[root@k8s2 pod]# vim init-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: myapp-podlabels:app.kubernetes.io/name: MyApp
spec:containers:- name: myapp-containerimage: busyboxcommand: ['sh', '-c', 'echo The app is running! && sleep 3600']initContainers:- name: init-myserviceimage: busyboxcommand: ['sh', '-c', "until nslookup myservice.default.svc.cluster.local; do echo waiting for myservice; sleep 2; done"]

[root@k8s2 pod]# kubectl apply -f init-pod.yaml
[root@k8s2 pod]# kubectl get pod

在init容器没有成功运行之前,主容器不会被运行

添加svc定义

[root@k8s2 pod]# vim myservice.yaml
---
apiVersion: v1
kind: Service
metadata:name: myservice
spec:ports:- protocol: TCPport: 80targetPort: 9376

svc解析成功后,init容器退出,主容器运行

[root@k8s2 pod]# yum install -y bind-utils
[root@k8s2 pod]# dig -t A myservice.default.svc.cluster.local. @10.96.0.10

[root@k8s2 pod]# kubectl get pod

探针

存活探针

[root@k8s2 pod]# vim liveness-pod.yaml
apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-http
spec:containers:- name: livenessimage: nginxlivenessProbe:tcpSocket:port: 8080initialDelaySeconds: 3periodSeconds: 3[root@k8s2 pod]# kubectl apply -f liveness-pod.yaml

[root@k8s2 pod]# kubectl apply -f liveness-pod.yaml

在存活探针检测失败导致容器不断被重启 

就绪探针

[root@k8s2 pod]# vim liveness-pod.yaml
apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-http
spec:containers:- name: livenessimage: nginxlivenessProbe:tcpSocket:port: 80initialDelaySeconds: 3periodSeconds: 3readinessProbe:httpGet:path: /test.htmlport: 80initialDelaySeconds: 5periodSeconds: 5

就绪探针失败导致容器一直未就绪

创建测试页面

[root@k8s2 pod]# kubectl exec  liveness-http -- touch /usr/share/nginx/html/test.html

就绪探针成功

创建svc

[root@k8s2 pod]# kubectl expose pod liveness-http --port 80 --target-port 80

就绪容器自动上线

删除测试页面

[root@k8s2 pod]# kubectl exec  liveness-http -- rm /usr/share/nginx/html/test.html

就绪探针失败,容器未就绪

在svc中容器自动下线

控制器

文档:

工作负载资源 | Kubernetes

replicaset

ReplicaSet用于保证指定数量的 Pod 副本一直运行

[root@k8s2 pod]# vim rs-example.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:name: replicaset-example
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx

replicaset是通过标签匹配pod

[root@k8s2 pod]# kubectl label pod replicaset-example-n2kf2 app=myapp --overwrite    //n2kf2 myapp标签

[root@k8s2 pod]# kubectl label pod replicaset-example-n2kf2 app=nginx --overwrite

replicaset自动控制副本数量,pod可以自愈

[root@k8s2 pod]# kubectl delete pod replicaset-example-n2kfs

deployment

Deployment 的主要作用是实现应用程序的无缝升级和回滚

[root@k8s2 pod]# vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-example
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: myapp:v1

版本迭代

[root@k8s2 pod]# vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-example
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: myapp:v2

replicaset就是deployment的一个版本

回滚

[root@k8s2 pod]# vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-example
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: myapp:v1

滚动更新策略

[root@k8s2 pod]# vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-example
spec:minReadySeconds: 5				strategy:rollingUpdate:maxSurge: 1maxUnavailable: 0replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: myapp:v1//minReadySeconds 的值为 5 秒,表示在新版本的 Pod 启动后,需要等待至少 5 秒才会继续滚动升级。maxSurge 的值为 1,表示在滚动升级的过程中,除了当前的 Pod 数量之外,最多会创建一个新的 Pod。maxUnavailable 的值为 0,表示在滚动升级的过程中,不允许任何 Pod 不可用

暂停与恢复

暂停,避免触发不必要的线上更新

[root@k8s2 pod]# kubectl rollout pause deployment deployment-example[root@k8s2 pod]# vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-example
spec:minReadySeconds: 5strategy:rollingUpdate:maxSurge: 1maxUnavailable: 0replicas: 6				selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: nginxresources:limits:cpu: 0.5memory: 200Mirequests:cpu: 0.5memory: 200Mi

调整副本数,不受影响

但是更新镜像和修改资源并没有触发更新

恢复后开始触发更新

[root@k8s2 pod]# kubectl rollout resume deployment deployment-example

statefulset

当使用StatefulSet时,Pod的名称会包括一个索引,例如web-0web-1web-2等,这些索引是按顺序递增的,并且在Pod的生命周期中保持不变

StatefulSet保证每个Pod的名称在整个集群中是唯一的,例如,如果您有一个名为web-0的Pod,任何时候都不能重新创建一个叫做web-0的Pod。

[root@k8s2 pod]# vim statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:selector:matchLabels:app: nginxserviceName: "nginx"replicas: 3minReadySeconds: 3template:metadata:labels:app: nginxspec:terminationGracePeriodSeconds: 10containers:- name: nginximage: nginxports:- containerPort: 80name: web

daemonset

Taints(污点)是一种标记,可以应用于节点,用于表示这个节点上的某些条件不适合运行某些 Pod。

添加回来

[root@k8s2 pod]# vim daemonset-example.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:name: daemonset-example
spec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:tolerations:- effect: NoSchedule        //表示不允许调度新的 Pod 到该节点上operator: Exists        //表示只要这个污点存在,就能容忍。containers:- name: nginximage: nginx

job

Job是用于处理一次性任务的控制器,它可以保证任务成功完成后自动停止。Job中包含一个或多个Pods,在Pods成功完成后便完成任务。如果Pods失败,则Job会重启Pods,直到任务完成。

[root@k8s2 pod]# vim job.yml
apiVersion: batch/v1
kind: Job
metadata:name: pi
spec:completions: 6        //完成任务的Pod数量parallelism: 2        //并行执行的Pod数量template:spec:containers:- name: piimage: perl:5.34.0command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: Never        //完成后不会重启backoffLimit: 4            //当任务执行失败时,最多重试的次数

cronjob

CronJob是用于处理周期性任务的控制器,它类似于传统的Cron定时任务,可以基于指定的时间或时间间隔来执行任务。CronJob会创建一个Job对象来运行任务,Job对象运行完成后自动被删除。如果Job对象出现错误,CronJob将会自动重启Job对象,直到任务成功完成。

[root@k8s2 pod]# vim cronjob.yml
apiVersion: batch/v1
kind: CronJob
metadata:name: hello
spec:schedule: "* * * * *"jobTemplate:spec:template:spec:containers:- name: helloimage: busyboximagePullPolicy: IfNotPresentcommand:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailure
//每分钟的每一秒都会执行一次,使用busybox镜像来打印当前时间并输出"Hello from the Kubernetes cluster"

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

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

相关文章

uniapp 安装 u-view 组件库

u-view 组件库安装教程:https://uviewui.com/components/install.html 注:以下使用 HBuilderx 安装 u-view 2.0 版本,不适用于其它版本。 1.安装 u-view 组件库 2、注册并登录 HBuilderx 账号,点击下载 u-view 组件库。 3、点击…

如何开发一个 Safari 插件

本文字数:2493字 预计阅读时间:15分钟 由于常用浏览器是Safari,而Safari浏览器的插件比不上Chrome,所以就有了自己开发常用的Safari插件的想法。 打算开发当前页面生成二维码的Extension,因为网络原因,AirD…

真实感受:是智能家居在选择合适的技术!

科技从来都是为了让我们的生活更加的简单、舒适,而智能家居的智能,体现在如何更更更方便的使用我需要控制的家居。 例如:下班躺在床上想休息,房间和大厅的灯还开着,这时你会选择什么产品躺着解决问题? 红外…

Hadoop3教程(二十八):(生产调优篇)NN、DN的多目录配置及磁盘间数据均衡

文章目录 (148)NN多目录配置(149)DataNode多目录配置及磁盘间数据平衡磁盘间数据均衡 参考文献 (148)NN多目录配置 NN多目录的意思是,本地目录可以配置成多个,且每个目录存放内容相…

20款VS Code实用插件推荐

前言: VS Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的VS Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持插件式安装环境开发让VS Code成为了开发语言工具中的霸主…

【数据结构】八大排序

目录 1. 排序的概念及其作用 1.1 排序的概念 1.2 排序运用 1.3 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想 2.1.2 直接插入排序 2.1.3 希尔排序(缩小增量排序) 2.2 选择排序 2.2.1 基本思想 2.2.2 直接选择排序 2.2…

Linux下Samba服务安装及启用全攻略

Linux下Samba服务安装及启用全攻略 前言一、安装SSH Server二、安装Samba Server1.安装net-tool2.建立账号的samba3.windows通过Samba与linux共享文件4.使用远程工具登录Linux 总结 前言 提示:本文详解了在Linux系统下如何安装和启用Samba服务,涵盖了从…

【2023年11月第四版教材】软考高项极限冲刺篇笔记(2)

1 我们要知道的事 1、考试的选择题不会出假大空的管理,一般较为具体 2.3 信息系统治理 首先治理的目标是什么 治理的管理层分为三层 原则:简单透明适合 COBIT IT审计范围:总体、组织、物理、逻辑、其他 IT审计风险:固有、控制、检查、总体审计 IT审计方法:访谈、调查、…

【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心

微服务(5) 文章目录 微服务(5)1. 认识和安装Nacos2. 服务注册到nacos和拉取服务1)引入依赖2)配置nacos地址3)重启 3. 服务分级存储模型3.1 给user-service配置集群3.2 同集群优先的负载均衡 4. …

vue el-dialog弹出框自定义指令实现拖拽改变位置-宽度-高度

前言 在实际开发中我们经常使用el-dialog弹出框做表单,一般情况都是居中。遮挡到了一部分数据 当我们想要查看弹出框下面的数据时,就只能先把弹出框关闭,查看完数据之后在打开弹框 我们通过动态样式,和鼠标事件就可以实现。但自…

effective c++学习笔记(后四章)

六 继承与面向对象设计 红色字 \color{FF0000}{红色字} 红色字 32 确定你的public继承塑模出 is-a关系 如果你令class D (“Derived”)以public形式继承class B (“Base”),你便是告诉C编译器(以及你的代码读者)说,每一个类型为…

Origami Studio for Mac:塑造未来,掌握原型设计之巅

在当今高度竞争的设计领域,原型设计的重要性不言而喻。它不仅是沟通想法,也是测试和改进设计的关键环节。而现在,一款强大的原型设计工具——Origami Studio for Mac,正在席卷设计界,以其独特的功能和卓越的性能&#…

shell变量

shell变量之学习笔记 Shell变量概念1 shell变量分类:2 变量的赋值3 变量赋值格式:4 变量命名方式5 变量声明6 变量引用7 变量清除8 变量只读9 内部参数变量10 位置参数变量11 退出和返回状态12 命令替换13 read命令14 字符串长度与截取15 字符串替换16 变…

Spring Security—Servlet 应用架构

目录 一、Filter(过滤器)回顾 二、DelegatingFilterProxy 三、FilterChainProxy 四、SecurityFilterChain 五、Security Filter 六、打印出 Security Filter 七、添加自定义 Filter 到 Filter Chain 八、处理 Security 异常 九、保存认证之间的…

C语言【文件】

目录 概念 文件名 文件的打开和关闭 fopen fclose 输入输出函数 fputc fgetc fputs fgets fprintf fscanf fwrite fread 三种流 scanf和sprintf 结构体转化 ​编辑 文件的随机读写 fseek ftell rewind 文本文件和二进制文件 文件读取结束的判定 文件缓冲…

C++标准模板(STL)- 类型支持 (运行时类型识别,type_info )

运行时类型识别 定义于头文件 <typeinfo> 含有某个类型的信息&#xff0c;由实现生成。​​这是 typeid 运算符所返回的类。 std::type_info 定义于头文件 <typeinfo> class type_info; 类 type_info 保有一个类型的实现指定信息&#xff0c;包括类型的名称和…

【论文解读】Parameter-Efficient Transfer Learning for NLP

一. 介绍 1.1 为什么要引入Adapter 在存在许多下游任务的情况下&#xff0c;微调的参数效率很低:每个任务都需要一个全新的模型。作为替代方案&#xff0c;我们建议使用适配器模块进行传输。 1.2 论文目标 目标是建立一个在所有这些方面都表现良好的系统&#xff0c;但不需…

docker图形胡界面管理工具--Portainer可视化面板安装

1.安装运行Portainer docker run -d -p 8088:9000 \ > --restartalways -v /var/run/docker.sock:/var/run/docker.sock --privilegedtrue portainer/portainer--restartalways&#xff1a;Docker启动后容器自动启动 -p&#xff1a;端口映射 -v&#xff1a;路径映射2.通过…

【C++】哈希应用——海量数据面试题

哈希应用——海量数据面试题 一、位图应用1、给定100亿个整数&#xff0c;设计算法找到只出现一次的整数&#xff1f;2、给两个文件&#xff0c;分别有100亿个整数&#xff0c;我们只有1G内存&#xff0c;如何找到两个文件交集&#xff1f;&#xff08;1&#xff09;用一个位图…

JAVA基础(JAVA SE)学习笔记(七)面向对象编程(进阶)

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第二阶段&#xff1a;Java面向对象编程 6.面向对象编程&#xff08;基础&#xff09; 7.面向对象编程&…