参考b站叩丁狼总结:完整版Kubernetes(K8S)全套入门+微服务实战项目,带你一站式深入掌握K8S核心能力

在master节点执行

kubectl create deployment nginx --image=nginxkubectl expose deployment nginx --port=80 --type=NodePort

1. kubectl create deployment nginx --image=nginx

命令解析
kubectl create deployment nginx --image=nginx
  • kubectl:Kubernetes 的命令行工具,用于管理 Kubernetes 集群。
  • create:创建一个新的资源。
  • deployment:指定要创建的资源类型为 DeploymentDeployment 是 Kubernetes 中的一种控制器,用于管理无状态应用的 Pod 的生命周期,确保指定数量的 Pod 始终处于运行状态。
  • nginx:这是 Deployment 的名称,你可以根据需要自定义。
  • --image=nginx:指定 Pod 中容器使用的镜像。这里使用的是官方的 nginx 镜像。
具体行为
  1. 创建一个 Deployment

    • Kubernetes 会创建一个名为 nginxDeployment
    • 这个 Deployment 会启动一个 Pod,该 Pod 中运行一个容器,使用 nginx 镜像。
    • 默认情况下,Deployment 会确保始终有一个 Pod 在运行。
  2. Pod 的配置

    • Pod 的名称会自动生成,类似于 nginx-<随机字符串>
    • Pod 中的容器会监听默认的 nginx 端口(通常是 80)。
  3. 结果

    • 你可以通过以下命令查看创建的 Deployment 和 Pod:
      kubectl get deployment
      kubectl get pods
      

2. kubectl expose deployment nginx --port=80 --type=NodePort

命令解析
kubectl expose deployment nginx --port=80 --type=NodePort
  • kubectl:Kubernetes 的命令行工具。
  • expose:将现有的资源(如 DeploymentPod)暴露为一个服务。
  • deployment nginx:指定要暴露的资源是名为 nginxDeployment
  • --port=80:指定 Pod 内部容器监听的端口。这里指定为 80,因为 nginx 容器默认监听 80 端口。
  • --type=NodePort:指定服务的类型为 NodePortNodePort 类型的服务会在集群的每个节点上开放一个端口(通常是高端口,如 30000-32767),并将请求转发到 Pod 的指定端口。
具体行为
  1. 创建一个 Service

    • Kubernetes 会创建一个名为 nginxService,类型为 NodePort
    • 这个 Service 会将集群中某个节点的某个端口(NodePort)映射到 Pod 的 80 端口。
  2. 端口映射

    • Kubernetes 会自动分配一个 NodePort(通常是 30000-32767 范围内的端口)。
    • 你可以通过以下命令查看分配的 NodePort
      kubectl get service nginx
      
    • 输出示例:
      NAME      TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
      nginx     NodePort   10.106.223.10   <none>        80:31570/TCP   11m
      
      在这个例子中,NodePort 被分配为 31570
  3. 访问服务

    • 你可以通过集群中任何一个节点的 IP 地址加上 NodePort 来访问服务。例如:
      curl <节点IP>:31570
      
    • Kubernetes 的网络代理(如 kube-proxy)会捕获这个请求,并将其转发到某个运行 nginx 的 Pod 的 80 端口。

总结

  1. kubectl create deployment nginx --image=nginx

    • 创建一个名为 nginxDeployment,启动一个 Pod,Pod 中运行一个使用 nginx 镜像的容器。
  2. kubectl expose deployment nginx --port=80 --type=NodePort

    • nginx Deployment 暴露为一个 NodePort 类型的服务。
    • 创建一个 Service,将集群中某个节点的某个端口(NodePort)映射到 Pod 的 80 端口。
    • 你可以通过集群中任何一个节点的 IP 地址加上 NodePort 来访问服务。

验证

可以通过以下命令验证整个过程:

  1. 查看 Deployment 和 Pod

    kubectl get deployment
    kubectl get pods
    
  2. 查看 Service

    kubectl get service nginx
    
  3. 访问服务

    curl <节点IP>:<NodePort>
    

  • 可以通过kubectl get svc,pod观察nginx状态:
chenaws@k8smaster:~$ kubectl get svc,pod
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP        15d
service/myhello-svc   NodePort    10.110.50.145   <none>        80:30000/TCP   15d
service/nginx         NodePort    10.106.223.10   <none>        80:31570/TCP   49mNAME                        READY   STATUS    RESTARTS      AGE
pod/myhello-rc-5j2l5        1/1     Running   5 (72m ago)   15d
pod/myhello-rc-989q7        1/1     Running   5 (72m ago)   15d
pod/myhello-rc-bc8pz        1/1     Running   5 (72m ago)   15d
pod/myhello-rc-cv58k        1/1     Running   5 (72m ago)   15d
pod/myhello-rc-r8lgx        1/1     Running   5 (72m ago)   15d
pod/nginx-8f458dc5b-vt2sd   1/1     Running   0             50m
chenaws@k8smaster:~$ 

