运维 kubernetes(k8s)基础学习

news2024/10/6 6:49:32

一、容器相关
1、发展历程:主机–虚拟机–容器
主机类似别墅的概念,一个地基上盖的房子只属于一个人家,很多房子会空出来,资源比较空闲浪费。
虚拟机类似楼房,一个地基上盖的楼房住着很多人家,相对主机模式提升了资源利用率。
容器类似租房的公寓,一个地基上盖的楼房,每一个房间属于一个人,相比虚拟机进一步提升了资源利用率。

2、虚拟机和容器的区别:
一个主机上可以有多个虚拟机,虚拟机部署需要借助主机上的Hypervisor(比如:VM软件)实现。每一个虚拟机包含(应用app+依赖库+操作系统)。
一个主机上可以部署多个容器服务,容器服务依赖宿主机上安装Docker。每一个容器服务包含(应用app+依赖库)。
相对而言,容器的空间更省,性能更高。
在这里插入图片描述

3、容器概念:
为了降低虚拟机造成的物理主机资源浪费,提高物理主机的资源利用率,并能够提供像虚拟机一样良好的应用程序隔离运行环境,人们把这种轻量级的虚拟机,称为“容器”。

4、容器管理工具:
容器管理工具类似于虚拟机管理工具,主要用于容器的创建、启动、关闭、删除等。
容器管理工具有:
docker公司的docker
国内阿里公司的 Pouch
LXC、LXD、RKT等等

5、容器编排工具:
容器管理工具可以完成容器的基础管理,对于完成企业中更加复杂的应用部署,如需要对多应用的系统进行部署时,就需要更加复杂的工具来完成对容器运行应用的编排,这就是我们所说的容器编排部署工具。
概括:
Docker是容器管理工具,可以实现简单的项目部署。
Kubernetes是容器编排工具,可以实现更加复杂的应用部署。

6、常见容器编排工具:
(1)、docker 三剑客
–docker machine(部署和管理容器主机)
Docker Machine is a tool that lets you install Docker Engine on virtual hosts, and manage the hosts with docker-machine commands.
–docker compose(通过yaml,快速部署多个应用)
Compose is a tool for defining and running multicontainer Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.
–docker swarm (容器编排工具,管理docker集群)
Docker Swarm is native clustering for Docker.
(2)、mesos + marathon (分布式管理主机)
mesos主要作用是在分布式计算过程中,对计算机资源进行管理和分配。是基于Mesos的私有PaaS,它实现了Mesos的Framework。Marathon实现了服务发现和负载平衡、
为部署提供REST API服务、授权和SSL、配置约束等功能。Marathon支持通过Shell命令和Docker部署应用。 提供Web界面、支持cpu/mem、实例数等参数设置,支持单应用的Scale,但不支持复杂的集群定义。Mesos和Marathon的关系 如果将Mesos类比为操作系统的内核,负责资源调度。则Marathon可以类比为服务管理系统,比如init,systemd或upstart等系统,用来管理应用的状态信息。Marathon将应用程序部署为长时间运行的Mesos任务。
(3)、kubernetes
Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications. 主要用于管理云平台中多个主机上的容器化的应用, Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),提供了应用部署,规划,更新,维护的一种机制。

二、Kubernetes
1、官网:
https://kubernetes.io/

2、开源托管平台:
https://github.com/kubernetes/

3、概念:
Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes能够进行应用的自动化部署和扩缩容。在Kubernetes中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。

4、功能:
(1)、自动装箱
基于容器对应用运行环境的资源配置要求自动部署应用容器
(2)、自我修复(自愈能力)
–当容器失败时,会对容器进行重启
–当所部署的Node节点有问题时,会对容器进行重新部署和重新调度
–当容器未通过监控检查时,会关闭此容器
–直到容器正常运行时,才会对外提供服务
(3)、水平扩展
通过简单的命令、用户UI界面或基于CPU等资源使用情况,对应用容器进行规模扩大或规模剪裁
(4)、服务发现
用户不需要使用额外的服务发现机制,就能够基于Kubernetes自身能力实现服务发现和负载均衡
(5)、滚动更新
可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
(6)、版本回退
可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
(7)密钥和配置管理
在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
(8)、存储编排
–自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要
–存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph、Cinder等)、公共云存储服务等

5、对node和pod的支持:
Node(节点)数支持
早期版本管理100台
现版本可以管理2000台
pod管理支持
早期版本管理1000个
现版本管理150000个

三、k8s架构
1、应用部署架构分类
(1)、无中心节点架构(该架构中,所有的节点都是平等关系)
GlusterFS
(2)、有中心节点架构(该架构中,存在核心节点负责管理和调度其他节点)
HDFS
K8S

