研发工程师玩转Kubernetes——通过文件创建Service

2023-10-29 21:21

本文主要是介绍研发工程师玩转Kubernetes——通过文件创建Service,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大纲

  • 创建Pod
    • 编写Pod资源文件
    • 创建
    • 查看
  • 创建Service
    • 编写Service资源文件
    • 创建
    • 查看
  • 负载均衡
  • 删除
  • 参考资料

在《研发工程师玩转Kubernetes——部署应用》一文中,我们使用kubectl expose创建了一个Service,暴露了一个Pod上的nginx服务。这篇文章我们将使用文件的形式创建Service。
为了增加有趣性,我们采用《研发工程师玩转Kubernetes——构建、推送自定义镜像》中的镜像部署两个Pod。这两个Pod有不同的Cluster IP(kubernetes内部IP),而Service将同时暴露这两个Pod上的服务。这样我们访问Service时,将通过打印出来的IP得知本次请求被分配到哪个Pod上。

创建Pod

编写Pod资源文件

我们创建两个yaml文件:simple_http_a.yaml和simple_http_b.yaml。

# simple_http_a.yaml
apiVersion: v1
kind: Pod
metadata:name: simple-http-alabels:name: simple-http-aimage: simple_httpversion: v1
spec:containers:- name: simple-http-containerimage: localhost:32000/simple_http:v1ports:- containerPort: 8888
# simple_http_b.yaml
apiVersion: v1
kind: Pod
metadata:name: simple-http-blabels:name: simple-http-bimage: simple_httpversion: v1
spec:containers:- name: simple-http-containerimage: localhost:32000/simple_http:v1ports:- containerPort: 8888

和《研发工程师玩转Kubernetes——通过文件创建Pod》不同的是,我们给labels增加了新的标签image:simple_http。后面我们要通过这个标签,筛选出供Service使用的Pod。

创建

在上述文件的目录执行下面的指令

kubectl create -f simple_http_a.yaml -f simple_http_b.yaml 

查看

kubectl describe pod simple-http-a simple-http-b 
Name:             simple-http-a
Namespace:        default
Priority:         0
Service Account:  default
Node:             fangliang-virtual-machine/172.30.45.36
Start Time:       Fri, 19 May 2023 20:32:50 +0800
Labels:           image=simple_httpname=simple-http-aversion=v1
Annotations:      cni.projectcalico.org/containerID: 10384e0dd24726b0e5265bcc12252bb8a9ecf917d9603f8ce62135ca93fa0573cni.projectcalico.org/podIP: 10.1.62.160/32cni.projectcalico.org/podIPs: 10.1.62.160/32
Status:           Running
IP:               10.1.62.160
IPs:IP:  10.1.62.160
Containers:simple-http-container:Container ID:   containerd://deaf2b805292288ca609095993699911c9be1cda96439a77946df20959b01beaImage:          localhost:32000/simple_http:v1Image ID:       localhost:32000/simple_http@sha256:cbee584f83426593efb95a9e2213bb40143a1c86c3d217e65d30430033f846d4Port:           8888/TCPHost Port:      0/TCPState:          RunningStarted:      Fri, 19 May 2023 20:32:52 +0800Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-kzscm (ro)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True 
Volumes:kube-api-access-kzscm:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:                      <none>Name:             simple-http-b
Namespace:        default
Priority:         0
Service Account:  default
Node:             fangliang-virtual-machine/172.30.45.36
Start Time:       Fri, 19 May 2023 20:32:50 +0800
Labels:           image=simple_httpname=simple-http-bversion=v1
Annotations:      cni.projectcalico.org/containerID: b34e51ad923f778cdba027b7bf361c534c7f4f4e40da1d5bd7c0466bbfaf9fa1cni.projectcalico.org/podIP: 10.1.62.159/32cni.projectcalico.org/podIPs: 10.1.62.159/32
Status:           Running
IP:               10.1.62.159
IPs:IP:  10.1.62.159
Containers:simple-http-container:Container ID:   containerd://0b982826db40467ff7698629782e8d16d9560237027d18b3bc2305e894331c34Image:          localhost:32000/simple_http:v1Image ID:       localhost:32000/simple_http@sha256:cbee584f83426593efb95a9e2213bb40143a1c86c3d217e65d30430033f846d4Port:           8888/TCPHost Port:      0/TCPState:          RunningStarted:      Fri, 19 May 2023 20:32:52 +0800Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-2vdsc (ro)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True 
Volumes:kube-api-access-2vdsc:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:                      <none>

