k8s快速入门教程-----5 Service

K8S(Kubernetes)简介和官方安装部署保姆级详细教程 Kubernetes简称为K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统,起源于Google 集群管理工具Borg。 阅读详情

上一篇: 4 工作负载控制器之deployment

5.1 概述

我们不应该期望Kubernetes Pod是健壮的,而是要假设Pod 中的容器很可能因为各种原因发生故障而死掉。Deployment 等Controller 会通过动态创建和销毁Pod来保证应用整体的健壮性。换句话说,Pod是脆弱的,但应用是健壮的。每个Pod都有自己的IP地址。当Controller 用新Pod 替代发生故障的Pod 时,新Pod会分配到新的IP地址。这样就产生了一个问题:如果一组Pod对外提供服务(比如HTTP),它们的IP很有可能发生变化,那么客户
端如何找到并访问这个服务呢?
Kubernetes给出的解决方案是Service。Service服务也是Kubernetes里的核心资源对象之一。

5.2 创建service

下面动手创建一个Service来加深对它的理解。创建一 个名为http0822-svc.yaml的定义文件,内容如下:

kind: Service     #  ②
apiVersion: v1    # ①
metadata:
  name: httpd0822-svc
spec:
  ports:  # ⑤
    - name: http-80
      protocol: TCP
      port: 80
      targetPort: 80
  selector:  # ④
    app: httpd0822
  type: ClusterIP

①v1是Service 的apiVersion。
②指明当前资源的类型为Service。
③Service 的名字为httpd-svc.
④selector 指明挑选那些label 为run: httpd的Pod作为Service 的后端。
⑤将Service 的80 端口映射到Pod的80端口,使用TCP协议。
应用执行并显示:

kubectl apply -f http0822-svc.yaml

# kubectl get ep
NAME            ENDPOINTS           AGE
httpd0822-svc   <none>              2s
kubernetes      192.168.3.81:6443   215d
# kubectl get svc
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
httpd0822-svc   ClusterIP   10.254.177.175   <none>        80/TCP    78s
kubernetes      ClusterIP   10.254.0.1       <none>        443/TCP   215d

ENDPOINTS显示none,是由于没有匹配的标签,没有对应的Pod, 而且直接访问curl 10.254.177.175无法访问。
创建一个deployment,写service对应Pod的标签。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd0822
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpd0822
  template:
    metadata:
      labels:
        app: httpd0822
    spec:
      containers:
      - image: httpd
        name: httpd0822
      restartPolicy: Always

运行:

kubectl apply -f httpd0822.yaml

生成的pod及看到endpoint有对应的IP地址:

# kubectl get pod    
NAME                         READY   STATUS    RESTARTS   AGE
httpd0822-7dc59d86f6-44qpr   1/1     Running   0          66s
httpd0822-7dc59d86f6-lttv7   1/1     Running   0          66s
httpd0822-7dc59d86f6-vwcxc   1/1     Running   0          66s

# kubectl get ep
NAME            ENDPOINTS                                       AGE
httpd0822-svc   10.255.30.0:80,10.255.30.3:80,10.255.30.40:80   110m
kubernetes      192.168.3.81:6443                               216d

看到可以正常访问了:

# curl 10.254.177.175
<html><body><h1>It works!</h1></body></html>

5.3 DNS 访问service

在Cluster中,除了可以通过Cluster IP访问Service, Kubernetes 还提供了更为方便的DNS访问。kubeadm部署时会默认安装coredns 组件,如下所示:

# kubectl get deploy -n kube-system   
NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
calico-kube-controllers   1/1     1            1           33d
coredns                   2/2     2            2           33d

kube-dns是一个DNS服务器。每当有新的Service 被创建,coredns会添加该Service的 DNS。 Cluster的 Pod 可以通过 . <NAMESPACE_ NAME>访问 Service,同命名空间可以省去<NAMESPACE_ NAME>。
同命名空间:

# kubectl exec -it busybox0822 -- sh
# nslookup httpd0822-svc
Server:    10.254.0.10
Address 1: 10.254.0.10 kube-dns.kube-system.svc.cluster.local