2、k8s架构:
(1)、Master Node
k8s集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;
Master Node由API Server、Scheduler、Cluster State Store(ETCD数据库)和Controller Manger Server所组成;
(2)、Worker Node集群工作节点,运行用户业务应用容器;
Worker Node包含kubelet、kube proxy和Container Runtime;
在这里插入图片描述
3、运行流程:
K8s分为两个大部分,master节点和worker节点
用户通过命令或者界面操作调用到matser节点的api service。Api service会根据请求的类型和业务去调度相应的worker进行工作,此外包括定时任务可以和apiservice通信,数据持久保存等也是通过apiserver实现。
在这里插入图片描述
四、集群部署
1、部署方式
(1)、使用二进制源码包部署(困难,复杂,不推荐)
(2)、使用kubeadm部署(推荐)

2、具体部署过程相对还是挺麻烦的,这里就略过了,最终结果为1个master节点,2个worker节点
注意:生产环境为了保证高可用,matser节点需要部署集群,1个节点肯定不够用。

五、Kubectl客户端
1、概述
在部署完成k8s集群后,我们需要通过一系列的命令来管理k8s集群。kubectl是一个管理k8s集群的客户端。可以通过命令行工具来使用k8s集群。

2、查看是否安装
rpm -qa | grep kubectl
在这里插入图片描述
如果没有安装的话,说明前面部署的集群还是不完善的,自己通过yum intsall的方式网上找一下部署吧

3、常用命令
在这里插入图片描述
在这里插入图片描述

4、使用实例
(1)、查看k8s集群的节点node(机器)信息和pod信息
pods是归属在指定的命名空间中的,可以指定-n 查看指定命名空间的pod信息
在这里插入图片描述

六、yaml
1、格式
格式和springboot的yaml配置文件格式一致

2、作用
通过yaml文件配置部署信息,可以快速部署应用,namespace,service等,可以大大加快部署效率

3、使用实例
语法还是挺多的,套路的方式比较深,需要的时候建议直接网上百度找一个比较好,没必要背下来那么多东西。
(1)、创建一个namespace
在这里插入图片描述
(2)、创建一个pod
在这里插入图片描述

七、namespace
1、概述
通常开发会有很多项目,也会有很多环境(开发,测试,预生产环境)等,当机器足够的话,可以在不同的机器进行部署不同的项目已经环境,但是如果机器不足的话,可以使用k8s集群的命名空间(namespace)来实现开发测试环境的隔离。

2、作用
在多租户的情况下,实现资源隔离,可以对每一个命名空间做资源分配,不同命名空间下的资源互相隔离

3、常用指令
(1)、查看命名空间
在这里插入图片描述
(2)、创建命名空间
命令行方式
在这里插入图片描述
yaml方式创建
编写yaml文件,执行yaml文件
在这里插入图片描述
(3)、删除命名空间
命令行方式
在这里插入图片描述
通过yaml方式删除命名空间(yaml文件和创建用同一个文件)
在这里插入图片描述

八、pod
1、概述:
pod是k8s集群的最小运行单元,是容器的封装。
可以理解pod就是一个容器的壳子,docker部署的容器服务是一粒花生米,pod是容器外部的花生壳。pod包裹着docker部署的容器服务。

2、使用示例
(1)、查看pod
在这里插入图片描述

在这里插入图片描述
(2)、创建pod
编写yaml文件,执行yaml文件创建
在这里插入图片描述
在这里插入图片描述
(3)、删除pod
命令行方式
在这里插入图片描述
yaml方式删除(指定和创建相同的yaml文件)
在这里插入图片描述

九、controller
1、概述:
controller,控制器,用于对应用资源对象的监控,可以创建应用,删除应用等,类似docker run运行容器服务。当pod出现问题时,会把pod重新拉起,以达到用户期望的状态(实现高可用)

2、常见的控制器
通常仅使用Deployment
在这里插入图片描述
3、deployment控制器
据有上线部署、滚动升级、创建副本、回滚到之前某一版本等功能;deployment包含replicaSet,除非需要自定义升级功能或者根本不需要升级pod,否则还是建议使用deployment而不是直接使用ReplicaSet。

4、使用实例
(1)、通过deployment创建应用
–image-pull-policy-IfNotPresent 镜像拉取策略,没有时拉取,有直接使用
–replicas=2 部署两个副本,即运行两个pod示例
在这里插入图片描述
(2)、查看deployment应用
在这里插入图片描述
查看pod,可以看到刚才运行的应用存在两个pod
在这里插入图片描述
(3)、通过yaml文件创建deployment应用
在这里插入图片描述
在这里插入图片描述
(4)、删除应用
命令行:
在这里插入图片描述
通过yaml文件删除应用(指定创建的yaml文件)
在这里插入图片描述
十、service
1、概述
Service只是一个转发规则,如:餐厅服务员概念。顾客去餐厅吃饭,用户进行点餐和付款操作,实际接收菜单和收款的人是大厨和老板。服务员在中间仅做信息转发,并不是真正工作的节点。

