首页 > 其他分享 >Kubernetes学习笔记13

Kubernetes学习笔记13

时间:2024-04-09 17:34:32浏览次数:14  
标签:master1 13 Service Kubernetes app4 笔记 nginx 80 root

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等,我们再继续研究。

标签:master1,13,Service,Kubernetes,app4,笔记,nginx,80,root
From: https://blog.csdn.net/chang_chunhua/article/details/137547193

相关文章

  • Kubernetes学习笔记12
    k8s核心概念:控制器:我们删除Pod是可以直接删除的,如果生产环境中的误操作,Pod同样也会被轻易地被删除掉。所以,在K8s中引入另外一个概念:Controller(控制器)的概念,用于在k8s集群中以loop的方式监视pod状态,如果其发现Pod被删除,将会重新拉起一个Pod,以让Pod一直保持在用户期望的状态。......
  • SeleniumBase 录制模式-使用笔记(二)
    自动化福音(爬虫、办公、测试等)SeleniumBase使用笔记(二)SeleniumBase录制模式SeleniumBase提供录制模式,可以直接录制操作,并生成脚本。目录启用录制录制功能操作结束录制启用录制直接命令启用#new_recording.py=输出文件名#URL:路径sbasemkrecnew_recordi......
  • Kubernetes 升级不弃 Docker:KubeKey 的丝滑之道
    作者:尹珉,KubeSphereAmbaasador&Contributor,KubeSphere社区用户委员会杭州站站长。引言随着Kubernetes社区的不断发展,即将迎来Kubernetes1.30版本的迭代。在早先的1.24版本中,社区作出一个重要决策:不再默认集成Docker作为容器运行时,即取消了对Docker的默认支持。这......
  • FPGA入门笔记012——嵌入式块RAM应用之ROM
    1、实验现象​ 实现一组固定的数据(三角波形表)存储在FPGA中使用IP核构建的片上ROM中,开发板上电后,系统开始从ROM中读出数据,并将数据直接通过并口输出。通过使用SignalTapII软件实时抓取并口上的数据,显示得到三角波形。然后使用Quartus软件中提供的In-SystemMemor......
  • Python数据分析 numpy 笔记
     B站课链接:【Python数据分析三剑客:NumPy、Pandas与Matplotlib】https://www.bilibili.com/video/BV1Yb4y1g7SV/?p=16&share_source=copy_web&vd_source=e883bdf439c7a2e47e9145990387a56b 014,开始使用numpy(1),numpy介绍   (2),导入numpy库,并查看numpy版本#数据分析三剑......
  • 图论学习笔记
    Dijkstra单源最短路径堆优化。注意要定义成小根堆,而priority_queue默认大根堆再就是每个点最多入队一次,可以用vis数组记录证明:如果已经出队,说明队列中全都是val值比他大的(负权边?),这样他的val值一定已经是最终值了;如果没有入队,进行更改之后会在堆中体现,不需要担心之后还会更......
  • GUI development with Rust and GTK4 阅读笔记
    简记这是我第二次从头开始阅读,有第一次的印象要容易不少。如果只关心具体的做法,而不思考为什么这样做,以及整体的框架,阅读的过程将会举步维艰。简略记录gtk-rs的书中提到的点。对同一个问题书中所演示了多种处理方法,而且跨度比较大,第一次阅读的时候经常出现忘记之前的内容。f......
  • JavaSE笔记10数组入门
    数组的入门概念数组属于引用数据类型,其父类是Object数组可以容纳多个元素。(数组是一个数据的集合)数组可以存储基本和引用数据类型数组是引用类型,所以存储再堆内存中数组不能直接存储Java对象,但是可以存储其引用(内存地址)分类一维数组二维数组多维数组二维数组本质......
  • 苍穹外卖学习笔记——第二天
    员工管理、分类管理新增员工需求分析和设计产品原型业务规则账号必须是唯一的。手机号为合法的11位手机号码。身份证号为合法的18位身份证号码。密码默认为123456。接口设计本项目约定:管理端发出的请求,统一使用/admin作为前缀,用户端发出的请求,统一使用/user作为前......
  • 13. TypeScript中的联合类型和交叉类型
    在TypeScript中,类型系统提供了多种方式来组合类型,其中最常见的就是联合类型和交叉类型。这两种类型都允许你以灵活的方式处理可能有多种类型的值。一、联合类型1.1定义在TypeScript中,联合类型是一种复合类型,表示一个值可以是几种类型之一。我们使用|符号来定义联合类型......