03.k8s常用的资源

3.k8s常用的资源

3.1 创建pod资源

k8s yaml的主要组成

apiVersion: v1  api版本
kind: pod   资源类型
metadata:   属性
spec:       详细

上传nginx镜像文件,并且上传私有仓库里面
在这里插入图片描述

k8s_pod.yaml
apiVersion: v1
kind: Pod
metadata:name: nginxlabels:app: web
spec:containers:- name: nginximage: 192.168.111.11:5000/nginx:1.13ports:- containerPort: 80

指定文件创建pod

#指定文件创建pod
kubectl create -f k8s_pod.yaml
#查看pod类型的nginx服务运行状态
kubectl get pod nginx -o wide
#pod类型的nginx服务的详细信息
kubectl describe pod nginx

可以看到nodeIP地址和一个容器IP地址,从本地私有仓库pull的镜像文件
在这里插入图片描述

nginx详细信息
在这里插入图片描述

下图可以看到容器ID与上图nginx服务信息显示一致,创建并启动容器
注释:启动一个pod下图会起两个容器,
在这里插入图片描述

下图可以看到pod容器有IP地址,nginx容器没有IP地址

docker inspect 8405c6ebc78a |tail -20

在这里插入图片描述

nginx容器详细信息

docker inspect 731c1535d85e |tail -20

在这里插入图片描述

nginx没有IP地址,是因为网络类型为Container:一个容器与另一个运行中的容器共享网络,也就是nginx容器共享pod容器网络;
注释:使用pod也就是为了实现k8s的核心功能,单单考简单的容器无法实现k8s核心功能。
在这里插入图片描述

一个pod资源:至少由两个容器组成,pod基础容器和业务容器组成
举例子:pod配置文件2,一个pod资源多个业务容器:

apiVersion: v1
kind: Pod
metadata:name: testlabels:app: web
spec:containers:- name: nginximage: 192.168.111.11:5000/nginx:1.13ports:- containerPort: 80- name: busyboximage: 192.168.111.11:5000/busybox:latestcommand: ["sleep","10000"]

创建一个pod两个业务容器
在这里插入图片描述

在192.168.111.13的宿主机上可以看到3个容器,两个业务容器公用pod容器网络,也就是3个容器使用一个IP地址;
业务容器端口分配方式:端口谁先占谁先得。
在这里插入图片描述

pod是k8s最小的资源单位

3.2 ReplicationController资源

rc:保证指定数量的pod始终存活,rc通过标签选择器(selector)来关联pod
rc即:ReplicationController:副本控制器:功能就是起多个相同的pod,而且保证pod数量,多了就删除,少了就增加
在这里插入图片描述

k8s资源的常见操作:
#指定文件创建yaml
kubectl   create  -f   xxx.yaml
#查看pod和rc资源列表
kubectl   get  pod|rc
#查看pod类型nginx服务的详情信息
kubectl  describe  pod  nginx
#删除pod资源nginx服务
kubectl  delete   pod  nginx   或者kubectl delete  -f  xxx.yaml
#编辑修改资源配置文件
kubectl  edit  pod   nginx

创建一个rc

apiVersion: v1
kind: ReplicationController
metadata:name: nginx
spec:replicas: 5 #自动创建pod,为5个podselector:    #标签选择器,根据pod标签识别,哪些pod是我的,如果多了,我就要干掉年轻的app: mywebtemplate:    #给pod定义模板,便于创建podmetadata:    #从改行以下就是pod配置文件一致的,多个pod不能设置一样的name,随机生产labels:    #标签,与rc标签选择器一致,否侧该pod不属于rcapp: mywebspec:containers:- name: mywebimage: 192.168.111.11:5000/nginx:1.13ports:- containerPort: 80

查看同一瞬间起一个rc和5个pod,并且分配宿主机均衡,
rc的名字为nginx,5个pod都是根据rc的名字后面接随机组成的名字
在这里插入图片描述

测试删除一个pod,rc会自动有创建出一个pod
在这里插入图片描述

测试删除一个node192.168.111.13节点,rc会将pod转移到12上自动创建pod,始终保持5个pod,就是这么倔
在这里插入图片描述

将删除的node节点添加回来,在支节点node13上重启服务

systemctl restart kubelet.service

master节点11会自动纳管node13
在这里插入图片描述

标签选择器作用测试,始终保持5个pod
注释:rc创建5个pod的标签是myweb;则单独一个pod:nginx的标签为web
在这里插入图片描述

手动编辑nginx的标签,与rc标签一致
在这里插入图片描述