2、作用
通过service为pod客户端提供访问pod的方法,service通过pod标签与pod进行关联
在这里插入图片描述
如上图:
每一个node(宿主机)上有很多node服务,每一个pod服务有自己的ip(小圈)和service(大圈)。Pod重启后ip会发生变化(如:不一样顾客),但是service的ip基本很固定(如:服务员很少变动)。虽然pod的ip改变了,但是定义的标签不变,只要service关联pod的标签,即使pod的ip改变了,还是可以通过service找到对应的pod,从而对pod进行操作。

3、service类型
在这里插入图片描述
集群是一组相同的服务节点,完成共同的任务。如多个orderService服务一起成为一个集群。

4、service参数
在这里插入图片描述
5、使用示例
(1)、创建service
分2步,先创建应用,在创建service和应用(应用部署在pod中)进行关联
命令方式:
创建应用(deployment)
在这里插入图片描述
创建service
expose 指定应用的类型和名称
–type指定service类型
–target-port 指定pod服务的端口
–port指定service的端口
通过配置两个端口,实现service的端口和pod端口的绑定关系
在这里插入图片描述
(2)、查看service
在这里插入图片描述
(3)、通过yaml创建service
也是两部,可以放到一个yaml文件中,通过—作为分隔
创建应用
在这里插入图片描述
创建service
在这里插入图片描述
执行yaml文件,同时创建应用和service
在这里插入图片描述
(4)、通过service访问pod
在这里插入图片描述
k8s会自动负载均衡
在这里插入图片描述
(5)、查看端点,可以看到应用和服务的ip关系
在这里插入图片描述

(6)、分配的端口为外部端口,即yaml文件配置service的类型不是ClusterIP,而是NodePort,还需要指定一下宿主机IP
在这里插入图片描述
创建后的service会包含外部宿主机的端口(此时可以通过访问宿主机的30278端口,访问pod的服务)
在这里插入图片描述
在这里插入图片描述
(7)、删除service
可以使用命令行,也可以使用yaml文件方式
在这里插入图片描述

学海无涯苦作舟!!!

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

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

相关文章

easyx库的学习(鼠标信息)