实际使用时如果发现nginx节点服务迟迟没有running,可以通过describe观察pod状态

  • 使用:kubectl describe pod nginx-8f458dc5b-vt2sd
    在这里插入图片描述
    主要查看Events是否有报错,如果卡在pulling,可以尝试到对应节点重新docker pull nginx

  • 如何查看pod被分配到哪个节点?
    在这里插入图片描述


后续可以在集群任意节点访问集群内任意节点ip的31570端口来访问133这个节点的nginx服务

为什么是31570端口?

在这里插入图片描述
在这里插入图片描述

1. 端口映射关系

在 Kubernetes 中,NodePort 类型的服务会将集群中的某个端口(通常是高端口,如 30000-32767)映射到 Pod 的内部端口。具体来说:

  • nginx 服务
    • ClusterIP10.106.223.10(仅在集群内部可访问)
    • NodePort31570(在集群的每个节点上都可以通过这个端口访问服务)
    • 目标端口80(Pod 内部的 Nginx 服务监听的端口)

这意味着,无论你访问集群中哪个节点的 31570 端口,Kubernetes 都会将请求转发到某个运行 Nginx 的 Pod 的 80 端口。

2. 为什么可以访问三个 IP 地址

我的 Kubernetes 集群有三个节点(192.168.132.131192.168.132.132192.168.132.133)。因为 nginx 服务的类型是 NodePort,所以可以通过任何一个节点的 31570 端口访问 Nginx 服务。

3. 访问这个端口时发生了什么

当通过 curl 192.168.132.131:31570 发起请求时:

  1. 请求到达节点:请求发送到集群中的一个节点(比如 192.168.132.131)的 31570 端口。
  2. Kubernetes 服务代理:Kubernetes 的网络代理(如 kube-proxy)会捕获这个请求,并根据服务的定义(nginx 服务)将请求转发到192.168.132.133这个运行 Nginx 的 Pod。
  3. Pod 处理请求:请求被转发到 Nginx Pod 的 80 端口,由 Nginx 服务器处理。
  4. 返回响应:Nginx 服务器处理完请求后,将响应返回给 kube-proxy,kube-proxy 再将响应返回给客户端。

4. 验证和总结

  • 端口映射31570 端口是 Kubernetes 为 nginx 服务分配的外部访问端口,它会将请求转发到 Pod 的 80 端口。
  • 多节点访问:因为 NodePort 服务在集群的每个节点上都暴露了相同的端口,所以你可以通过任何一个节点的 IP 地址加上 31570 端口来访问服务。
  • 负载均衡:Kubernetes 会自动选择一个运行 Nginx 的 Pod 来处理请求,实现了简单的负载均衡。

如何实现work节点使用kubectl

  • 刚配置完k8s时,如果在work节点执行,会报错
    在这里插入图片描述
  • 我们可以通过执行以下命令实现work使用kubectl
# 1.将master节点中/etc/kubernetes/admin.conf拷贝到要运行的work节点服务器,/etc/kubernetes目录中,使用:
# 注意 chenaws是要拷贝的机器的用户名,@后是主机名
scp /etc/kubernetes/admin.conf chenaws@k8snode2:/etc/kubernetes# 2.在对应拷贝到的服务器上配置环境变量:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
  • 使用scp /etc/kubernetes/admin.conf chenaws@k8snode2:/etc/kubernetes传输时,要求要在root模式,

  • 也可以用下面这条可以传到不受限制的用户目录

  • sudo scp /etc/kubernetes/admin.conf chenaws@k8snode2:~

  • 当然后续也要把这个文件移到work的/etc/kubernetes/

  • sudo mv ~/admin.conf /etc/kubernetes/
    在这里插入图片描述
    出现这个直接yes
    在这里插入图片描述

  • 然后继续配置环境变量即可
    在这里插入图片描述

  • 成功!


为什么需要拷贝 admin.conf
  • 默认情况下,work节点使用kubectl 会查找 ~/.kube/config 文件作为配置文件。
  • 我们可以通过比较一开始的 master 节点和 worker 节点的 ~/.kube/config文件配置来找到答案:
    在这里插入图片描述
    在这里插入图片描述
  • 可以看到,worker节点根本就没有指明配置,所以使用不了 kubectl,那么我们的解决方案就是把master的配置直接复制到work上去
为什么需要配置环境变量?
  • 如果你将 admin.conf 拷贝到了 /etc/kubernetes 目录下,需要通过设置环境变量 KUBECONFIG 来告诉 kubectl 使用这个新的配置文件路径。
  • 配置环境变量后,kubectl 就可以正确加载 admin.conf 文件,从而访问 Kubernetes 集群。
