kubernetes高级实战
一、模拟企业环境进行一个实战部署
[root@master node]# kubectl apply -f pod-tomcat.yaml
pod/tomcat-test created
[root@master node]# kubectl get pods
NAME READY STATUS RESTARTS AGE
tomcat-test 2/2 Running 0 2s
[root@master node]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-test 2/2 Running 0 8s 10.244.166.137 node1 <none> <none>
[root@master node]# cat pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-test
namespace: default
labels:
app: tomcat
spec:
nodeName: node1
containers:
- name: tomcat-java
ports:
- containerPort: 8080
image: xianchao/tomcat-8.5-jre8:v1
imagePullPolicy: IfNotPresent
- name: busybox-test
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
[root@node1 ~]# kubectl label node node2 version=v1
[root@master node]# kubectl apply -f pod-tomcat.yaml
pod/tomcat-test created
[root@master node]# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-test 2/2 Running 0 6s 10.244.104.10 node2 <none> <none>
[root@master node]# cat pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-test
namespace: default
labels:
app: tomcat
spec:
nodeSelector:
version: v1
containers:
- name: tomcat-java
ports:
- containerPort: 8080
image: xianchao/tomcat-8.5-jre8:v1
imagePullPolicy: IfNotPresent
- name: busybox-test
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
[root@node1 ~]# kubectl label node node1 zone=foo
[root@master node]# kubectl apply -f affinity.yaml
pod/pod-affinity created
[root@master node]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-affinity 1/1 Running 0 24s
[root@master node]# cat affinity.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-affinity
namespace: default
labels:
app: myapp
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: zone
operator: In
values:
- foo
- bar
containers:
- name: myapp
image: docker.io/ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
[root@master node]# kubectl apply -f pod-nodeaffinity-demo-2.yaml
pod/pod-node-affinity-demo-2 created
[root@master node]# cat pod-nodeaffinity-demo-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-node-affinity-demo-2
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: docker.io/ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: zone1
operator: In
values:
- foo1
- bar1
weight: 10
- preference:
matchExpressions:
- key: zone2
operator: In
values:
- foo2
- bar2
weight: 20
[root@master node]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-affinity 1/1 Running 0 8m3s
pod-node-affinity-demo-2 1/1 Running 0 10s
二、命令+命令解析
### 1. **部署第一个 Pod(`tomcat-test`)**
#### 操作:
```bash
kubectl apply -f pod-tomcat.yaml
```
#### 配置文件 (`pod-tomcat.yaml`):
```yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-test
namespace: default
labels:
app: tomcat
spec:
nodeName: node1
containers:
- name: tomcat-java
ports:
- containerPort: 8080
image: xianchao/tomcat-8.5-jre8:v1
imagePullPolicy: IfNotPresent
- name: busybox-test
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
```
#### 解释:
- **`nodeName: node1`**:指定 Pod 必须调度到 `node1` 节点。
- **`containers`**:
- `tomcat-java`:运行 Tomcat 应用,监听 8080 端口。
- `busybox-test`:运行一个 BusyBox 容器,执行 `sleep 3600` 命令(保持容器运行 1 小时)。
- **`imagePullPolicy: IfNotPresent`**:如果本地已有镜像,则不会从远程仓库拉取。
#### 查看 Pod:
```bash
kubectl get pods -o wide
```
- 输出:
```
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-test 2/2 Running 0 8s 10.244.166.137 node1 <none> <none>
```
- Pod 状态为 `Running`,表示已成功调度到 `node1` 节点并运行。
---
### 2. **为 `node2` 添加标签**
#### 操作:
```bash
kubectl label node node2 version=v1
```
#### 解释:
- 为 `node2` 节点添加一个标签 `version=v1`。
- 标签可以用于节点选择器(`nodeSelector`)或亲和性规则(`affinity`)。
---
### 3. **部署第二个 Pod(`tomcat-test`)**
#### 操作:
```bash
kubectl apply -f pod-tomcat.yaml
```
#### 配置文件 (`pod-tomcat.yaml`):
```yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-test
namespace: default
labels:
app: tomcat
spec:
nodeSelector:
version: v1
containers:
- name: tomcat-java
ports:
- containerPort: 8080
image: xianchao/tomcat-8.5-jre8:v1
imagePullPolicy: IfNotPresent
- name: busybox-test
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
```
#### 解释:
- **`nodeSelector`**:指定 Pod 必须调度到带有 `version=v1` 标签的节点(即 `node2`)。
- 其他配置与第一个 Pod 相同。
#### 查看 Pod:
```bash
kubectl get pods -o wide
```
- 输出:
```
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-test 2/2 Running 0 6s 10.244.104.10 node2 <none> <none>
```
- Pod 状态为 `Running`,表示已成功调度到 `node2` 节点并运行。
---
### 4. **为 `node1` 添加标签**
#### 操作:
```bash
kubectl label node node1 zone=foo
```
#### 解释:
- 为 `node1` 节点添加一个标签 `zone=foo`。
- 该标签将用于后续的亲和性调度。
---
### 5. **部署第三个 Pod(`pod-affinity`)**
#### 操作:
```bash
kubectl apply -f affinity.yaml
```
#### 配置文件 (`affinity.yaml`):
```yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-affinity
namespace: default
labels:
app: myapp
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: zone
operator: In
values:
- foo
- bar
containers:
- name: myapp
image: docker.io/ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
```
#### 解释:
- **`nodeAffinity`**:定义节点亲和性规则。
- **`requiredDuringSchedulingIgnoredDuringExecution`**:调度时必须满足的条件。
- **`matchExpressions`**:匹配节点的标签。
- `key: zone`:匹配标签键为 `zone` 的节点。
- `operator: In`:标签值必须在 `values` 列表中(即 `foo` 或 `bar`)。
- 由于 `node1` 有 `zone=foo` 标签,Pod 将被调度到 `node1`。
#### 查看 Pod:
```bash
kubectl get pods
```
- 输出:
```
NAME READY STATUS RESTARTS AGE
pod-affinity 1/1 Running 0 24s
```
- Pod 状态为 `Running`,表示已成功调度到 `node1` 节点并运行。
---
### 6. **部署第四个 Pod(`pod-node-affinity-demo-2`)**
#### 操作:
```bash
kubectl apply -f pod-nodeaffinity-demo-2.yaml
```
#### 配置文件 (`pod-nodeaffinity-demo-2.yaml`):
```yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-node-affinity-demo-2
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: docker.io/ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: zone1
operator: In
values:
- foo1
- bar1
weight: 10
- preference:
matchExpressions:
- key: zone2
operator: In
values:
- foo2
- bar2
weight: 20
```
#### 解释:
- **`nodeAffinity`**:定义节点亲和性规则。
- **`preferredDuringSchedulingIgnoredDuringExecution`**:调度时优先满足的条件(非强制)。
- **`preference`**:定义偏好规则。
- `key: zone1` 和 `key: zone2`:匹配节点的标签。
- `operator: In`:标签值必须在 `values` 列表中。
- `weight`:规则的权重(值越大,优先级越高)。
- 由于没有节点满足 `zone1` 或 `zone2` 的标签,Pod 将被调度到任意可用节点。
#### 查看 Pod:
```bash
kubectl get pods
```
- 输出:
```
NAME READY STATUS RESTARTS AGE
pod-affinity 1/1 Running 0 8m3s
pod-node-affinity-demo-2 1/1 Running 0 10s
```
- Pod 状态为 `Running`,表示已成功调度并运行。
---
### 总结
- **`nodeName`**:强制 Pod 调度到指定节点。
- **`nodeSelector`**:根据节点标签调度 Pod。
- **`nodeAffinity`**:定义更复杂的节点亲和性规则(强制或偏好)。
- 通过这些机制,可以灵活控制 Pod 的调度行为,满足不同的部署需求。
如果还有其他问题,欢迎继续提问!
相关文章:
kubernetes高级实战
一、模拟企业环境进行一个实战部署 [rootmaster node]# kubectl apply -f pod-tomcat.yaml pod/tomcat-test created [rootmaster node]# kubectl get pods NAME READY STATUS RESTARTS AGE tomcat-test 2/2 Running 0 2s [rootmaster node]…...
【Java】——程序逻辑控制(构建稳健代码的基石)
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:【Java】内容概括 文章目录: 一.顺序结构二.分支结构1.if 语句1.1 语法格式11.2 语法格式21.3 语法格式3 …...
QT编程之PCM音频处理
一、高级播放接口(未压缩编码的音频文件) QMediaPlayer 支持MP3/WMA等压缩格式及网络流媒体播放,集成媒体控制(播放/暂停/进度调节)需设置QAudioOutput指定输出设备,支持播放速度调节(setPl…...
卫星互联网智慧杆:开启智能城市新时代
哇哦!在当下这个数字化浪潮正以雷霆万钧之势席卷全球的超酷时代,智慧城市建设已然成为世界各国你追我赶、竞相发力的核心重点领域啦!而咱们的卫星互联网智慧杆,作为一项完美融合了卫星通信与物联网顶尖技术的创新结晶,…...
Numpy broadcasting规则
Numpy的broadcast操作是为了将两个不同形状的数组,通过一系列规则,变换成形状相同的数组,从而使得它们之间可以进行按元素进行的计算。 Broadcasting的机制并不复杂,只要记住以下几条规则就可以了: 1. 顺序。首先&am…...
掌握 Shopee 商品数据:用爬虫解锁无限商机
在电商的浩瀚宇宙中,Shopee 宛如一颗璀璨星辰,吸引着无数卖家与买家在此汇聚。对于电商从业者、市场调研人员或是数据分析师而言,获取 Shopee 店铺的商品信息就如同掌握了开启财富之门的钥匙。而爬虫技术,正是帮助我们高效获取这些…...
Qt-QChart实现折线图
一、介绍场景 动态查看数据变化,或者了解数据发展趋势,让数据可以形象直观展现出来,这里推荐使用折线图的方式展现,本文抛砖引玉,简单实现一个实例,效果图如下: 二、实现步骤 1、charts组件 …...
取消Win10锁屏界面上显示的天气、市场和广告的操作
要取消Win10锁屏界面上显示的天气、市场和广告,您可以按照以下步骤操作: 方法一:更改锁屏界面设置 打开“设置”: 点击“开始”菜单,然后点击齿轮状的“设置”图标。 进入“个性化”: 在“设置”窗口中&a…...
IoT设备测试:从协议到硬件的全栈验证体系与实践指南
一、引言:IoT技术浪潮下的质量挑战 根据IDC预测,到2027年全球IoT设备数量将突破290亿台,涵盖智能家居、工业物联网(IIoT)、智慧城市、车联网等场景。然而,IoT系统的复杂性远超传统嵌入式设备——硬件异构性…...
大白话详细解读React框架的diffing算法
1. Diffing 算法是什么? Diffing 算法是 React 用来比较虚拟 DOM(Virtual DOM)树的一种算法。它的作用是找出前后两次渲染之间的差异(diff),然后只更新这些差异部分,而不是重新渲染整个页面。 …...
自然语言处理入门
第一章 自然语言处理入门 1 什么是自然语言处理 【什么是人工智能,分别对应哪几个领域】 AI是模仿甚至超越人的某项机能,NLP、CV、ASR NLP是机器理解并生成人类语言2 自然语言处理的发展简史 1950 -- 图灵提出“机器能思考吗”,划时代性的…...
Arduino示例代码讲解:Pitch follower 跟随
Arduino示例代码讲解:Pitch follower 跟随 Pitch follower代码功能代码逐行解释1. 注释部分功能:硬件连接:2. `setup()` 函数3. `loop()` 函数硬件连接**扬声器连接**:**光敏电阻连接**:**Arduino板**:运行结果修改建议视频讲解Pitch follower 这段代码是一个Arduino示例…...
从TouchDriver Pro到Touchdriver G1,Weart触觉手套全系解析:XR交互的“真实触感”如何实现?
Weart旗下的Touchdriver Pro触觉手套和Touchdriver G1触觉手套,凭借其技术创新,为用户带来了全新的触觉体验。Touchdriver Pro触觉手套通过多模态触觉反馈技术,提供力反馈、纹理渲染和温度提示,让用户在虚拟环境中感受到真实的触觉…...
华为OD机试-阿里巴巴找黄金宝箱(I)-双指针(Java 2023 B卷 100分)
题目描述 阿里巴巴在去砍柴的路上发现了强盗集团的藏宝地,藏宝地有编号从 0 到 N 的箱子,每个箱子上贴有一个数字。黄金宝箱满足排在它之前的所有箱子数字和等于排在它之后的所有箱子数字和。第一个箱子左边部分的数字和定义为 0;最后一个宝箱右边部分的数字和定义为 0。请…...
ubuntu20如何升级nginx到最新版本(其它版本大概率也可以)
前言: Nginx非常常用,所以在网络安全方面备受“关注”。其漏洞非常多,要经常保持软件更新版本才能更好的保证安全。但是Ubuntu官网适配nginx非常慢,所以nginx官方也会推出针对主流Linux操作系统的包管理工具安装方式。 步骤&…...
排序算法实现:插入排序与希尔排序
目录 一、引言 二、代码整体结构 三、宏定义与头文件 四、插入排序函数(Insertsort) 函数作用 代码要点分析 五、希尔排序函数(ShellSort) 函数作用 代码要点分析 六、打印数组函数(PrintSort&#x…...
UDP协议原理
UDP协议原理 本篇介绍 在前面使用UDP编程时已经基本了解了UDP的工作模式,也知道了UDP有三个特点: 无连接不可靠面向数据报 但是当时并没有具体谈论为什么UDP有以上三个特点,基于这个原因,本篇就会针对这三个原因进行介绍 UDP…...
EtherCAT转Modbus网关如何在倍福plc组态快速配置
EtherCAT转Modbus网关如何在倍福plc组态快速配置 在工业控制领域,EtherCAT和Modbus是两种常见的总线通信协议。EtherCAT以其高速的数据传输和灵活的网络配置被广泛应用于高性能自动化控制系统中,而Modbus则因其简单、稳定且兼容性强而被许多设备所支持。…...
如何设计大模型意图识别?
环境: 大模型 问题描述: 如何设计大模型意图识别? 解决方案: 1. 意图识别定义与核心任务 定义:意图识别(Intent Recognition)是从用户输入(文本、语音等)中解析其核…...
FPGA设计中时间单位科普
FPGA设计中时间单位主要有秒s,毫秒ms,微秒us,纳秒ns,皮秒ps, 使用秒s作为单位时一定要谨慎,因为秒s对于FPGA来说是一个很大的单位。FPGA的时钟周期通常是20ns左右,1秒意味着需要等待50000000个…...
DooTask在Linux的离线部署教程
DooTask在Linux的离线部署教程 下载安装包 从网盘中将安装包下载到本地,下载地址 通过网盘分享的文件:DooTask项目管理工具 链接: https://pan.baidu.com/s/1hGmLXonT4c8hLiDP1QBr8w?pwdgdp6 提取码: gdp6 通过网盘分享的文件:DooTask项目…...
Python实现WYY音乐下载
一、需求背景 WYY音乐作为国内主流音乐平台,其歌曲资源丰富但下载接口存在多重加密保护。本文将通过Python结合JS逆向技术,解析其核心加密逻辑,实现免费歌曲的下载功能。 二、技术难点分析 1. 接口加密机制 通过抓包分析可知,网易云核心接口使用两次加密: 第一次:获取…...
Java基础面试题学习
转换成自已的语言来回答,来源小林coding、沉默王二以及其它资源和自已改编。 1、概念 1、说一下Java的特点 我认为Java有很多特点 首先是平台无关性:Java可以实现一次编译到处运行,因为Java的编译器将源代码编译成字节码,使得该…...
【笔记】深度学习模型训练的 GPU 内存优化之旅:重计算篇
开设此专题,目的一是梳理文献,目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化,所以最初思考的专题名称是“显存突围:深度学习模型训练的 GPU 内存优化之旅”,英文缩写是 “MLSys_GPU_Memory_Opt”。…...
AI革命!蓝耘携手海螺AI视频,打造智能化视频新纪元
AI革命!蓝耘携手海螺AI视频,打造智能化视频新纪元 前言 在这个信息爆炸的时代,视频已经成为我们获取信息、学习新知识的重要方式。而随着人工智能(AI)技术的快速发展,AI与视频内容的结合为我们带来了全新的…...
Django+celery+flower
Djangoceleryflower Django的定时任务及可视化监控Django Django的定时任务及可视化监控 Django的定时任务,以及可视化监控。 Django Django; 首先在python中新建虚拟环境并激活 pip install virtualenv python -m venv venv source venv/bin/activa…...
MapReduce处理数据流程
(一)Shuffle MapReduce中的Shuffle过程指的是在Map方法执行后、Reduce方法执行前对数据进行分区排序的阶段 (二)处理流程 1. 首先MapReduce会将处理的数据集划分成多个split,split划分是逻辑上进行划分,…...
基于springboot的教务系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 这些年随着Internet的迅速发展,我们国家和世界都已经进入了互联网大数据时代,计算机网络已经成为了整个社会以及经济发展的巨大动能,各个高校的教务工作成为了学校管理事务的重要目标和任务,因此运用互联网技术来提高教务的…...
潮流霓虹酸性渐变液体流体扭曲颗粒边缘模糊JPG背景图片设计素材 Organic Textures Gradients Collection
这个系列将液体运动、霓虹灯和热浪扭曲提炼成一组有机纹理。渐变像水面上的油一样荡漾,模糊了科幻小说与自然之间的界限。这种未来主义的边缘,加上近乎生物的感觉,与正在进行的抽象数字超现实主义浪潮完美同步。 这套具有 20 种原始纹理和 20…...
现代时尚标签海报包装网站设计几何风PSAI无衬线英文字体安装包 Matahari Sans Font Family
Matahari(英语:Sun)是生命的动力源泉。与日常生活的其他部分协同作用的力量和能量的象征。这是我们人类需要的最基本的东西之一,就像交流一样。就像 Matahari 本身一样,文字的力量足以维持生计。 参考怪诞字体并受到埃…...