前言 本次博客是作为介绍easyx库的使用,最好是直接代码打到底,然后看效果即可 代码 int main() {initgraph(640, 480, EX_SHOWCONSOLE|EX_DBLCLKS);setbkcolor(RGB(231, 114, 227));cleardevice();//定义消息结构体ExMessage msg { 0 };//获取消息wh…

HTB Runner

Runner User Nmap ──(root㉿kali)-[/home/…/machine/SeasonV/linux/Runner] └─# nmap -A runner.htb -T 4 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-22 23:07 EDT Stats: 0:00:01 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Sca…

在 Windows 系统上彻底卸载 TeamViewer 软件

在 Windows 系统上彻底卸载 TeamViewer 软件 References 免费版仅供个人使用 您的会话将在 5 分钟后终止 Close TeamViewer by locating the TeamViewer icon in the system tray, right click and “Exit TeamViewer”. Right click Windows start menu then Control Panel -…

一文整理完MySQL关系型数据库相关知识

MySQL关系型数据库 1. 介绍1.1 MySQL 2. 安装3. SQL语句4. SQL分类5. DDL5.1 库的DDL5.2 表、列的DDL 6. DML6.1 添加数据6.2 修改数据6.3 删除数据 7. DQL7.1 基础查询7.2 条件查询7.3 排序查询7.4 聚合函数7.5 分组查询7.6 分页查询 8. 约束8.1 约束分类 9. 多表查询9.1 内连…

C语言入门课程学习笔记1

C语言入门课程学习笔记1 第1课 - 概论第2课 -helloworld第3课 -数据输出第4课 -数据类型与变量第5课 - 深入数据类型与变量第6课 - 类型与变量编程练习第7课 - 程序中的数据输入 本文学习自狄泰软件学院 唐佐林老师的 C语言入门课程,图片全部来源于课程PPT&#xff…

百度GL地图实现选点获取经纬度并且地址逆解析

index.html引入 <script src"https://api.map.baidu.com/api?typewebgl&v1.0&ak你的ak"></script>组件使用 <el-input:disabled"[详情].includes(title)"v-model"formData.site"placeholder""><templat…

(007)Blender 根据顶点组分离模型

1.选中模型&#xff0c;并且进入【3D视图】【编辑模式】&#xff1a; 2.选择顶点组&#xff1a; 3.分离选中项&#xff1a;

python爬虫学习第二十八天-------了解scrapy(二十八天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

ESLint 、 e2e test 学习

Lint和Format的区别&#xff1a; Lint只会告诉你代码中的错误或者不符合规范的地方&#xff0c;而Format是用来对格式作调整的 HTML/tpl&#xff1a;HTMLLint CSS/SCSS&#xff1a;Stylelint JS/JSX&#xff1a;Eslint JSLint&#xff1a;古老&#xff0c;不能配置和扩展JSHin…

jvm中的引用类型

Java中的引用类型 1.强引用 一个对象A被局部变量、静态变量引用了就产生了强引用。因为局部变量、静态变量都是被GC Root对象关联上的&#xff0c;所以被引用的对象A&#xff0c;就在GC Root的引用链上了。只要这一层关系存在&#xff0c;对象A就不会被垃圾回收器回收。所以只要…

STM32点灯大师(点了一颗LED灯,轮询法)

配置操作&#xff1a; 一、使用CubeMX配置到大致的操作 1.1 选择芯片 1.2 选择引脚&#xff08;根据电路图&#xff09; 1.3 配置gpio口 1.4 配置系统 1.5文件项目操作 最后就是点击 二、点击CubeMX生成的代码&#xff0c;并且修改代码 2.1 看看效果 2.2 写代码

线程-条件变量和生产者消费者模型

这个内容比较重要&#xff0c;并且面试很容易被问道。所以把他单独拿出来了。 条件变量 条件变量是一种线程同步机制 当条件不满足时&#xff0c;相关线程被一直阻塞&#xff0c;直到某种条件出现&#xff0c;这些线程才会被唤醒。为了保护共享资源&#xff0c;条件变量需要…

tiktok如何影响用户行为的分析兼论快速数据分析的策略

tiktok如何影响用户行为的分析 快速数据分析的策略流程&#xff1a; 1.确定指标变量&#xff0c;也就确定了数据分析想要回答的问题。想回答不同的问题&#xff0c;就选择不同的指标变量。 变量筛选方法选出指标变量相关的变量&#xff1b; 针对筛选出的变量进行描述性分析和因…

【软考经验分享】软考-中级-嵌入式备考

这里写目录标题 教辅用书嵌入式系统设计师考试大纲嵌入式系统设计师教程嵌入式系统设计师5天修炼嵌入式系统设计师考前冲刺100题 刷题软件希赛网软考真题 视频教程希赛网王道-计组计网 教辅用书 嵌入式系统设计师考试大纲 50页左右&#xff0c;内容为罗列一些考点&#xff0c…

【hackmyvm】 Quick2靶机

渗透流程 渗透开始1.IP地址 获取2.端口扫描3.任意文件读取4.扫描目录5.总结信息6.漏洞扫描7.php_filter_chain_generator.py使用8.提权 渗透开始 1.IP地址 获取 ┌─[✗]─[userparrot]─[~] └──╼ $fping -ag 192.168.9.0/24 2>/dev/null 192.168.9.124 本机 192.1…

密码学 | Schnorr 协议:零知识身份证明和数字签名

&#x1f955;原文&#xff1a; Schnorr 协议&#xff1a;零知识身份证明和数字签名 &#x1f955;写在前面&#xff1a; 本文属搬运博客&#xff0c;自己留存学习。文中的小写字母表示标量&#xff0c;大写字母表示椭圆曲线中的点。 1 Schnorr 简介 Schnorr 由德国数学家和密…

Opencv_10_自带颜色表操作

void color_style(Mat& image); Opencv_10_自带颜色表操作&#xff1a; void ColorInvert::color_style(Mat& image) { int colormap[] { COLORMAP_AUTUMN, COLORMAP_BONE , COLORMAP_JET , COLORMAP_WINTER, COLORMAP_RAINBOW , COLOR…

图像处理之Retinex算法(C++)

图像处理之Retinex算法&#xff08;C&#xff09; 文章目录 图像处理之Retinex算法&#xff08;C&#xff09;前言一、单尺度Retinex&#xff08;SSR&#xff09;1.原理2.代码实现3.结果展示 二、多尺度Retinex&#xff08;MSR&#xff09;1.原理2.代码实现3.结果展示 三、带色…

STM32单片机C语言模块化编程实战:按键控制LED灯并串口打印详解与示例

一、开发环境 硬件&#xff1a;正点原子探索者 V3 STM32F407 开发板 单片机&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;5.32 STM32CubeMX版本&#xff1a;6.9.2 STM32Cube MCU Packges版本&#xff1a;STM32F4 V1.27.1 虽然这里演示的是STM32F407&#xff0c;但是ST…

JetBrains PhpStorm v2024.1 安装教程 (PHP集成开发IDE)

前言 PhpStorm是由JetBrains推出的一款轻量级集成开发环境&#xff0c;专为PHP开发者而设计。该软件融合了智能的HTML/CSS/JavaScript/PHP编辑器、代码质量分析工具、版本控制系统集成&#xff08;包括SVN和GIT&#xff09;、调试和测试等功能。除此之外&#xff0c;PhpStorm还…