Kubernetes学习笔记13

K8s集群核心概念:Service

我们在之前的学习过程中遇到一个问题,就是如果Pod被误删除,那么Controller重新拉起一个新的Pod时,我们发现PodIP地址是变化着的,我们访问必须更新IP地址。

这样对于大量的Pod运行应用来说,我们对Pod完全无法控制的,因此在K8s集群中我们引入另一个概念Service。

学习目标:

了解Service是什么?

了解Service作用

了解Service类型

了解Service参数

掌握Service创建方法

掌握Service删除方法

课程内容:

Service介绍:

不是实体服务,实体服务有自己的守护进程、有自己运行的配置文件,有自己运行的数据文件。

是一条iptables或者ipvs的转发规则。

Service仅仅是一个服务。

Service作用:

通过Service为Pod客户端提供访问Pod方法,即客户端访问Pod入口。

Service通过Pod标签与Pod进行关联的。

说明:

Pod是有自己的IP地址。PodIP地址是经常发生变化。

Service的IP地址是很少发生变化的。用户通过Service来访问Pod。通过域名进行访问。

给Pod一个标签,Service通过selector选择器来选择标签,就进行了关联。

Service类型:

ClusterIP:

默认:分配一个集群内部可以访问的虚拟IP。但是这只能在集群内的主机访问。

NodePort:

在每个Node上分配一个端口作为外部访问入口。

Loadbalance负载均衡:

工作在特定Cloud Provider上,例如:Google CloudPod、AWS、OpenStack,在云平台上。

通过这种访问来访问。

ExternalName:

表示把集群外部的服务引入到集群内部来,即实现了集群内部Pod和集群外部的服务进行通信。

Service参数:

port:访问service使用的端口

targetPort: Pod中容器使用的端口

NodePort:通过Node实现集群外网用户访问k8s集群内service(随机端口号:30000~32767)

如果手动指定应该在这个范围之内。

service创建:

Service的创建在工作中有两种方式:命令行创建;通过资源清单配置文件创建

1)通过kubectl命令行创建:

默认创建Service为ClusterIP类型:

创建Deployment类型应用:

[root@master1 ~]# kubectl create deployment nginx-app --image=nginx:latest --replicas=1
deployment.apps/nginx-app created

验证Deployment类型应用创建情况:

[root@master1 ~]# kubectl get deployment.apps
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
nginx-app   1/1     1            1           2m13s

创建Service与Deployment类型应用关联:

创建Service:

[root@master1 ~]# kubectl expose deployment.apps nginx-app --type=ClusterIP --target-port=80 --port=80
service/nginx-app exposed

说明:

expose:创建service,把pod暴露出去的意思,就是service。

deployment.apps 控制器类型

nginx-app:应用名称  也是service的名称

--type=ClusterIP: 指定Service类型,默认就是clusterIP。

--target-port=80: 暴露Pod容器当中的端口

--port=80: 指定service所对应的端口

访问Service以实现访问Pod目的:

[root@master1 ~]# kubectl get service
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        3d3h
nginx        NodePort    10.101.138.1    <none>        80:30831/TCP   3d2h
nginx-app    ClusterIP   10.96.178.232   <none>        80/TCP         2m38s


