K8s(kubernetes)介绍以及原理解析

news/2024/5/17 10:36:20/文章来源:https://blog.csdn.net/kiligzzz/article/details/117788921

K8s(kubernetes)

云原生

在这里插入图片描述

服务部署模式

物理机模式–>虚拟化模式–>云端模式(云原生模式)

在这里插入图片描述

K8s简介及架构

容器编排技术,用来管理容器

但是不直接管理容器,通过管理pod来间接管理容器

pod是k8s最小操作单元

pod内部封装的是容器

容器内部部署的就是应用程序

pod也是一个容器,虚拟化的机器

pod内部封装的是docker

在这里插入图片描述

K8s解决的问题

在这里插入图片描述

部署

指令部署

kubectl run my-app --image=hub.kaikeba.com/library/myapp:v1 -port=80

yaml文件部署

deployment.yaml

apiVersion: app/v1
kind: Depolyment
metadata:name: myapp-deploymentnamespace: default
spec:replicas: 3selector:matchLabels:app: myapprelease: stabletemplate:metadata:labels:app: myapprelease: stableenv: testspec:containers:- name: myappimage: hub.kaikeba.com/library/nginx:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80

service.yaml

apiVersion: v1
kind: Service
metadata:name: nginx-svcnamespace: default
spec:type: NodePortselector:app: myapprelease: stableports:- name: httpport: 80targetPort: 80

yaml文件解析

在这里插入图片描述

简单命令

#查看当前所有pod,查看pod详细信息
kubectl get pod (-o wide)#查看当前所有svc即服务
kubectl get svc#查看资源对象
kubectl get deployment#查看副本
kubectl get rs#查看描述信息
kubectl describe pod xxx#查看命名空间
kubectl get ns#单个容器登陆
kubectl exec -it podname -sh#多个容器登陆
kubectl exec -it podName -c containerName -sh#查询容器日志
kubectl logs -f podName#根据yaml文件创建pod或svc
kubectl apply -f xxx.yaml#根据yaml文件删除pod或svc
kubectl delete -f xxx.yaml#将副本扩容3份
kubectl scaled deployment my-app --replicas=3#删除pod
kubectl delete pod xxxx#创建服务
kubectl expose deployment my-app --port=80 --target-port=80#修改service文件
kubectl edit svc my-app#滚动更新
kubectl set image depoloyment/my-app my-app=hub.kaikeba.com/library/myapp:v2#帮助文档
kubectl --help

K8s架构原理及核心组件运作机制

副本控制器(ReplicaSet)

控制副本数量,保证副本数量永远和预期设定的数量一致(自愈能力)

服务永远处于高可用状态

在这里插入图片描述

部署对象(deployment)

资源对象,支持服务的滚动更新

部署说明

在这里插入图片描述

有状态服务

有实时的数据需要存储

集群服务中,拿走一个服务,一段时间后放回去,对服务集群有影响(影响数据完整性,数据一致性)

无状态服务

与有状态服务相反

负载均衡

不能使用的方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7bgaCelK-1623320074043)(Images/image-20210519204055712.png)]

Openresty、nginx都不具备服务发放能力,也就是PodIP地址、hostname发生了变化,但是Openresty、nginx仅是一个静态配置,无法动态发现PodIP已经发生了变化,因此这两个无法实现访问pod这个负载均衡的方案

解决方案:使用service资源对象,此对象是由k8s创建的

使用的方式

复制多个pod实现负载均衡,使用service资源对象,实现多个pod之间的请求转发

通过标签选择器来选择属于它的pod,从而知道应该把请求发给那些pod

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qVtoOaKO-1623320074045)(Images/image-20210519150542170.png)]

Tcp 转发,service的ip端口对应三个pod的ip端口,采用轮询策略

访问服务原理

通过dns域名解析出ip地址,实现服务的访问

pod内网访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YlGEnzPW-1623320074046)(Images/image-20210519153152889.png)]

pod跨物理访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XdorOZVl-1623320074047)(Images/image-20210519155518678.png)]

pod外网访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z1YGrode-1623320074048)(Images/image-20210519155920167.png)]

