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.rhkb.cn/news/336620.html

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

相关文章

自制数据#国家2000投影带划分范围shp(高斯克吕格 3°/6°分带)

国家2000投影分带范围(3) https://www.123pan.com/s/lqEljv-xvCHA.html 国家2000投影分带范围(6) https://www.123pan.com/s/lqEljv-xvCHA.html 声明:转载此文不为商业用途。文字和图片版权归原作者所有,…

【Python编程实践2/3】Python图像处理模块(上)

目录 引言 目标 安装模块 Windows系统 macOS系统 路径 Windows路径 ​编辑macOS路径 windows路径报错 windows路径前的r 示例代码 windows快速查看路径 macOS快速查看路径 打开图片 展示图片 下节预告 总结 引言 欢迎各位大佬垂阅本篇Python实践博客&a…

vue-Dialog 自定义title样式

展示结果 vue代码 <el-dialog :title"title" :visible.sync"classifyOpen" width"500px" :showClose"false" class"aboutDialog"> <el-form :model"classifyForm" :rules"classifyRules">…

【赠书第26期】AI绘画教程:Midjourney使用方法与技巧从入门到精通

文章目录 前言 1 Midjourney入门指南 1.1 注册与登录 1.2 界面熟悉 1.3 基础操作 2 Midjourney进阶技巧 2.1 描述词优化 2.2 参数调整 2.3 迭代生成 3 Midjourney高级应用 3.1 创意启发 3.2 团队协作 3.3 商业应用 4 总结与展望 5 推荐图书 6 粉丝福利 前言 在…

自动控制:控制系统的稳定性

自动控制&#xff1a;控制系统的稳定性 在自动控制领域&#xff0c;控制系统的稳定性是一个至关重要的问题。稳定性决定了系统在受到扰动后是否能够恢复到平衡状态。本文将介绍控制系统稳定性的基本概念、如何利用特征值分析稳定性&#xff0c;并通过具体示例和Python代码展示…

【香橙派 AIpro】新手保姆级开箱教程:Linux镜像+vscode远程连接

香橙派 AIpro 开发板 AI 应用部署测评 写在最前面一、开发板概述官方资料试用印象适用场景 二、详细开发前准备步骤1. 环境准备2. 环境搭建3. vscode安装ssh插件4. 香橙派 AIpro 添加连接配置5. 连接香橙派 AIpro6. SSH配置 二、详细开发步骤1. 登录 juypter lab2. 样例运行3. …

基于51单片机的温度+烟雾报警系统设计

一.硬件方案 本设计采用51单片机为核心控制器&#xff0c;利用气体传感器MQ-2、ADC0832模数转换器、DS18B20温度传感器等实现基本功能。通过这些传感器和芯片&#xff0c;当环境中可燃气体浓度或温度等发生变化时系统会发出相应的灯光报警信号和声音报警信号&#xff0c;以此来…

【C语言回顾】预处理

前言1. 简单概要2. 预处理命令讲解结语 上期回顾: 【C语言回顾】编译和链接 个人主页&#xff1a;C_GUIQU 归属专栏&#xff1a;【C语言学习】 前言 各位小伙伴大家好&#xff01;上期小编给大家讲解了C语言中的编译和链接&#xff0c;接下来我们讲解一下预处理&#xff01; …

嘉立创使用gif

新建原理图 边框设置2 新建pcb图 放置焊盘 排列焊盘 新建符号 封号向导 新建封装 封装向导 符号与封装联结 原件查找 drc设计规则&#xff08;线之间的距离等 布线冲突 顶底层切换 T ,B 顶底连线&#xff0c;自动创造过孔 铺铜 泪滴 网格大小 吸附 元件库

【机器学习】Adaboost: 强化弱学习器的自适应提升方法

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Adaboost: 强化弱学习器的自适应提升方法引言Adaboost基础概念弱学习器与强学习…

C++ vector 模拟实现