[root@master1 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        3d3h
nginx        NodePort    10.101.138.1    <none>        80:30831/TCP   3d2h
nginx-app    ClusterIP   10.96.178.232   <none>        80/TCP         29m


[root@master1 ~]# curl http://10.96.178.232
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

[root@master1 ~]# kubectl get endpoints
NAME         ENDPOINTS             AGE
kubernetes   192.168.17.146:6443   3d3h
nginx        <none>                3d2h
nginx-app    10.244.189.72:80      31m

说明:

endpoints:端点

10.244.189.72:80,就是PodIP地址+Pod端口。

 通过YAML资源清单文件创建:

编写用于创建Service资源清单文件:

[root@master1 ~]# cat 04_create_deployment_service_clusterip.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app4
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx-app4
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-app4
spec:
  type: ClusterIP
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

说明:selector选择器的作用。

应用Service资源清单文件创建应用:

[root@master1 ~]# kubectl apply -f 04_create_deployment_service_clusterip.yaml
deployment.apps/nginx-app4 created
service/nginx-app4 created

 

[root@master1 ~]# kubectl get service
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        3d3h
nginx        NodePort    10.101.138.1    <none>        80:30831/TCP   3d3h
nginx-app    ClusterIP   10.96.178.232   <none>        80/TCP         51m
nginx-app4   ClusterIP   10.100.97.203   <none>        80/TCP         68s
[root@master1 ~]# curl http://10.100.97.203:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

 endpoints端点对应的是两台容器。

[root@master1 ~]# kubectl get endpoints
NAME         ENDPOINTS                            AGE
kubernetes   192.168.17.146:6443                  3d3h
nginx        10.244.189.73:80,10.244.235.136:80   3d3h
nginx-app    10.244.189.72:80                     52m
nginx-app4   10.244.189.73:80,10.244.235.136:80   3m6s

Services还具备一个负载均衡的功能。

[root@master1 ~]# kubectl exec -it nginx-app4-5b9b79dc66-8hrlp bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx-app4-5b9b79dc66-8hrlp:/# cd /usr/share/nginx/html
root@nginx-app4-5b9b79dc66-8hrlp:/usr/share/nginx/html# ls
50x.html  index.html
root@nginx-app4-5b9b79dc66-8hrlp:/usr/share/nginx/html# echo "nginx-app4-pod2" > index.html
root@nginx-app4-5b9b79dc66-8hrlp:/usr/share/nginx/html# cat index.html
nginx-app4-pod2
root@nginx-app4-5b9b79dc66-8hrlp:/usr/share/nginx/html# exit
exit



root@nginx-app4-5b9b79dc66-nzpdx:/usr/share/nginx/html# echo "nginx-app4-pod1" > index.html
root@nginx-app4-5b9b79dc66-nzpdx:/usr/share/nginx/html# cat index.html
nginx-app4-pod1
root@nginx-app4-5b9b79dc66-nzpdx:/usr/share/nginx/html# exit
exit


[root@master1 ~]# kubectl get service
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        3d4h
nginx        NodePort    10.101.138.1    <none>        80:30831/TCP   3d3h
nginx-app    ClusterIP   10.96.178.232   <none>        80/TCP         71m
nginx-app4   ClusterIP   10.100.97.203   <none>        80/TCP         21m
[root@master1 ~]#
[root@master1 ~]#
[root@master1 ~]#
[root@master1 ~]# curl http://10.100.97.203:80
nginx-app4-pod1
[root@master1 ~]# curl http://10.100.97.203:80
nginx-app4-pod2
[root@master1 ~]# curl http://10.100.97.203:80
nginx-app4-pod1
[root@master1 ~]# curl http://10.100.97.203:80
nginx-app4-pod2

我们连续curl,可以看到Service具有负载均衡的功能。K8s功能非常强大。

负载均衡具有权重、ip_hash等,我们再继续研究。

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

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

相关文章

Linux双网卡默认路由优先级设置不正确,导致网络不通问题定位

问题描述 RHEL9 双网卡环境&#xff0c;两个网卡配置如下&#xff1a;(eth0 走内网&#xff0c;eth1 走外网) eth0 192.168.10.20/24 网关: 192.168.10.254 eth1 10.206.216.92/24 网关: 10.206.216.254配置完成后&#xff0c;curl https://www.baidu.com访问百度失…

鸿蒙HarmonyOS开发实战:【分布式音乐播放】

介绍 本示例使用fileIo获取指定音频文件&#xff0c;并通过AudioPlayer完成了音乐的播放完成了基本的音乐播放、暂停、上一曲、下一曲功能&#xff1b;并使用DeviceManager完成了分布式设备列表的显示和分布式能力完成了音乐播放状态的跨设备分享。 本示例用到了与用户进行交…

数据结构初阶:二叉树

树概念及结构 树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 有一个特殊的结点&a…

一体式I/O模块与RS485串口联动,实现工业网络无缝对接

在现代工业自动化领域中&#xff0c;一体化I/O模块和RS485串口的联动应用已经成为实现工业设备高效、稳定通信的关键技术手段之一。这种联动机制能够有效地将各种现场设备的数据实时、准确地传输到上位机系统&#xff0c;从而实现工业网络的无缝对接。 一体化I/O模块&#xff…

tailwindcss+vue3+vite+preline项目搭建

最近原子化样式比较火&#xff0c;用了一下确实还不错&#xff0c;也确实是用一些标准的样式能够使网页看起来比较统一&#xff0c;而且能够极大的减轻起名字的压力&#xff0c;有利有弊&#xff0c;就不一一细说了。 之前开发都是习惯于使用vitevue3来开发的&#xff0c;此次搭…

ClickHouse--17--argMin() 和argMax()函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 argMin() 和argMax()函数业务场景使用案例1.准备表和数据&#xff1a;业务场景一&#xff1a;查看salary 最高和最小的user业务场景二&#xff1a;根据更新时间获取…

C++11 数据结构0 什么是 “数据结构“?数据,数据对象,数据元素,数据项 概念。算法的基本概念 和 算法的度量,大O表示法,空间换时间的代码

数据&#xff1a; 是能输入计算机且能被计算机处理的各种符号的集合。数值型的数据&#xff1a;整数和实数。非数值型的数据&#xff1a;文字、图像、图形、声音等。 数据对象&#xff1a; 性质相同的 "数据元素" 的集合 例如一个 int arr[10], Teacher tea[3]; 数…

C++设计模式:单例模式(十)

1、单例设计模式 单例设计模式&#xff0c;使用的频率比较高&#xff0c;整个项目中某个特殊的类对象只能创建一个 并且该类只对外暴露一个public方法用来获得这个对象。 单例设计模式又分懒汉式和饿汉式&#xff0c;同时对于懒汉式在多线程并发的情况下存在线程安全问题 饿汉…

每日OJ题_BFS解决FloodFill②_力扣200. 岛屿数量

目录 力扣200. 岛屿数量 解析代码 力扣200. 岛屿数量 200. 岛屿数量 难度 中等 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方…

layui中对table表格内容鼠标移入显示 tips内容

要在Layui中的表格中实现鼠标移入显示Tips&#xff0c;你可以使用Layui的事件监听和Tips组件。 有两种实现方式&#xff01; 第一种是&#xff0c;通过自定义鼠标事件显示 tips。在渲染 table 时&#xff0c;对 filed 进行重构&#xff0c;增加相应的选择器标识&#xff0c;一…

OneForAll安装使用

OneForAll简介 OneForAll是一款功能强大的子域收集工具 原项目地址&#xff1a;GitHub - shmilylty/OneForAll: OneForAll是一款功能强大的子域收集工具 gitee项目地址&#xff1a;OneForAll: OneForAll是一款功能强大的子域收集工具 # 安装Python Windows系统安装python参…

Excel文本内容抽取工具[Python]

#创作灵感# 一堆Excel文件&#xff0c;每个打开看太累了。写个脚本直接显示里面的内容多好。最好这些内容可以直接复制到剪切板&#xff0c;方便以后编辑修改。只需要将文件拖动到全屏置顶的文本框内&#xff0c;就能弹出Excel里的内容。支持一次选取多个文件。 开干&#xff…

react17+18 中 setState是同步还是异步更新

在类组件中使用setState&#xff0c;在函数式组件中使用hooks的useState。 setstate目录 1. 类组件1.1 react 17版本1.2 react 18版本 2、函数式组件 1. 类组件 1.1 react 17版本 参考内容&#xff1a;第十一篇&#xff1a;setState 到底是同步的&#xff0c;还是异步的&…

Unity类银河恶魔城学习记录12-8 p130 Skill Tree UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI.cs using UnityEngine;public class UI : MonoBehaviour {[SerializeFi…

【精选】发布应用到应用商店的基本介

摘要 本文旨在介绍如何在各大应用商店发布应用&#xff0c;包括市场选择、准备材料、上架步骤以及常见被拒原因及解决方法。通过详细的步骤和经验分享&#xff0c;帮助开发者顺利将应用推向市场。 引言 随着移动应用市场的不断发展&#xff0c;越来越多的开发者希望将他们的…

C++类和对象上

C和C语言本质区别 C语言是面向过程的&#xff0c;面向过程的&#xff0c;分析出求解问题的步骤&#xff0c;然后逐步通过函数调用来逐步解决问题。 C在分析问题是在面对对象的基础上来实现的&#xff0c;即将一件事情拆分为不同的对象&#xff0c;靠的是对象之间的交互来完成的…

OSPF数据报文格式

OSPF协议是跨层封装的协议&#xff0c;跨四层封装&#xff0c;直接将应用层的数据封装在网络层协议后面&#xff0c;IP协议包中协议号字段对应的数值为——89 OSPF的头部信息&#xff1a; ——所有数据包公有的信息 版本&#xff1a;OSPF版本 在IPV4中一般使用OSPFV2&#xf…

c 解数独(通用方法,适用于9×9 数独)

折腾了一周时间&#xff0c;终于搞定99数独通用方法 思路&#xff1a;1.生成每行空位的值&#xff0c;也就是1-9中除去非0的数。 2.用行&#xff0c;列&#xff0c;宫判断每行中每个空位的最小取值范围后再重新生成每行。 3.随机提取生成的9行&#xff0c;判断每列之和是否等…

找不到vcruntime140.dll怎么办,vcruntime140.dll丢失的多种解决方法

在我们日常频繁地与电脑打交道、依赖其处理各种工作、学习乃至娱乐任务的过程中&#xff0c;偶尔会遭遇一些令人困扰的技术问题。其中一种颇为常见的情况便是&#xff0c;当您正全神贯注于某个重要应用的操作&#xff0c;或是满怀期待地试图启动一款新安装的游戏时&#xff0c;…

2万亿训练数据!Stable LM 2-12B加入开源队列

公*众*号&#xff1a;AI疯人院 4月9日&#xff0c;知名大型模型开源平台Stability.ai在其官网上发布了全新的类ChatGPT模型——Stable LM 2 12B。 据了解&#xff0c;Stable LM 2 12B模型拥有120亿个参数&#xff0c;其训练数据涵盖了英语、西班牙语、德语等7种语言的2万亿个…