开辟一个物理端口,此端口必须和service端口做一个映射,当外网请求来临时,先发给物理机,再由物理机转发给service,再由service将请求转发给内部pod服务

看见的service的ip地址是局域网ip地址,不能对外网提供访问,需要将serviceIp类型由ClusterIP修改为NodePort(会在每一个node节点都开辟一个相同的端口)

访问方式:物理机IP:物理机端口

Pod详解

Pod是什么

pod是容器(相当于一台独立的机器,独立沙箱环境)

pod内部封装的是docker容器

pod有自己的ip地址和hostname

pod相当于是一台物理机(服务器),实际上pod是一个虚拟化的容器(以进程模式运行在操作系统内部),在物理节点上,pod和pod之间相互隔离的一个沙箱环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjQm2W12-1623320074049)(Images/image-20210519181702426.png)]

Pod能干什么

官方:服务上线部署的时候,pod通常被用来部署一组相关的服务,访问链路上属于上下游的访问关系,就叫一组相关的服务,但是,为了让k8s更好的管理服务,因此通常一个pod内部只部署一个服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDHNMhRU-1623320074051)(Images/image-20210519182054289.png)]

Pod核心原理

业务容器共享虚拟网络栈和数据卷

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k2Eolj18-1623320074053)(Images/image-20210519201456163.png)]

Pod数据卷

Volume数据卷是容器共享的数据卷,当容器宕机后,volume数据卷不会消失

Volume数据卷生命周期是随着pod的变化而变化的,因此pod宕机,volume数据卷就消失了

Service VIP

Service就是k8s的资源对象(service是一个运行在node节点进程),Service有自己的IP地址,有自己的端口,一旦创建IP不变

Service相当于服务网关一样,所有的请求都必须经过service拦截,然后对请求进行转发

设计Service的原因:屏蔽底层因pod异常,宕机等等发生ip、hostname变化所造成的一个影响,使得用户不需要关心底层pod到底是如何变化的,或者不需要关心PodIP地址、hostname的变化

一组业务pod对应一个service对象,一个service对象将会根据标签选择器匹配属于这个service控制的pod业务组

service不存在单点故障,service资源对象会在每个node节点都存储一份,service Vip资源高可用是由etcd来保障的

Service解析图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dfetevnt-1623320074056)(Images/image-20210520105710893.png)]

K8s利用endpoints controller控制器调用watch接口来发现pod服务变化,及时更新在etcd中维护的service对应的PodIP地址的关系

Service VIP产生

  • 服务部署的时候人工创建的

K8s网络解析

DNS+ClusterIP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RRHD2s4-1623320074058)(Images/image-20210520142327708.png)]

集群内网访问外部服务

直接访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-su2P3gLJ-1623320074059)(Images/image-20210520143212828.png)]

通过endpoints转发

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D7Kj9ZB1-1623320074060)(Images/image-20210520143048132.png)]

外网访问集群内网服务

nodeport

hostport

load balance

HPA

它可以根据当前pod资源的使用率(如CPU、磁盘、内存等),进行副本数的动态的扩容与缩容,以便减轻各个pod的压力。

Ingress

其实就是一组基于DNS名称(host)或URL路径把请求转发到指定的Service资源的规则。用于将集群外部的请求流量转发到集群内部完成的服务发布。我们需要明白的是,Ingress资源自身不能进行“流量穿透”,仅仅是一组规则的集合,这些集合规则还需要其他功能的辅助,比如监听某套接字,然后根据这些规则的匹配进行路由转发,这些能够为Ingress资源监听套接字并将流量转发的组件就是Ingress Controller。

apiVersion: extensions/v1beta1		
kind: Ingress		
metadata:			name: ingress-myapp   namespace: default     annotations:          kubernetes.io/ingress.class: "nginx"
spec:     rules:   - host: myapp.magedu.com   http:paths:       - path:       backend:    serviceName: myappservicePort: 80

Ingress资源时基于HTTP虚拟主机或URL的转发规则,需要强调的是,这是一条转发规则。它在资源配置清单中的spec字段中嵌套了rules、backend和tls等字段进行定义。如下示例中定义了一个Ingress资源,其包含了一个转发规则:将发往myapp.magedu.com的请求,代理给一个名字为myapp的Service资源。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRRMvl2D-1623320074061)(Images/image-20210520151725866.png)]