上下对比查看,rc保持5个pod,优先删除年龄小的3s的pod,删除一个资历浅的
在这里插入图片描述

rc的滚动升级
查看当前nginx版本为nginx.1.13
在这里插入图片描述

拷贝rc配置文件
在这里插入图片描述

新建一个k8s_rc2.yaml并且编辑内容,进行与之前的进行对比
在这里插入图片描述

升级

#rolling-update:滚动升级
#nginx:表示rc的名字为nginx
#--update-period:表示更新周期,我这里设置了10s升级一次
kubectl rolling-update nginx -f k8s_rc2.yaml --update-period=10s

如下图所示:首先会创建一个nginx2的rc升级pod从0到5,降级nginx的rc从5到0,最后nginx2升级成功,删除旧得rc的nginx
在这里插入图片描述

同时查看pod之间间隔时间为10s,并且每个pod的名字为nginx2****
在这里插入图片描述

在查看nginx的版本为nginx1.15,升级成功
在这里插入图片描述

回滚,就是将升级的步骤反过就可以,指定旧版本的yaml文件即可

kubectl rolling-update nginx2 -f k8s_rc.yaml --update-period=1s

回滚完成
在这里插入图片描述

回滚时间
在这里插入图片描述

查看nginx版本为1.13,回滚成功

3.3 service资源

service帮助pod暴露端口
cluster实现负载均衡的功能(轮询,rr策略),如果pod存活,cluster会自动将pod加入到vip里面;
每个nodeip端口都会映射到VIP上面
在这里插入图片描述

创建一个service

apiVersion: v1
kind: Service
metadata:name: myweb
spec:type: NodePort  #端口映射类型ports:- port: 80          #clusterIP端口nodePort: 30000   #node port,如果删除该行定义,则会起随机端口targetPort: 80    #pod portselector:             #标签选择器:关联podapp: myweb

创建svc

kubectl create -f nginx_svc.yaml

可以看到标签、端口映射、VIP
在这里插入图片描述

关联的pod
在这里插入图片描述

浏览器访问node节点IP地址加30000端口即可,出现nginx
在这里插入图片描述

修改nodePort范围扩大

vim  /etc/kubernetes/apiserver
KUBE_API_ARGS="--service-node-port-range=3000-50000"
systemctl restart kube-apiserver.service
service默认使用iptables来实现负载均衡, k8s 1.8新版本中推荐使用lvs(四层负载均衡)

3.4 deployment资源

有rc在滚动升级之后,会造成服务访问中断(就是标签不一致导致的),于是k8s引入了deployment资源
创建deployment

apiVersion: extensions/v1beta1 #扩展的
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: 192.168.111.11:5000/nginx:1.13ports:- containerPort: 80resources:    #资源,该配置可加可不加limits:        #最多能使用多少cpu: 100mrequests:        #这个pod需要多少资源cpu: 100m

创建deploy.yaml文件,rs的标签:app=nginx,pod-template-hash=642398064与rc的标签不一样
deployment,先启动一个rs资源,rs控制pod的数量;
rs 90%的功能和rc一样,甚至比rc更强;

在这里插入图片描述

在根据deploy.yaml文件创建一个svc;
注意:nodePort不能和其他的svc端口发生冲突;selector标签选择器要和上面的deploy中pod的nginx一致;

apiVersion: v1
kind: Service
metadata:name: mynginx
spec:type: NodePort ports:- port: 80  nodePort: 3000targetPort: 80selector:app: nginx

创建svc与rs一致的标签,node端口3000,curl node的IP:3000请求信息为200状态码
在这里插入图片描述

deployment升级和回滚
编辑修改deployment配置文件,进行升级NG

kubectl edit deployment

由原来的nginx:1.13改为nginx:1.15,保存即可
在这里插入图片描述

会重新启一个rs,nginx版本为15,又新启动3个pod,访问NG服务版本为15
在这里插入图片描述

回滚历史版本
查看历史版本

kubectl rollout history deployment

在这里插入图片描述

回滚上一个版本,可以看到NG版本回到了13版本

kubectl rollout undo deployment

在这里插入图片描述

由原来的1版本变成了3版本
在这里插入图片描述

回滚到指定的版本

kubectl rollout undo deployment --to-revision=2

在这里插入图片描述

历史版本查看,有一点不好的地方就是change一直为空,不美观
在这里插入图片描述

命令行创建deployment

#--record:表示记录历史变化
kubectl run nginx  --image=192.168.111.11:5000/nginx:1.13 --replicas=3 --record

在这里插入图片描述

历史变化会记录
在这里插入图片描述

命令行升级到指定的版本