为什么不用 cp
  • cp 是本地拷贝命令,只能在同一台主机上使用。
  • scp 是跨主机拷贝命令,用于在不同主机之间传输文件。因为 admin.conf 文件在 master 节点上,而你需要将它拷贝到工作节点上,所以必须使用 scp
命令解析
scp /etc/kubernetes/admin.conf root@k8snode2:/etc/kubernetes
  • scp:这是一个安全拷贝命令,用于在不同主机之间拷贝文件。它基于 SSH 协议,因此传输过程是加密的。
  • /etc/kubernetes/admin.conf:这是 Kubernetes 集群的管理员配置文件,包含了访问集群所需的认证信息(如证书、令牌等)。
  • root@k8snode2:目标主机的用户名和主机名。这里假设目标主机的用户名是 root,主机名是 k8snode2
  • /etc/kubernetes:目标路径,将文件拷贝到目标主机的 /etc/kubernetes 目录下。
命令解析
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
  • echo:用于输出字符串。
  • export KUBECONFIG=/etc/kubernetes/admin.conf:设置环境变量 KUBECONFIG,指定 kubectl 使用的配置文件路径。
  • >> ~/.bash_profile:将输出追加到 ~/.bash_profile 文件中。~/.bash_profile 是用户登录时加载的配置文件之一,用于设置环境变量。
  • source ~/.bash_profile:重新加载 ~/.bash_profile 文件,使刚刚设置的环境变量生效。

总结

  1. 拷贝 admin.conf

    • 使用 scpadmin.conf 从 master 节点拷贝到工作节点的 /etc/kubernetes 目录。
    • 这样可以让工作节点上的 kubectl 使用这个配置文件访问集群。
  2. 配置环境变量

    • 设置 KUBECONFIG 环境变量,指定 kubectl 使用的配置文件路径。
    • 通过 source ~/.bash_profile 使环境变量生效。

https://github.com/0voice

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

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

相关文章

20250704-基于强化学习在云计算环境中的虚拟机资源调度研究

基于强化学习在云计算环境中的虚拟机资源调度研究 随着云计算规模的持续扩大&#xff0c;数据中心虚拟机资源调度面临动态负载、异构资源适配及多目标优化等挑战。传统启发式算法在复杂场景下易陷入局部最优&#xff0c;而深度强化学习&#xff08;DRL&#xff09;凭借序贯决策…

day 33打卡

day 21 常见的降维算法 # 先运行之前预处理好的代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings(ignore)# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] plt.rcParam…

sec(x)积分推导

在MATLAB中绘制 sec⁡(x)、cos(x) 和 ln⁡∣sec⁡(x)tan⁡(x)∣的函数图像&#xff0c;需要特别注意 sec⁡(x) 在 cos⁡(x)0&#xff08;即 xπ/2kπ&#xff09;处的奇点。&#xff08;deepseek生成代码&#xff09;% 定义x范围&#xff08;-2π到2π&#xff09;&#xff0c;…

gpt面试题

vue面试题 &#x1f4a1; 一、响应式系统相关 ❓1. Vue 3 的响应式系统是如何实现的&#xff1f;和 Vue 2 有何本质区别&#xff1f; 答案&#xff1a; Vue 3 使用 Proxy 实现响应式&#xff08;位于 vue/reactivity 模块&#xff09;&#xff0c;替代 Vue 2 的 Object.defineP…

【基于OpenCV的图像处理】图像预处理之图像色彩空间转换以及图像灰度化处理

目录 零、写在前面的话 一、图像色彩空间转换 1.1 RGB颜色空间 1.1.1 RGB颜色空间概念 1.1.2 RGB颜色模型​编辑 1.1.3 关于颜色加法 1.1.4 颜色加权加法 1.2 HSV颜色空间 1.2.1 HSV颜色空间概念 1.2.2 HSV颜色模型 1.2.3 应用意义 1.3 颜色转换 1.3.1 转换方法 …

Java TCP 通信详解:从基础到实战,彻底掌握面向连接的网络编程

作为一名 Java 开发工程师&#xff0c;你一定在实际开发中遇到过需要建立稳定连接、可靠传输、有序通信等场景。这时&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff09; 通信就成为你必须掌握的重要技能之一。TCP 是一种面向连接、可靠、基于字节流的传输协…

HTML5 网页游戏设计开发——1、HTML基础

前言 互联网上的应用程序被称为Web程序&#xff0c;Web引用用程序是用Web文档&#xff08;网页&#xff09;累表现用户界面&#xff0c;而Web文档都遵守HTML格式。HTML5是最新的HTML标准。之前的版本HTML4.01于1999年发布&#xff0c;小20年过去了&#xff0c;互联网已经发声了…

opencv圖片標注