创建后端服务->创建Ingress服务

多域名服务

即配置多个- host

同一域名访问多个服务

annotations:nginx.ingress.kubernetes.io/rewrite-target:/	#请求重写配置两个- path
-path: /nginx
-path: /tomcat

https方式

云原生环境部署

部署秒杀系统:

  1. deployment
  2. service
  3. hpa(扩容)
  4. ingress(外网访问)

动态扩容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_4880.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android的handler消息收发处理——子线程与主线程(UI线程)间的通信

目录 写在前面 基础概念 什么是handler? 什么是looper? 什么是消息队列(MessageQueue)? 在子线程中使用子线程中的数据更新UI线程 主线程与子线程通信实例(程序代码) 子线程获取主线程h…

01.Singleton单件(单例)

一&#xff1a;动机&#xff08;Motivation&#xff09; <1>在软件系统中&#xff0c;经常有这样一些特殊的类&#xff0c;必须保证它们在系统中只存在一个实例&#xff0c;才能确保它们的逻辑正确性、以及良好的效率。 <2>如何绕过常规的构造器&#xff0c;提供一…

堆技巧 数组反向越界泄露地址

四川省2021信息安全技术大赛 classroom 痛苦痛苦痛苦&#xff0c;调了半天才找到数组起始地址&#xff0c;还是自己太菜了&#xff0c;好好记录一下这题 题目给了libc&#xff0c;2.31的题 嗯&#xff0c;可以考虑覆盖got表或者hook函数 打开ida发现是c的题&#xff0c;认真…

目前期货开户手续费比较透明

一、期货公司手续费 只要交易买卖期货就会产生期货手续费&#xff0c;不同的期货交易所&#xff0c;商品期货手续费收取标准不一样&#xff0c;首先&#xff0c;我们需要弄清楚期货手续费的组成和分类&#xff1a; 期货实际收取的手续费期货交易所手续费期货公司额外加收的佣…

flask-sqlalchemy连接数据库

1、安装flask_sqlalchemy和pymysql包 pip install flask-sqlalchemy pip install pymysql 2、进行配置 使用Flask-SQLAlchemy扩展操作数据库&#xff0c;首先需要通过URL建立数据库连接&#xff0c;必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI中。 HOSTNAME 127.0…

MySQL入门:数据库是什么 | SQL是什么 | MySQL是什么

文章目录数据库数据库管理系统&#xff08;DBMS&#xff09;的种类数据库的结构什么是SQLMySQLSQL语句 | 种类SQL 的基本书写规则存储引擎参考与总结全文约 3235 字&#xff0c;预计阅读时长&#xff1a; 9分钟数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库?…

dubbo和springCloud

Dubbo 高性能的java RPC框架 架构 init:初始化 async:异步 sync同步 0:需要容器启动例如Tomcat 1:注册ip端口以及一些东西到注册中心 2:订阅服务快速入门 Zookeeper(官方推荐注册中心,同时还有Redis,Simper,Multicast,Nacos等) 安装:默认端口2181 Dubbo快速入门 传统方法,需要…

C/C++后端开发学习路线总结(附带实习学习经历分享)

大家好哇&#xff0c;九月份了&#xff1b;不知道大家的工作或者实习都安排的怎么样了&#xff1f;反正狮作为一个过来人只能在各种论坛上面看到都是哀鸿遍野&#xff1b;暗自惊心感慨现在年轻人不好混啊~ 然后呢&#xff0c;狮最近后台收到不少C/C后端怎么学的邀请回答&#…

广西大学口袋开发板之抢答器

任务要求&#xff1a; 四名选手各有一个抢答按键&#xff0c;按键的编号以及指示灯&#xff08;手柄板上的LED模块&#xff09;的编号与选手的编号相对应&#xff0c;抢答器具有编号的识别和数据的锁存、显示以及提示音功能。 评分细则&#xff1a; 裁判按下开始键后&#x…

2022年0902Maven的继承和利用Idea创建Maven工程的内容<第五课>

