K8s新手系列之Endponit
概述
官方文档:https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/endpoints-v1/
Endpoint
简称ep
Endpoint是kubernetes中的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod的访问地址,它是根据service配置文件中selector描述产生的。
一个Service由一组Pod组成,这些Pod通过Endpoints暴露出来,Endpoints是实现实际服务的端点集合。换句话说,service和pod之间的联系是通过endpoints实现的。
负载分发策略
对Service的访问被分发到了后端的Pod上去,目前kubernetes提供了两种负载分发策略:
- 如果不定义,默认使用kube-proxy的策略,比如随机、轮询
- 基于客户端地址的会话保持模式,即来自同一个客户端发起的所有请求都会转发到固定的一个Pod上,此模式可以使在spec中添加sessionAffinity:ClientIP选项
验证Endpoint
创建service和deploy
[root@master01 ~/ingress]# cat nginx-deploy.yaml
# service
apiVersion: v1
kind: Service
metadata:
namespace: default
name: nginx-svc-clusterip
spec:
type: ClusterIP
selector:
app: nginx
ports:
- name: clusterip-nginx
port: 80
targetPort: 80
protocol: TCP
---
# deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-nginx
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
name: pod-nginx
labels:
app: nginx
spec:
containers:
- name: container-nginx
image: nginx:1.14.1
restartPolicy: Always
查看创建成功对应的资源
# 查看pod
[root@master01 ~/ingress]# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
deployment-nginx-6d84458cd8-g8lkv 1/1 Running 0 35m 100.117.144.139 node01 <none> <none>
deployment-nginx-6d84458cd8-j8m6c 1/1 Running 0 35m 100.95.185.234 node02 <none> <none>
deployment-nginx-6d84458cd8-znr7t 1/1 Running 0 35m 100.117.144.140 node01 <none> <none>
# 查看svc详情,注意Endpoints列表是和pod的IP保持一致的
[root@master01 ~/ingress]# kubectl describe svc nginx-svc-clusterip
Name: nginx-svc-clusterip
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.96.1.52
IPs: 10.96.1.52
Port: clusterip-nginx 80/TCP
TargetPort: 80/TCP
Endpoints: 100.117.144.139:80,100.117.144.140:80,100.95.185.234:80
Session Affinity: None
Events: <none>
# 查看endpoints资源
[root@master01 ~/ingress]# kubectl get endpoints
NAME ENDPOINTS AGE
nginx-svc-clusterip 100.117.144.139:80,100.117.144.140:80,100.95.185.234:80 36m
当我们重启Pod之后看看Endpoints列表会发生什么
重启Pod
[root@master01 ~/ingress]# kubectl delete po deployment-nginx-6d84458cd8-g8lkv deployment-nginx-6d84458cd8-j8m6c deployment-nginx-6d84458cd8-znr7t
pod "deployment-nginx-6d84458cd8-g8lkv" deleted
pod "deployment-nginx-6d84458cd8-j8m6c" deleted
pod "deployment-nginx-6d84458cd8-znr7t" deleted
查看资源,发现对应的IP是会进行变化的
# 查看Pod
[root@master01 ~/ingress]# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
deployment-nginx-6d84458cd8-4z4cb 1/1 Running 0 7s 100.95.185.236 node02 <none> <none>
deployment-nginx-6d84458cd8-ht2z9 1/1 Running 0 7s 100.117.144.141 node01 <none> <none>
deployment-nginx-6d84458cd8-ns47j 1/1 Running 0 7s 100.95.185.238 node02 <none> <none>
# 查看service
[root@master01 ~/ingress]# kubectl describe svc nginx-svc-clusterip
Name: nginx-svc-clusterip
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.96.1.52
IPs: 10.96.1.52
Port: clusterip-nginx 80/TCP
TargetPort: 80/TCP
Endpoints: 100.117.144.141:80,100.95.185.236:80,100.95.185.238:80
Session Affinity: None
Events: <none>
#查看endpoints
[root@master01 ~/ingress]# kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 10.0.0.30:6443 78m
nginx-svc-clusterip 100.117.144.141:80,100.95.185.236:80,100.95.185.238:80 39m
编写一个属于自己Endpoints
Endpoints资源是通过name和namespace两个字段与Service进行关联的,所以Endpoints的名称和Service的名称相同.
示例:
[root@master01 ~]# cat ep.yaml
# Endpoints资源
apiVersion: v1
kind: Endpoints
metadata:
name: harbor-huangxin
subsets:
- addresses:
- ip: 10.0.0.250
ports:
- port: 80
protocol: TCP
---
# Service资源
apiVersion: v1
kind: Service
metadata:
name: harbor-huangxin
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80
查看一下资源
# 查看service
[root@master01 ~]# kubectl describe svc endpoint-huangsir
Name: endpoint-huangsir
Namespace: default
Labels: <none>
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.96.1.127
IPs: 10.96.1.127
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.0.0.250:80
Session Affinity: None
Events: <none>
# 查看endpoint
[root@master01 ~]# kubectl get ep endpoint-huangsir
NAME ENDPOINTS AGE
endpoint-huangsir 10.0.0.250:80 51s
K8s新手系列之Endponit的更多相关文章
- k8s入门系列之guestbook快速部署
k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...
- k8s入门系列之扩展组件(一)DNS安装篇
DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...
- k8s入门系列之集群安装篇
关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...
- Android新手系列教程(申明:来源于网络)
Android新手系列教程(申明:来源于网络) 地址:http://blog.csdn.net/column/details/androidcoder666.html
- k8s 入门系列之集群安装篇
关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...
- SignalR新手系列教程详解总结(转)
SignalR新手系列教程详解总结 GlobalHost.ConnectionManager.GetHubContext<TodoListHub>() .Clients.Clients(l ...
- k8s入门系列之扩展组件(二)kube-ui安装篇
kube-ui是k8s提供的web管理界面,可以展示节点的内存.CPU.磁盘.Pod.RC.SVC等信息. 1.编辑kube-dashboard-rc.yml定义文件[root@master kube ...
- k8s入门系列之介绍篇
•Kubernetes介绍1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境2.什么是ku ...
- k8s 入门系列之介绍篇
•Kubernetes介绍1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境2.什么是ku ...
- K8S入门系列之集群二进制部署-->master篇(二)
组件版本和配置策略 组件版本 Kubernetes 1.16.2 Docker 19.03-ce Etcd 3.3.17 https://github.com/etcd-io/etcd/release ...
随机推荐
- Python 潮流周刊#89:Python 3.14 的新型解释器!(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- K230学习记录
K230学习记录 参考自: # 立创·庐山派-K230-CanMV开发板资料与相关扩展板软硬件资料官网全部开源 # 开发板官网:www.lckfb.com # 技术支持常驻论坛,任何技术问题欢迎随时交 ...
- AI 艺术工具通讯
创刊号 AI 领域的发展速度令人惊叹,回想一年前我们还在为生成正确手指数量的人像而苦苦挣扎的场景,恍如隔世 . 过去两年对开源模型和艺术创作工具而言具有里程碑意义.创意表达的 AI 工具从未像现在这般 ...
- hbase - [04] java访问hbase
需要导入jar包 $HBASE_HOME/lib下的所有jar包 $HADOOP_HOME/share/hadoop/common的所有jar包 package com.harley.hbase.te ...
- C#中固定编译时不确定数量的变量(相关话题fixed固定多个数组)
以交错数组byte[][]为例. fixed无法固定byte[][],只能在编译时固定确定数量的变量. 交错数组byte[][]中的每一个byte[]可以采用GCHandle进行固定. int n = ...
- PyCharm一直indexing,且永不停止。
- Python面向对象-反射
python面向对象-反射 在python的面向对象中,与用户交互的主要方式就是利用反射来判断用户输入的指令是否存在和可执行 反射的定义 在python中反射主要是应用于类的对象上,在运行时,将对象的 ...
- Tomcat的优化(分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优)
Tomcat的优化 一.Tomcat 优化 Tomcat 配置文件参数优化 二.系统内核优化 三.Tomcat 配置 JVM 参 ...
- 【C语言】从源代码编译成可执行文件的步骤
零.流程图 flowchat st=>start: 开始 e=>end: 结束 op1=>operation: 编写源代码".c"文件 #include<s ...
- python API 之 fastapi
为什么选择 FastAPI? 高性能:基于 Starlette 和 Uvicorn,支持异步请求处理 开发效率:自动交互文档.类型提示.代码自动补全 现代标准:兼容 OpenAPI 和 JSON Sc ...