可以看到Pod simple-http-a的内部IP是10.1.62.160,simple-http-b是10.1.62.159。

创建Service

编写Service资源文件

# simple_http_service.yaml
apiVersion: v1
kind: Service
metadata:name: simple-http-service
spec:type: NodePortselector:image: simple_httpports:- port: 80targetPort: 8888nodePort: 30000

因为我们的Service需要对外提供服务,即通过物理机器IP访问,于是要把type设置为NodePort。
selector表示该Service将包装什么样的Pod,它是通过资源的Labels检索的。image:simple_http和Pod资源文件中的Labels强匹配了。
targetPort: 8888,表示容器开放的端口是8888。
port: 80,表示这个服务在内部使用80端口提供服务。
nodePort: 30000表示我们将物理机的30000端口映射到这个服务上。

创建

在上述文件所在目录执行下面的指令

kubectl create -f simple_http_service.yaml 

查看

kubectl describe service simple-http-service
Name:                     simple-http-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 image=simple_http
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.152.183.88
IPs:                      10.152.183.88
Port:                     <unset>  80/TCP
TargetPort:               8888/TCP
NodePort:                 <unset>  30000/TCP
Endpoints:                10.1.62.159:8888,10.1.62.160:8888
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

该Service在kubernetes内部的IP是10.152.183.88,port是80。
在这里插入图片描述
通过物理机IP 172.30.45.36访问的port是30000。
在这里插入图片描述

负载均衡

我们多访问几次该Service,可以看到10.1.62.160和10.1.62.159两个Pod都会响应请求。
在这里插入图片描述在这里插入图片描述
它有两个Endpoints,分别是simple-http-a和simple-http-b两个Pod的IP:TargetPort。

删除

可以先通过下面指令删除该service

kubectl delete service simple-http-service

service “simple-http-service” deleted

然后再删除上述创建的Pod

kubectl delete pod simple-http-a simple-http-b 

pod “simple-http-a” deleted
pod “simple-http-b” deleted

参考资料

  • https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/

这篇关于研发工程师玩转Kubernetes——通过文件创建Service的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/303436

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

跨国公司撤出在华研发中心的启示:中国IT产业的挑战与机遇

近日,IBM中国宣布撤出在华的两大研发中心,这一决定在IT行业引发了广泛的讨论和关注。跨国公司在华研发中心的撤出,不仅对众多IT从业者的职业发展带来了直接的冲击,也引发了人们对全球化背景下中国IT产业竞争力和未来发展方向的深思。面对这一突如其来的变化,我们应如何看待跨国公司的决策?中国IT人才又该如何应对?中国IT产业将何去何从?本文将围绕这些问题展开探讨。 跨国公司撤出的背景与

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

什么是Kubernetes PodSecurityPolicy?

@TOC 💖The Begin💖点点关注,收藏不迷路💖 1、什么是PodSecurityPolicy? PodSecurityPolicy(PSP)是Kubernetes中的一个安全特性,用于在Pod创建前进行安全策略检查,限制Pod的资源使用、运行权限等,提升集群安全性。 2、为什么需要它? 默认情况下,Kubernetes允许用户自由创建Pod,可能带来安全风险。

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

秒变高手:玩转CentOS 7软件更换的方法大全

在 CentOS 7 中更换软件源可以通过以下步骤完成。更换源可以加快软件包的下载速度,特别是当默认源速度较慢时。以下是详细步骤: 前言 为了帮助您解决在使用CentOS 7安装不了软件速度慢的问题,我们推出了这份由浪浪云赞助的教程——“CentOS7如何更换软件源加快下载速度”。 浪浪云,以他们卓越的弹性计算、云存储和网络服务受到广泛好评,他们的支持和帮助使得我们可以将最前沿的技术知识分

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 (3)免费开源。 (4)支持中文。 (5)自动发现。 (6)分布式监控。 (7)实时绘图。 3.zabbix的主要功能