Name:      httpd0822-svc
Address 1: 10.254.177.175 httpd0822-svc.default.svc.cluster.local

不同命名空间:(下面命名空间为default访问命令空间test的svc)

# kubectl exec -it busybox0822 -- sh
/ # nslookup httpd0823-svc
Server:    10.254.0.10
Address 1: 10.254.0.10 kube-dns.kube-system.svc.cluster.local

nslookup: can't resolve 'httpd0823-svc'
/ # nslookup httpd0823-svc.test
Server:    10.254.0.10
Address 1: 10.254.0.10 kube-dns.kube-system.svc.cluster.local

Name:      httpd0823-svc.test
Address 1: 10.254.80.55 httpd0823-svc.test.svc.cluster.local

完整的DNS记录是:
. <NAMESPACE_ NAME>.svc.cluster.local

# nslookup httpd0823-svc.test.svc.cluster.local
Server:    10.254.0.10
Address 1: 10.254.0.10 kube-dns.kube-system.svc.cluster.local

Name:      httpd0823-svc.test.svc.cluster.local
Address 1: 10.254.80.55 httpd0823-svc.test.svc.cluster.local

5.4 外网Service

Kubernetes 提供了多种类型的Service, 默认是ClusterIP。
(1) ClusterIP
Service通过Cluster内部的IP对外提供服务,只有cluster内的节点和pod可访问,这是默认的Service 类型,前面实验中的Service 都是ClusterIP。
(2) NodePort
Service 通过cluster节点的静态端口对外提供服务。Cluster外部可以通过:访问service。
通过Cluster节点的静态端口对外提供服务。Cluster外部可以通过
: ìj [i] Service.
修改httpd0822-svc成NodePort

kind: Service     #  ②
apiVersion: v1    # ①
metadata:
  name: httpd0822-svc
spec:
  ports:  # ⑤
    - name: http-80
      protocol: TCP
      port: 80
      targetPort: 80
  selector:  # ④
    app: httpd0822
  type: NodePort

重新应用:

# kubectl apply -f http0822-svc.yaml    
service/httpd0823-svc configured
# kubectl get svc
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
httpd0822-svc   NodePort    10.254.177.175   <none>        80:31188/TCP   26h
kubernetes      ClusterIP   10.254.0.1       <none>        443/TCP        217d

Kubernetes依然会为httpd-svc 分配-一个ClusterIP, 不同的是:
(1) EXTERNAL-IP为nodes, 表示可通过Cluster 每个节点自身的IP访问Service。
(2) PORT(S)为80:31188。 80 是ClusterIP 监听的端口,31188 则是节点上监听的端口。Kubernetes 会从30000 ~ 32767中分配-一个可用的端口,每个节点都会监听此端口并将请求转发给Service, 如下所示:

# ss -lpnt | grep 31188
LISTEN     0      4096         *:31188                    *:*                   users:(("kube-proxy",pid=2871,fd=10))

访问:

]# curl http://192.168.3.81:31188
<html><body><h1>It works!</h1></body></html>

5.5 CKA题分析

题目:请重新配置现有的部署front-end以及添加名为http的端口规范来公开现有容器nginx 的端口80/tcp。
创建一个名为front-end-svc的新服务,以公开容器端口http。
配置此服务,以通过在排定的节点上的NodePort来公开各个Pods

kubectl create deployment --image=nginx --port=80 front-end
kubectl edit deployment front-end修改port的名字
.....
 spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
.......
kubectl expose deployment front-end --port=80 --target-port=80 --type="NodePort" --name=front-end-svc
零基础学kubernetes(k8s)必看教程,带你10分钟快速实战入门k8s 作为一个工作十余年,拥有比较丰富的计算机网络运维、主机运维、云计算平台运维、自动化运维开发经验的老鸟,我来说说我当初刚接触Kubernetes时的一些感受以及学习技巧。 阅读详情

相关推荐

[Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目

借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 2759

K8S+openstack swift 多节点集群部署

目的:通过k8s可以快速创建启动swift集群 思路:刚开始想全自动的,后来实现有点困难,主要对k8s不是很熟,所以先半自动了。。。先创建swift proxy的镜像,再在worker节点中随便找一台制作swift  存储的镜像。swift对象存储的多节点集群模式暂时采用temauth临时认证,具体的安装文档可以参考官网了解下:https://docs.openstack.org/project...

1821

如何玩转 Kubernetes K8S

可以通过kubectl explain pod 查看pod yaml定义的顶级属性,然后通过类似 kubectl explain pod.{顶级属性}查看二级属性的细节定义。下面给出一个pod资源定义的样例,对pod的描述有一个初步了解。apiVersion: v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本kind: Pod #该配置的类型,我们使用的是Pod。

m0_37843156的博客 1459

openshift和k8s

一般我们指K8s,即单单指k8s这种基础设施,k8s本质上只提供一种CD的环境,即用于持续部署,所以对于传统的devops平台或者cicd平台,他缺少版本控制,持续集成CI,以及对于整个devops流程的整合等。通过OpenShit,企业可以快速在内部网络中构建出一个多租户的云平台,在这朵云上提供应用开发、测试、部署、运维的各项服务。某种意义上来讲,希望用openshift来管理k8s,来弱化k8s复杂安装、资源配置和权限管理,通过k8s来管理docker,解决跨主机通信,容器编排,永久存储等问题。...

kaede_xiao的博客 1814

k8s入门教程详解(一)

api server:所有服务访问统一入口CrontrollerManager:维持副本期望数Scheduler:负责介绍任务,选择合适的节点进行分配任务。etcd:键值对数据库,存储K8S集群所有重要信息(持久化)kubelet:直接跟容器引擎交互实现容器 的 生命周期管理kube-proxy:负责写入规则至iptables(firewall)、ipvs(负载均衡) 实现服务映射访问的其它组件介绍#CoreDNS :可以为集群中的svc 创建一个域名IP的对应关系解析。

zhendeC1的博客 1094

CentOS7中使用kubeadm快速部署一套K8S集群

最小部署单元一组容器的集合一个Pod中的容器共享网络命名空间Pod是短暂的ReplicaSet :确保预期的Pod副本数量Deployment :无状态应用部署StatefulSet :有状态应用部署DaemonSet :确保所有Node运行同一个PodJob :一次性任务Cronjob :定时任务防止Pod失联定义一组Pod的访问策略:标签,附加到某个资源上,用于关联对象、查询和筛选:命名空间,将对象逻辑上隔离:注释。

2501_90193504的博客 953

Kubernetes部署云原生分布式存储Rook

rook简介 Rook官网:https://rook.io 容器的持久化存储 容器的持久化存储是保存容器存储状态的重要手段,存储插件会在容器里挂载一个基于网络或者其他机制的远程数据卷,使得在容器里创建的文件,实际上是保存在远程存储服务器上,或者以分布式的方式保存在多个节点上,而与当前宿主机没有任何绑定关系。这样,无论你在其他哪个宿主机上启动新的容器,都可以请求挂载指定的持久化存储卷,从而访问到数据...

IT 3万+

swift-k8s-service-discovery:Swift服务发现API的K8s实现

Swift K8s服务发现 在可用的Kubernetes集群中发现感兴趣的Pod。 该库支持Apple的 API。 入门 添加包裹 Swift K8s Service Discovery使用作为其构建工具。 以通常的方式添加包,首先添加新的dependencies子句: dependencies : [ . package ( url : " https://github.com/tuplestream/swift-k8s-service-discovery.git " , from : " 0.10.0 " ) ] 然后将K8sServiceDiscovery模块添加到您的目标依赖项中: dependencies : [. product ( name : " K8sServiceDiscovery " , package : " swift-k8s-service-di

Swift API简介

Swift以RESTful API的形式提供自己的API,Proxy Server承担了类似nova-api服务角色,负责接受并转发用户的HTTP请求。Swift API主要提供如下功能:1 存储对象,对象的个数并没有限制。单个对象的大小默认值是5GB,这个最大值用户可以自行配置。2 对于超大值对象,可以通过大对象(Large Object)中间件进行上传和存储。3 压缩对象。4 删除对象,可以批...

实践求真知 3474

UReport2 报表设计器 在线表格

UReport2官网 一、UReport2报表设计器 UReport2是一个开源的可视化报表设计器,功能强大,操作简单,可以实现复杂的报表统计,有各种各样的导出和打印功能,支持导入Excel表格! 1、报表设计器 2、设计一个简单的用户列表展示 二、可编辑表格 扩展了layui的表格,支持多元化数据编辑(单选,多些、日期、下拉联动),开发简单、高效、便捷。有了它就可以轻松开发类似进销存系统的表格录入功能了,用户拿来即用! 三、主从表录......

ejinxian的专栏 2万+

RAGFlow + GraphRAG+ 知识图谱 + QwQ32B探索实践

RagFlow 是一款开源的 RAG(Retrieval-Augmented Generation)引擎,专注于深度文档理解,能够助力企业及个人构建高效的 RAG 工作流程。借助大语言模型(LLM),它可以精准处理各种复杂格式的数据,为用户提供可靠的问答服务,并附上详实的引用依据。

技术引领业务创新 8万+

Kubernetes k8s理论篇

目录 一、k8s概述 1.1 什么是k8s? 1.1.1 作用 1.1.2 由来 1.1.3 含义 1.2 为什么需要K8S K8S的目标是让部署容器化应用简单高效。 1.3 k8s的特性 二、Kubernetes集群架构与组件 2.1Master组件 2.1.1Kube-apiserver 2.1.2 Kube-controller-manager 2.1.3 Kube-scheduler 2.1.4 配置存储中心 — etcd 2.2 Node组件 2.2.1 Kub..

weixin_48872590的博客 5万+

CGNS快速入门到实战(一):CGNS静态链接库编译

近期,由于需要将CGNS格式加入到教研组自编CFD求解器DUBHE中,所以本人展开了对于CGNS的学习。CGNS快速入门到实战这一系列分成三篇文章展开叙述,具体有:(一)CGNS静态链接库编译;(二)VS配置调用CGNS静态链接库编写;(三)CGNS文件及案例展示。本篇文章重点讲述CGNS静态链接库编译。

ahang_99的博客 3819

Kubernetes(K8s)详解

Kubernetes(K8S)是一个开源的容器编排引擎,用于自动化部署、扩缩和管理容器化应用。其核心架构包括Master Node(含API Server、Scheduler、Controller Manager等组件)和Worker Node(含Kubelet、Kube-Proxy等)。K8S提供核心特性如服务发现、存储编排、自我修复等,支持通过kubectl命令行工具进行资源管理。Namespace用于隔离资源,Pod是最小部署单元,而Deployment则管理Pod的多副本和自愈能力。通过YAML文件

Java资料站 2011

ubuntu18.04 显卡驱动问题 造成屏幕分辨变大 NVIDIA-SMI has failed because it couldn't communicate with ....等问题

问题1:装好了显卡驱动,cudnn,tensorflow等没问题,一直可以用。但是突然有一天不行了,终端输入:nvidia-smi 显示:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed...

梦萦飞--CV/DL/ML 2248

图像处理入门007:图像处理中的数学基础:线性代数与卷积

一种:把 OpenCV 当黑盒,调用,效果不对就乱调参数;另一种:理解每个像素是怎么被周围邻域"加权平均"的,理解核翻转、边界填充、stride 的含义。前者能干活,后者能解难题。一旦遇到自定义核(比如 ISP 上的锐化)、深度学习反向传播、医学图像重建,你就必须把卷积、相关、矩阵乘法这些基本功捡回来。线性代数三件套:向量点积、矩阵乘法、线性变换;2D 卷积的数学定义:核翻转、滑动窗口、边界填充。并手写一个,验证它与和的结果完全一致(误差 < 1e-9)。f∗gn∑m−∞∞f。

专注:太空算力、AI infra、异构调度、大模型成本工程 387

Kubernetes(k8s)基础入门

K8S是Kubernetes的全称,官方称其是across multiple hosts. It provides basic mechanisms for deployment, maintenance, and scaling of applications. 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。容器就是一个包,其中包含了应用及其所有依赖。容器中的应用与主机系统是隔离的,不关注环境。

沉浸式Study 1万+

玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏

玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏

jks212454的博客 422

k8s快速入门教程-----1 kubernetes初步使用

kubernetes简称K8S,以下内容都简称K8S。 生产环境部署K8s的2种方式, kubeadm和二进制。kubeadm是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 二进制是从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群,复杂度高。 当然,要搭建这么一个可运行的系统通常也不会太容易,按照实践结合理论学习思路,我们会在最短时间内搭建起一个可用系统,这样就能够尽快建立起对学习对象的感性认识。

cloud_engineer的博客 1万+

手把手教你学simulink(8.39)--基于Simulink的步进电机(Stepper Motor)仿真实例

通过这个仿真实例,你可以学习如何使用Simulink构建和仿真步进电机(Stepper Motor)系统。你可以根据实际需求调整模型和参数,进行更复杂的仿真和分析。希望这个例子对你有所帮助,祝你学习愉快!

MHD0815的博客 1052

YOLOv8剪枝 lamp剪枝测试精度仅掉0.7个点,速度提高11.8fps!

该摘要介绍了LAMP剪枝方法的创新点和理论分析,重点突出了其最小化L2失真和分层自适应剪枝的特性。LAMP通过引入ξ变量在最坏情况下优化剪枝失真,并简化了计算过程。文章还提供了代码移植的具体步骤,包括创建compress.py文件和相关配置说明。

FJN110的博客 1114

Kubernetes(k8s) 架构原理一文详解

目录一、k8s 概述1.什么是k8s?2.特性3.主要功能三、集群架构与组件1.Master 组件(1)Kube-apiserver(2)Kube-controller-manager(3)Kube-scheduler2.配置存储中心3.Node 组件(1)Kubelet(2)Kube-Proxy(3)docker 或 rocket四、k8s的工作流程五、k8s的资源对象1.Pod2.Pod 控制器2.Label3.Label 选择器(Label selector)4.Service5.Ingress6.N

云计算运维工程师的成长之路 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

如何快速上手Spring Cloud Kubernetes?5分钟搭建你的第一个K8s微服务

Spring Cloud Kubernetes是Spring Cloud生态系统与Kubernetes的无缝集成方案,它让开发者能够轻松构建在Kubernetes环境中运行的微服务应用。通过提供服务发现、配置管理、健康检查等核心功能,Spring Cloud Kubernetes帮助开发者实现微服务的快速部署与动态扩展,同时保持Spring Boot应用的开发体验。 ## 🌟 核心功能概览

gitblog_00747的博客 1095

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Kubernetes(k8s)实战:Kubernetes(k8s)部署Springboot项目

在集群中,pod之间可以通过service 的name进行访问,不仅仅是ip,这就意味着,service中不仅帮我们做了负载均衡,而且做了dns处理。如上,加上hostNetwork: true,就会在nacos上注册的ip端口,会映射成宿主机的ip和端口。如果在同一个k8s集群下,这样部署是没问题的,但是不同k8s集群下,微服务之间就互相不可访问了。我们发现,搭建成功了,用浏览器访问192.168.56.101:30493,发现访问成功了!访问:http://localhost:8080/k8s。

秃了也弱了 5753

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Kubernetes(k8s)服务介绍

Kubernetes,又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s),是一种可自动实施 Linux 容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行 Linux 容器的多组主机聚集在一起,由 Kubernetes 帮助您轻松高效地管理这些集群。而且,这些集群可跨公共云、私有云或混合云部署主机。因此,对于要求快速扩展的云原生应用而言(例如借助 Apache Kafka 进行的实时数据流处理),Kubernet

shenyuanhaojie的博客 5086

作为开发者,看完这篇文章就可以快速上手Kubernetes了

在这之前我们已经学习过了Kubernetes的核心组件,那么作为开发者如何快速利用已知的知识去上手k8s呢

编码人生 867
上一篇: k8s快速入门教程-----3 kubernetes架构
下一篇: k8s快速入门教程-----4 工作负载控制器之deployment
cloud_engineer
博客等级 码龄5年 9390粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值