目录 第一部分 Maven的继承 1 概念 2 作用 3 它的背景是&#xff1a; 4 它背后的需求是&#xff1a; 在每一个 module 中各自维护各自的依赖信息很容易发生出入&#xff0c;不易统一管理。 使用同一个框架内的不同 jar 包&#xff0c;它们应该是同一个版本&#xff0c;所…

电脑无线5g网卡发现不了网件R7000的Wifi 5g网络

原因是因为 网件R7000的5g网络默认是100的频道&#xff0c; 把频道固定的153然后把路由器离拖线板和其他设备远一点

第十章Redis_主从复制

10.Redis_主从复制 文章目录10.Redis_主从复制10.1主从复制是什么?10.2主从复制能干嘛10.3怎么玩&#xff1a;主从复制10.3.1在根目录下创建myredis文件夹10.3.2复制/etc/redis.conf文件到myredis下&#xff0c;文件名和之前保持一致10.3.3配置一主两从&#xff0c;创建三个配…

687 最长同值路径——Leetcode 天天刷(2022.9.2)【DFS】

687 最长同值路径——Leetcode 天天刷&#xff08;2022.9.2&#xff09;【DFS】 文章目录687 最长同值路径——Leetcode 天天刷&#xff08;2022.9.2&#xff09;【DFS】前言题目描述示例提示信息本地调试运行输入格式输出格式输入样例输出样例层次遍历构造二叉树解法——DFS细…

新店速递丨白玉兰(商务)酒店赣榆吾悦广场店 正式上线

第242家 白玉兰酒店再下连云港 2022年9月&#xff0c;锦江酒店&#xff08;中国区&#xff09;旗下优选服务酒店品牌“白玉兰酒店”连云港再添一员&#xff0c;迎来门店——白玉兰&#xff08;商务&#xff09;酒店赣榆吾悦广场酒店正式上线。这也是全国第242家开业的白玉兰酒…

Git做版本管理及CHANGELOG

规范化的提交信息除了能很好描述项目的修改&#xff0c;还有一个很好的作用就是能根据提交记录来生成CHANGELOG.MD和自动生成版本号等功能。 standard-version 一个用于生成CHANGELOG.md和进行SemVer(语义化版本号)发版的命令行工具 主要功能&#xff1a; 自动修改最新版本…

6-2 多项式求值——15分

本题要求实现一个函数,计算阶数为n,系数为a[0] … a[n]的多项式(上图) 在x点的值。 函数接口定义: double f( int n, double a[], double x );其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。 裁判测试程序样例: #include <stdio.h>#def…

Docker - 容器的网络模式

目录 一、bridge模式 查看容器的有哪几种网络类型 二、host模式 三、none模式 四、container模式 五、overlay模式 创建一个桥接类型的网卡 使用刚才创建的网卡来创建容器 查看刚才使用网卡创建的容器的ip地址 我们指定网卡创建的容器IP地址是 &#xff1a;172.18.0.…

计算机网络——网络协议

目录 网络协议 网络协议的三要素 协议的分层模型 计算机网络层次结构的好处 计算机网络的体系结构 OSI与TCP/IP的体系结构的比较 网络协议 1、计算机网络中的数据交换必须遵守事先约定好的规则。 2、这些规则明确规定了所交换的数据的格式和时序&#xff0c;以及在发送或…

SpringBoot 整合 RabbitMQ 实现消息回调、手动确认 (二) 有图 有源码

创建时间 2022年8月29日 标签&#xff1a;Java、SpringBoot、RabbitMQ、队列 注释&#xff1a;新建SpringBoot项目实操RabbitMQ实现消息回调、手动确认 来源&#xff1a;CSDN博主&#xff1a;小目标青年 文章目录SpringBoot 整合 RabbitMQ 回调确认模式生产者推送消息回调1、消…

3天精通Postman---动态参数amp;断言amp;CSV数据驱动amp;Mock Server

DAY2课题&#xff1a;Postman接口关联&动态参数&断言&CSV数据驱动目录 一、接口关联&#xff0c;接口依赖&#xff0c;多接口串联&#xff0c;组合API 二、Postman的动态参数&#xff08;随机数&#xff09; 三、Postman的环境变量和全局变量 四、Postman断言 五、…