当前位置: 首页 > news >正文

k8s入门实战-Service

k8s入门实战-Service

Service 和 Label

Service 通过一组 Pod 路由通信。Service 是一种抽象,它允许 Pod 死亡并在 Kubernetes 中复制,而不会影响应用程序。在依赖的 Pod (如应用程序中的前端和后端组件)之间进行发现和路由是由Kubernetes Service 处理的。

Service 匹配一组 Pod 是使用 标签(Label)和选择器(Selector), 它们是允许对 Kubernetes 中的对象进行逻辑操作的一种分组原语。标签(Label)是附加在对象上的键/值对,可以以多种方式使用:
在这里插入图片描述

  • 指定用于开发,测试和生产的对象
  • 嵌入版本标签
  • 使用 Label 将对象进行分类
    在这里插入图片描述

执行yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:name: nginxnamespace: dev
spec:replicas: 3selector:matchLabels:run: nginxtemplate:metadata:labels:run: nginxspec:containers:- image: nginx:1.17.1name: nginxports:- containerPort: 80protocol: TCP
[root@master ~]# kubectl create -f deploy-nginx.yaml
deployment.apps/nginx created
[root@master ~]# kubectl get pods -n dev
NAME                     READY   STATUS    RESTARTS   AGE
nginx-64777cd554-h6rjh   1/1     Running   0          11s
nginx-64777cd554-sffwm   1/1     Running   0          11s
nginx-64777cd554-zw66q   1/1     Running   0          11s

查询每个podIP地址

[root@master ~]# kubectl get pods -n dev -o wide
NAME                     READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
nginx-64777cd554-h6rjh   1/1     Running   0          117s   10.244.2.17   node2   <none>           <none>
nginx-64777cd554-sffwm   1/1     Running   0          117s   10.244.2.18   node2   <none>           <none>
nginx-64777cd554-zw66q   1/1     Running   0          117s   10.244.1.10   node1   <none>           <none>

删除pod,查看新pod Ip地址是否改变

[root@master ~]# kubectl delete pod nginx-64777cd554-h6rjh -n dev
pod "nginx-64777cd554-h6rjh" deleted
[root@master ~]# kubectl get pods -n dev -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
nginx-64777cd554-qdjn8   1/1     Running   0          45s     10.244.1.11   node1   <none>           <none>
nginx-64777cd554-sffwm   1/1     Running   0          4m59s   10.244.2.18   node2   <none>           <none>
nginx-64777cd554-zw66q   1/1     Running   0          4m59s   10.244.1.10   node1   <none>           <none>

删除pod后,新建pod IP改变

  • Pod IP在Pod重建时会更改

  • Pod IP 只能在集群内使用,外部无法访问

Kubernetes 中 Service 是 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。

Service在生命周期内,IP地址不会改变

创建集群内部可访问的Service

#暴露Service  
[root@master ]# kubectl expose deployment nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
service/svc-nginx1 exposed 
[root@master ~]# kubectl get svc -n dev
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
svc-nginx1   ClusterIP   10.101.232.58   <none>        80/TCP    5m55s
#访问service IP+端口 

这里我无法ping通Service IP

错误:ServiceIP无法Ping通

我的做法尝试重新启动Pod,重新创建一个Service

然后编辑文件

kubectl -n kube-system edit configmap kube-proxy

修改这段

  kind: KubeProxyConfigurationmetricsBindAddress: ""mode: "ipvs"nodePortAddresses: null

把mode添加为ipvs

重启主机即可

然后查看下新的ServiceIP,访问80端口,成功访问,但是很慢,不报错的话你等个一分钟看看

[root@master ~]# kubectl get pods,svc,deploy -n dev
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-64777cd554-bhs6f   1/1     Running   0          4m39s
pod/nginx-64777cd554-gkjqk   1/1     Running   0          4m39s
pod/nginx-64777cd554-x5szs   1/1     Running   0          4m39sNAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/svc-nginx1   ClusterIP   10.108.90.241   <none>        80/TCP    3m7sNAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   3/3     3            3           4m39s
[root@master ~]# curl 10.108.90.241:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>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>

创建集群外部也可以访问的Service

# 上面创建的Service的type类型为ClusterIP,这个ip地址只用集群内部可访问
# 如果需要创建外部也可以访问的Service,需要修改type为NodePort
[root@master ~]# kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev
service/svc-nginx2 exposed  [root@master ~]# kubectl get svc -n dev
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
svc-nginx1   ClusterIP   10.108.90.241   <none>        80/TCP         9m27s
svc-nginx2   NodePort    10.96.231.201   <none>        80:32400/TCP   18s

尝试浏览器访问:
在这里插入图片描述

删除Service

#删除所有
[root@master ~]# kubectl delete svc -n dev --all
service "svc-nginx1" deleted
service "svc-nginx2" deleted#删除单个
kubectl delete svc [Service名称] -n [名称空间] 

配置方式

创建一个svc-nginx.yaml

apiVersion: v1
kind: Service
metadata:name: svc-nginxnamespace: dev
spec:clusterIP: 10.109.179.231ports:- port: 80protocol: TCPtargetPort: 80selector:run: nginxtype: ClusterIP
#创建
[root@master ~]# kubectl create -f svc-nginx.yaml
service/svc-nginx created
[root@master ~]# kubectl get svc -n dev
NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
svc-nginx   ClusterIP   10.109.179.231   <none>        80/TCP    49s
#删除
[root@master ~]# kubectl delete -f svc-nginx.yaml
service "svc-nginx" deleted
[root@master ~]# kubectl get svc -n dev
No resources found in dev namespace.
http://www.lryc.cn/news/89988.html

相关文章:

  • Python量化交易:策略创建运行流程
  • 企业该如何自主构建信息化管理系统?
  • linuxOPS基础_操作系统概述
  • 常用adb命令记录下
  • Etcdctl 命令v3
  • 第二十一章 开发Productions - ObjectScript Productions - 延迟发送
  • 用vue-full-calendar实现酒店预定管理展示
  • DirectX12环境配置(1)
  • Go-异常处理(defer recover panic)
  • 【完美解决】mysql启动不了:本地计算机上的MySQL服务启动后停止
  • C++ Qt 项目设计:基于C++与Qt的跨平台定时关机/关屏应用开发
  • Python新技术和趋势:如何应对Python生态的变化和发展趋势
  • Flutter 又一元老离职,感谢 Tim 这些年的付出
  • C++学习笔记3:sort和priority_queue的比较器重载
  • Java之旅——Mybatis
  • 抽奖中的分布式锁应用
  • 项目总结 车牌识别
  • 一台服务器通过apache安装多个web应用
  • 网络连通性测试
  • AntDB-S流式数据库体验
  • CentOS 和 Windows 上添加和删除路由
  • 2023年电大秋季招生截止日期 什么时候开始报名
  • 滑动窗口问题
  • 电子合同网页预览盖章效果实现
  • 棋盘覆盖问题
  • [CISCN2023]unzip
  • 基于Html5的在线资料库的设计与实现(asp.NET,SQLServer)
  • 【Vue】二:Vue核心处理---计算属性 监视属性
  • 【Web服务器集群】Nginx网站服务
  • 开始第一个vue项目,环境搭建+html项目运行