kubectl set image deploy nginx nginx=192.168.111.11:5000/nginx:1.15

在这里插入图片描述

上面的nginx=192.168.111.11:5000/nginx:1.15;就是指定容器的名字nginx
因为一个pod里面可能存在多个业务的容器,每个容器的业务版本也不一致,使用的镜像也不一致,所以要指定容器
在这里插入图片描述

举例子说明
在这里插入图片描述

常用操作命令如下:

#命令行升级版本
kubectl set image deploy nginx nginx=192.168.111.11:5000/nginx:1.15
#查看deployment所有历史版本
kubectl rollout history deployment nginx
#deployment回滚到上一个版本
kubectl rollout undo deployment nginx
#deployment回滚到指定版本
kubectl rollout undo deployment nginx --to-revision=2

3.5 tomcat+mysql测试

在k8s中容器之间相互访问,通过VIP地址!保证不管pod或者node死掉了,都可以互相通信
先创建mysql-rc.yaml文件,启动pod

apiVersion: v1
kind: ReplicationController
metadata:name: mysql
spec:replicas: 1selector:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: 192.168.111.11:5000/mysql:5.7ports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: '123456'

在创建mysql-svc.yaml文件,为pod添加一个clusterIP关联pod

apiVersion: v1
kind: Service
metadata:name: mysql
spec:        #详细下面没有指定类型,默认就是clusterIP类型ports:- port: 3306targetPort: 3306selector:app: mysql

创建mysql-svc.yaml之后过去clusterIP,然后将该IP地址添加到tomcat-rc.yaml配置文件中,让pod通过VIP地址找mysql数据库
在这里插入图片描述

创建tomcat-rc.yaml文件,启动pod

apiVersion: v1
kind: ReplicationController
metadata:name: myweb
spec:replicas: 1selector:app: mywebtemplate:metadata:labels:app: mywebspec:containers:- name: mywebimage: 192.168.111.11:5000/tomcat-app:v2ports:- containerPort: 8080env:- name: MYSQL_SERVICE_HOSTvalue: 'mysql'            #该值要添加mysql的svc的clusterIP地址,可以查看,在添加- name: MYSQL_SERVICE_PORTvalue: '3306'

创建tomcat-svc.yaml文件,为pod添加一个clusterIP关联pod

apiVersion: v1
kind: Service
metadata:name: myweb
spec:type: NodePortports:- port: 8080nodePort: 30008selector:app: myweb

创建完成,查看状态
在这里插入图片描述

浏览器访问nodeip地址http://192.168.111.12:30008/
在这里插入图片描述

在访问一下http://192.168.111.12:30008/demo/
这是要连接数据库的,也可以提交数据
在这里插入图片描述

点击啊上图的Add,添加名字和等级,随意添加然后提交即可
在这里插入图片描述

信息添加到数据库成功
在这里插入图片描述

去系统数据库中查看提交的数据,进数据库中的操作命令和docker命令几乎一样
在这里插入图片描述

可以看到数据库中的数据和提交的一样
在这里插入图片描述

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

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

相关文章

Tuxera Ntfs For Mac 2023的具体使用方法

大家都知道由于操作系统的原因,在苹果电脑上不能够读写NTFS磁盘,但是,今天小编带来的这款tuxera ntfs 2024 mac 破解版,完美的解决了这个问题。这是一款在macOS平台上使用的磁盘读写软件,能够实现苹果Mac OS X系统读写…

Docker的数据管理(数据卷+数据卷容器)