功能使用python opencv, 將文字信息標注在圖片中同一張圖片中涉及多次標注文字大小為標注框的0.3倍使用多綫程運行import cv2 import threading import numpy as npdef draw_annotations(item, annotations):"""在图片上绘制标注框和文本annotations: 标注列表…

矩阵SVD分解计算

对于有数学库的时候,进行矩阵相关计算还是不复杂,但是没有数学库就很麻烦,利用算法实现了矩阵奇异值分解。 void decompose(const std::vector<std::vector<double>>& A, std::vector<std::vector<double>>& U, std::vector<dou…

Flutter基础(前端教程①⑦-Column竖直-Row水平-Warp包裹-Stack堆叠)

MainAxisAlignment 是一个枚举类&#xff0c;用于控制主轴&#xff08;Main Axis&#xff09; 方向上子组件的排列和对齐方式。MainAxisAlignment 的常用取值及效果&#xff1a;MainAxisAlignment.start子组件沿主轴的起点对齐&#xff08;Row 左对齐&#xff0c;Column 顶部对…

构建智能视频中枢--多路RTSP转RTMP推送模块在轨道交通与工业应用中的技术方案探究

1️⃣ 行业背景与技术需求&#x1f688; 轨道交通行业对视频监控的深度依赖在现代城市轨道交通系统中&#xff0c;视频监控已不仅仅是安防的一部分&#xff0c;更是贯穿于运营管理、车辆调度、应急指挥和安全保障的核心技术手段。列车车载监控 ——列车上普遍部署多路高清摄像头…

【Android Studio 2025 汉化教程】

废话不多说&#xff0c;直接上干货。 前提&#xff1a;JeBrains系列2025版已经集成中文插件&#xff0c;用户不需下载&#xff0c;只要设置下即可&#xff0c;但Android Studio并不内置也不提供汉化插件。需要工具&#xff1a; 1.IDEA&#xff08;其他JeBrains系列也可以&#…

网络安全初级(前端页面的编写分析)

源代码index.html<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>登录页面</title><!--…

RAG项目实战:LangChain 0.3集成 Milvus 2.5向量数据库,构建大模型智能应用

项目背景 最近&#xff0c;有时间&#xff0c;想着动手实战一下&#xff0c;从0到1搭建一个 RAG 系统&#xff0c;也是想通过实战的方式来更进一步学习 RAG。因此&#xff0c;就定下了以项目实战为主&#xff0c;书籍为辅的执行方式。&#xff08;书籍是黄佳老师著的《RAG 实战…

docker build 和compose 学习笔记

目录 docker build 笔记 1. 路径解析 2. 关键注意事项 2. docker compose up -d 核心区别对比 常见工作流 补充说明 1. 功能区别 2. 协作关系 场景 1&#xff1a;Compose 自动调用 Build 场景 2&#xff1a;先 Build 后 Compose 3. 关键区别 4. 为什么需要协作&…

Java学习第六十六部分——分布式系统架构

目录 一、前言提要 二、核心目标 三、核心组件与技术 1. 服务拆分与通信 2. 服务注册与发现 3. 配置中心 4. 负载均衡 5. 熔断、降级与限流 6. API 网关 7. 分布式数据管理 8. 分布式追踪与监控 9. 容器化与编排 四、典型Java分布式技术栈组合 五、关键…

Pycharm的Terminal打开后默认是python环境

Pycharm的Terminal打开后默认是python环境解决方案Pycharm的Terminal打开后默认是python环境&#xff0c;无法执行pip等命令&#xff0c;也没办法退出 解决方案 点击Settings -> Tools -> Terminal 可以看到当前默认打开的是torch19py38环境中的python.exe&#xff08;…

LVS——nat模式

一、搭建nat模式下LVS的实验环境1.创建四台虚拟机client——客户端&#xff1a;192.168.134.111/24&#xff08;nat模式&#xff09;LVS——调度器【双网卡】&#xff1a;192.168.134.112/24&#xff08;nat模式&#xff09;、172.25.254.111/24&#xff08;仅主机模式&#xf…

ElasticSearch是什么

ElasticSearch是什么 ElasticSearch 是一个基于 Apache Lucene 的开源分布式搜索引擎&#xff0c;用于全文搜索、日志分析、实时数据分析等场景。它以高性能、分布式架构和易用性著称&#xff0c;支持 JSON 格式的数据存储和查询&#xff0c;广泛应用于日志监控、搜索服务、企业…

linxu CentOS 配置nginx

1、准备要发布的文件夹sudo mkdir -p /var/www/myfiles # 创建文件夹&#xff08;如果不存在&#xff09; sudo chmod -R 755 /var/www/myfiles # 设置权限&#xff08;确保 Nginx 可以读取&#xff09; sudo chown -R nginx:nginx /var/www/myfiles # 修改所有者&#xff0…