kubernetes高级实战

news2025/3/28 7:00:09

一、模拟企业环境进行一个实战部署

[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 的调度行为,满足不同的部署需求。

如果还有其他问题,欢迎继续提问!

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

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

相关文章

【Java】——程序逻辑控制(构建稳健代码的基石)

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;【Java】内容概括 文章目录&#xff1a; 一.顺序结构二.分支结构1.if 语句1.1 语法格式11.2 语法格式21.3 语法格式3 …

卫星互联网智慧杆:开启智能城市新时代​

哇哦&#xff01;在当下这个数字化浪潮正以雷霆万钧之势席卷全球的超酷时代&#xff0c;智慧城市建设已然成为世界各国你追我赶、竞相发力的核心重点领域啦&#xff01;而咱们的卫星互联网智慧杆&#xff0c;作为一项完美融合了卫星通信与物联网顶尖技术的创新结晶&#xff0c;…

Qt-QChart实现折线图

一、介绍场景 动态查看数据变化&#xff0c;或者了解数据发展趋势&#xff0c;让数据可以形象直观展现出来&#xff0c;这里推荐使用折线图的方式展现&#xff0c;本文抛砖引玉&#xff0c;简单实现一个实例&#xff0c;效果图如下&#xff1a; 二、实现步骤 1、charts组件 …

取消Win10锁屏界面上显示的天气、市场和广告的操作

要取消Win10锁屏界面上显示的天气、市场和广告&#xff0c;您可以按照以下步骤操作&#xff1a; 方法一&#xff1a;更改锁屏界面设置 打开“设置”&#xff1a; 点击“开始”菜单&#xff0c;然后点击齿轮状的“设置”图标。 进入“个性化”&#xff1a; 在“设置”窗口中&a…

从TouchDriver Pro到Touchdriver G1,Weart触觉手套全系解析:XR交互的“真实触感”如何实现?

Weart旗下的Touchdriver Pro触觉手套和Touchdriver G1触觉手套&#xff0c;凭借其技术创新&#xff0c;为用户带来了全新的触觉体验。Touchdriver Pro触觉手套通过多模态触觉反馈技术&#xff0c;提供力反馈、纹理渲染和温度提示&#xff0c;让用户在虚拟环境中感受到真实的触觉…

排序算法实现:插入排序与希尔排序

目录 一、引言 二、代码整体结构 三、宏定义与头文件 四、插入排序函数&#xff08;Insertsort&#xff09; 函数作用 代码要点分析 五、希尔排序函数&#xff08;ShellSort&#xff09; 函数作用 代码要点分析 六、打印数组函数&#xff08;PrintSort&#x…

UDP协议原理

UDP协议原理 本篇介绍 在前面使用UDP编程时已经基本了解了UDP的工作模式&#xff0c;也知道了UDP有三个特点&#xff1a; 无连接不可靠面向数据报 但是当时并没有具体谈论为什么UDP有以上三个特点&#xff0c;基于这个原因&#xff0c;本篇就会针对这三个原因进行介绍 UDP…

EtherCAT转Modbus网关如何在倍福plc组态快速配置

EtherCAT转Modbus网关如何在倍福plc组态快速配置 在工业控制领域&#xff0c;EtherCAT和Modbus是两种常见的总线通信协议。EtherCAT以其高速的数据传输和灵活的网络配置被广泛应用于高性能自动化控制系统中&#xff0c;而Modbus则因其简单、稳定且兼容性强而被许多设备所支持。…

DooTask在Linux的离线部署教程

DooTask在Linux的离线部署教程 下载安装包 从网盘中将安装包下载到本地&#xff0c;下载地址 通过网盘分享的文件&#xff1a;DooTask项目管理工具 链接: https://pan.baidu.com/s/1hGmLXonT4c8hLiDP1QBr8w?pwdgdp6 提取码: gdp6 通过网盘分享的文件&#xff1a;DooTask项目…

Python实现WYY音乐下载

一、需求背景 WYY音乐作为国内主流音乐平台,其歌曲资源丰富但下载接口存在多重加密保护。本文将通过Python结合JS逆向技术,解析其核心加密逻辑,实现免费歌曲的下载功能。 二、技术难点分析 1. 接口加密机制 通过抓包分析可知,网易云核心接口使用两次加密: 第一次:获取…

Java基础面试题学习

转换成自已的语言来回答&#xff0c;来源小林coding、沉默王二以及其它资源和自已改编。 1、概念 1、说一下Java的特点 我认为Java有很多特点 首先是平台无关性&#xff1a;Java可以实现一次编译到处运行&#xff0c;因为Java的编译器将源代码编译成字节码&#xff0c;使得该…

【笔记】深度学习模型训练的 GPU 内存优化之旅:重计算篇

开设此专题&#xff0c;目的一是梳理文献&#xff0c;目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化&#xff0c;所以最初思考的专题名称是“显存突围&#xff1a;深度学习模型训练的 GPU 内存优化之旅”&#xff0c;英文缩写是 “MLSys_GPU_Memory_Opt”。…

AI革命!蓝耘携手海螺AI视频,打造智能化视频新纪元

AI革命&#xff01;蓝耘携手海螺AI视频&#xff0c;打造智能化视频新纪元 前言 在这个信息爆炸的时代&#xff0c;视频已经成为我们获取信息、学习新知识的重要方式。而随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI与视频内容的结合为我们带来了全新的…

Django+celery+flower

Djangoceleryflower Django的定时任务及可视化监控Django Django的定时任务及可视化监控 Django的定时任务&#xff0c;以及可视化监控。 Django Django&#xff1b; 首先在python中新建虚拟环境并激活 pip install virtualenv python -m venv venv source venv/bin/activa…

MapReduce处理数据流程

&#xff08;一&#xff09;Shuffle MapReduce中的Shuffle过程指的是在Map方法执行后、Reduce方法执行前对数据进行分区排序的阶段 &#xff08;二&#xff09;处理流程 1. 首先MapReduce会将处理的数据集划分成多个split&#xff0c;split划分是逻辑上进行划分&#xff0c;…

基于springboot的教务系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 这些年随着Internet的迅速发展&#xff0c;我们国家和世界都已经进入了互联网大数据时代&#xff0c;计算机网络已经成为了整个社会以及经济发展的巨大动能&#xff0c;各个高校的教务工作成为了学校管理事务的重要目标和任务&#xff0c;因此运用互联网技术来提高教务的…

潮流霓虹酸性渐变液体流体扭曲颗粒边缘模糊JPG背景图片设计素材 Organic Textures Gradients Collection

这个系列将液体运动、霓虹灯和热浪扭曲提炼成一组有机纹理。渐变像水面上的油一样荡漾&#xff0c;模糊了科幻小说与自然之间的界限。这种未来主义的边缘&#xff0c;加上近乎生物的感觉&#xff0c;与正在进行的抽象数字超现实主义浪潮完美同步。 这套具有 20 种原始纹理和 20…

现代时尚标签海报包装网站设计几何风PSAI无衬线英文字体安装包 Matahari Sans Font Family

Matahari&#xff08;英语&#xff1a;Sun&#xff09;是生命的动力源泉。与日常生活的其他部分协同作用的力量和能量的象征。这是我们人类需要的最基本的东西之一&#xff0c;就像交流一样。就像 Matahari 本身一样&#xff0c;文字的力量足以维持生计。 参考怪诞字体并受到埃…

Spring MVC响应数据

handler方法分析 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为handler* TODO: handler需要使用RequestMapping/GetMapping系列,声明路径,在HandlerMapping中注册,供DS查找!* TODO: handler作用总结:* 1.接收请求参数(param,json,pathVariable,共享域等…