文章目录 一、Docker的数据管理1、概述2、主要的技术(三种数据挂载方式)2.1、数据卷(Volumes)2.2、绑定挂载(Bind mounts)2.3、tmpfs挂载(Tmpfs mounts)2.4、之间的关系(…

示例丨医学、医药类查新点填写参考案例

根据《科技查新技术规范》GB/T 32003-2015,科学技术要点是必须要包含查新点内容的,而查新点就是科学技术要点中能够体现查新项目新颖性和技术进步的技术特征点。 在日常查新工作的接待中,我们发现医学、医药类查新合同上查新点的书写&#x…

计算机tcp/ip网络通信过程

目录 (1)同一网段两台计算机通信过程 (2)不同网段的两台计算机通信过程 (3)目的主机收到数据包后的解包过程 (1)同一网段两台计算机通信过程 如果两台计算机在同一个局域网中的同…

算法(九)希尔排序

文章目录 希尔排序简介代码实现 希尔排序简介 希尔排序(shell sort)选定一个小于N(数列长度)的整数gap作为第一增量,然后将所有距离为gap的元素分成一组,然后对每一组的元素进行插入排序。然后再取一个比前…

(1+X)Java程序设计高级(一)

Throwable:异常的基类,所有异常都继承自 java.lang.Throwable 类,Throwable 类有两个直接子类:Error 类和 Exception 类。Error:是 Java 应用程序本身无法恢复的严重错误,应用程序不需要捕获、处理这些严重…

7.1 Go 错误的概念

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【SQL每日一练】查询二进制树节点

文章目录 题目一、题析二、题解1.MySQL/SqlServer2.Oracle 题目 有一个表BST,其中包含两列:N和P,其中N表示二进制树中节点的值,P是N的父级。 编写一个查询,以查找按节点值排序的二进制树的节点类型。为每个节点输出以…

迅狐跨境电商系统源码:技术栈与多端集成

随着全球化贸易的不断深入,跨境电商系统源码成为了连接不同国家和地区消费者与商家的重要桥梁。本文将探讨跨境电商系统源码的技术栈以及如何通过多端集成来提升用户体验。 技术栈概览 跨境电商系统源码的技术栈是构建高效、稳定平台的基础。以下是构建跨境电商系…

OpenCV中的圆形标靶检测——背景概述

圆形标靶 如下图所示,相机标定中我们使用带有固定间距图案阵列的平板,来得到高精度的标靶像素坐标,进而计算得到相机的内参、畸变系数,相机之间的变换关系,和相机与世界坐标系的变换关系(即外参)。 不过标靶的形式多样,从图案类型来看常见的有棋盘格、圆形标靶…

音视频开发13 FFmpeg 音频 相关格式分析 -- AAC ADTS格式分析

这一节,我们学习常用的音频的格式 AAC,重点是掌握 AAC的传输格式 ADTS 头部的信息,目的是 : 当音频数据有问题的时候,如果是AAC的编码,在分析 头部信息的时候能够根据头部信息 判断问题是否出现在 头部。 A…

今天来讲讲,抖音小店商品的上架流程以及优化细节~

大家好,我是喷火龙。 做抖音小店选品选好之后,优化上架商品也是很重要的,也有很多需要注意的细节,今天就来给大家讲讲。 首先,软件采集,大致分为七步。 1. 以抖精灵为例,注册账号登录&#x…

到无穷大和更远,用分形更好

文章目录 一、说明二、分形到底是什么?三、更多更深刻的四、引进无穷小会产生什么样的怪事?五、希尔伯特曲线六、还有什么有趣的要补充的吗? 一、说明 ​​​​​​​数学领域有太多有趣的领域,领域我特别感兴趣。这是一个奇妙的…

怎么看自己电脑的配置?提升电脑的使用效率

了解自己电脑的配置是非常重要的,它可以帮助您了解电脑的性能水平,从而更好地选择适合的软件和游戏,或者进行系统升级和维护。然而,许多用户可能不知道怎么看自己电脑的配置信息。本文将介绍三种简单的方法,帮助您轻松…

android studio修改字体大小

android studio修改菜单栏、工具栏字体大小 android studio修改编辑框字体大小

常见制氮机的规格的及其特点介绍

制氮机根据其产气量、应用领域和设计特点,可以分为多种规格,满足不同行业的具体需求。以下是一些常见制氮机的规格的及其特点介绍: 制氮机的规格通常以其每小时制氮量进行分类。常见的规格有10L制氮机、50L制氮机、100L制氮机、500L制氮机以及…

复习leetcode第二题:两数相加

本文会给出笔者自己的解答(代码较为冗余,其实就是屎山代码)以及优秀代码的解析 下图是题目 解法1(笔者所使用的办法): 解题思路: 以下思路是基于示例1(上图)思考的 步骤…

2024年终端安全管理系统最新排名(2024终端安全管理软件TOP5)

在2024年,随着企业数字化转型的加速和网络安全威胁的日益严峻,终端安全管理系统的重要性愈发凸显。终端作为企业数据交互的关键节点,其安全性直接关系到企业的运营和数据的完整性。因此,各大终端安全管理系统厂商纷纷推出新的产品…

基于Vue+Node.js的购物网站设计与实现-计算机毕业设计源码28500

摘 要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用。简单的流程、便捷可靠的支付方式、快捷畅通的物流快递、安全的信息保护都使得电子商务越来越赢得网民们的青睐。现…

数据库系统概念(第七周 第一堂)(E-R模型)

目录 前言 基本概念 观点与模型 作用与要求 E-R模型元素 实体(entity) 实体集(entity set) 属性(attribute) 域(domain) 码 (key) 联系 &#x…