vector的底层也是一个动态数组&#xff0c;他与 string 的区别就是&#xff0c;string 是专门用来存储字符类数据的&#xff0c;为了兼容C语言&#xff0c;使用C语言的接口&#xff0c;在string的动态数组内都会都开一块空间用来存 \0 &#xff0c;而vector则不会。 首先我们要…

【Linux】TCP协议【上】{协议段属性:源端口号/目的端口号/序号/确认序号/窗口大小/紧急指针/标记位}

文章目录 1.引入2.协议段格式4位首部长度16位窗口大小32位序号思考三个问题【demo】标记位URG: 紧急指针是否有效提升某报文被处理优先级【0表示不设置1表示设置】ACK: 确认号是否有效PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带R…

《QT实用小工具·六十八》基于QMenu开发的炫酷菜单栏

1、概述 源码放在文章末尾 该项目基于QMenu实现了炫酷的菜单栏效果&#xff0c;包含了如下功能&#xff1a; 1、实现了类似word菜单栏的效果&#xff0c;可以在菜单栏中横向添加不同的菜单 2、鼠标点击菜单可以展开菜单栏&#xff0c;再次点击菜单可以收起菜单栏 3、鼠标点击笑…

C++ wasm 使用教程

环境搭建 git clone https://github.com/emscripten-core/emsdk.gitgit pull./emsdk install latest./emsdk activate latestsource ./emsdk_env.sh./emcc -v && ./emcc c11__Thread_local.c -s WASM_WORKERS --threadprofiler --memoryprofiler -v -o test.html &…

鸿蒙OS开发:【一次开发,多端部署】(分栏控件)

一多分栏控件 介绍 本示例分别展示了多场景下&#xff0c;一多分栏控件的响应式变化效果。 本示例分别用到了[SideBarContainer]组件与[Navigation]组件&#xff0c;对应使用场景如下&#xff1a; ABC&#xff1a;即SideBarContainer组件组合Navigation组件AC&#xff1a;S…

AI企业需要“联盟营销”?一文带你探索AI企业营销新玩法!

为什么联盟营销对AI业务有较大优势 联盟营销在电商领域、saas领域与其他产品领域同样有效。在AI业务中&#xff0c;它有效的原因与其他领域大不相同。 高好奇心和试用率 AI领域是创新的热点。它吸引了一群渴望探索和尝试每一项新技术的人群。这种蓬勃的好奇心为聪明的AI企业提…

Linux 编译器gcc/g++使用

gcc/g同理 编译器运行过程 1. 预处理&#xff08;进行宏替换) gcc -E a.c -o a.i 预处理后还是c语言 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 告诉gcc&#xff0c;从现在开始进行程序的翻译&#xff0c;将预处理工作做完停下 2. 编译&#x…

【因果推断python】2_因果关系初步2

目录 偏差 关键思想 偏差 偏差是使关联不同于因果关系的原因。幸运的是&#xff0c;我们的直觉很容易理解。让我们在课堂示例中回顾一下我们的平板电脑。当面对声称为孩子提供平板电脑的学校会获得更高考试成绩的说法时&#xff0c;我们可以反驳说&#xff0c;即使没有平板电…

新疆 | 金石商砼效率革命背后的逻辑

走进标杆企业&#xff0c;感受名企力量&#xff0c;探寻学习优秀企业领先之道。 本期要跟砼行们推介的标杆企业是新疆砼行业的龙头企业&#xff1a;新疆兵团建工金石商品混凝土有限责任公司&#xff08;以下简称&#xff1a;新疆金石&#xff09;。 从年产80万方到120万方&am…

Go 和 Delphi 定义可变参数函数的对比

使用可变参数函数具有灵活性、重用性、简化调用等优点&#xff0c;各个语言有各自定义可变参数函数的方法&#xff0c;也有通用的处理方法&#xff0c;比如使用数组、定义参数结构体、使用泛型等。 这里总结记录一下 go、delphi 的常用的定义可变参数函数的方式&#xff01; 一…