k8s基础入门

前言 

        开始学习K8S了,下面就是笔记整理

简介

k8s是谷歌开源得容器管理系统,主要功能包括

  1. 基于容器得应用部署,维护和滚动升级
  2. 负载均衡和服务发现
  3. 跨机器和跨地区得集群调度
  4. 自动伸缩
  5. 无状态服务和有状态服务
  6. 广泛得Volume支持
  7. 插件保持扩展性

k8s是一个平台,简化应用程序得工作流,用户可以使用Lable以自己得方式组织管理资源,还可以使用Annotation来自动逸资源得描述信息,用户可以编写自己的控制器和调度器,也可以通过插件机制扩展系统的功能

k8s不是paas 平台及服务

核心组件

    • etcd 保存了整个集群的状态
    • apiserver 提供了资源操作的唯一入口,并且提供授权,访问控制,API注册和发现等机制
    • controller manager 负责维护集群的状态,比如故障检测,自动扩展,滚动更新
    • scheduler 负责资源调度 按照预定得调度策略将Pod调度到相应机器上
    • kubelet 负责维护容器得生命周期 同时也负责Volume 和网络的管理
    • Container runtime 负责镜像管理以及Pod和容器的真正运行
    • kube-proxy 负责为Service提供cluster内部的服务发现和负载均衡

基本概念

Container

container (容器) 是一种虚拟化技术,使用namespace隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便再任何地方运行

使用容器不需要与外部的基础架构环境绑定,因为每个应用程序都不需要外部依赖,更不需要与外部的基础架构环境依赖,完美解决了从开发到生产的一致性问题

容器的优点还包括

  • 敏捷的应用程序创建和部署
  • 持续开发集成和不出
  • 开发与运维的关注分离
  • 开发测试与生产环境一致性
  • 可观测性
  • 云和操作系统的分发和移植性
  • 以应用为中心的管理
  • 松耦合
  • 资源隔离

Pod

k8s使用Pod来管理容器,每个Pod可以包含一个或多个紧密关联的容器

Pod是一组紧密关联的容器集合 他们共享PID,IPC,Network和UTS namespace 是K8s调度的基本单位,Pod内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。

在k8s中,所有对象都使用manifest(yaml/json)来定义 比如一个简单的nginx服务可以定义为 nginx.yaml 包含了一个镜像为nginx的容器:

Node

Node 是Pod真正运行的主机,可以是物理机也可以是虚拟机,为了管理Pod 每个Node节点上至少要运行container runtime (比如docker) kubelet,和 kube-proxy 服务

Namespace

是对一组资源和对象的抽象集合,比如可以用来将胸痛内部的对象划分为不同的项目或用户组,常见的pods services replication controllers 和 deployments 都属于某一个namespace的(默认是default) 而node,persistentVolumes 等则不属于任何namespace

Service

Service 是应用服务的抽象,通过labels 为应用程序提供负载均衡和服务发现,匹配labels的Pod IP和端口列表组成endpoints 由kube-proxy负责将服务IP负载均衡到这些endpoints

每个Service 都会自动分配一个cluster IP (仅仅在集群内布可以访问的虚拟地址) 和DNS名 其他容器可以通过该地址或DNS来访问服务,而不需要了解后端容器的运行

Label

Label是世界k8s对象的标签,以key/value的方式附加到对象上, key最长不能超过63字节 value可以为空 也可以是不超过253字节的字符串

Lable不提供唯一性,并且实际上经常是很多对象(如Pods)都是用相同的label的对象(比如ReplicaSet和Service用label来选择一组Pod)Label Selector 支持以下几种方式

  • 等式 app =nginx
  • 集合 env in (xx,xx)
  • 多个label 之间是and关系,如app=nginx,env=test

Annotations

Annotations是key/value 形式附加于对象的注解不同于labels用于标志和选择对象,Annotations则是用来记录一些附加信息,用来辅助应用部署,安全策略以及调度策略等,比如deployment 使用annotations来记录roliing update的状态。

Kubernets体验

使用kubectl操作容器

kubectl run --image=nginx:apline nginx-app --port=80 kubectl get pods

等到容器变成Running就可以使用kubectl命令来操作他

kubectl get 类似 docker ps 查询资源列表

kubectl describe 类似 docker inspect 获取资源详细信息

kubectl logs 类似 docker logs 获取容器日志

kubectl exec 类似 docker exec 在容器内执行一个命令

上述这种方式并不支持所有功能,我们更常用的是使用yaml 文件来定义资源 类似与docker File ,并哦通过kubectl create -f file.yaml 来创建资源

apiVersion: v1 kind:Pod metadata: name:nginx labels: app:nginx spec: containers: name:nginx image:nginx ports: containerPort:80

kubectl run 并不是直接创建一个Pod 而是创建一个Deployment资源(replicas=1) 再由与Deployment 关联的ReplicaSet来自动创建Pod 这等价于这样一个配置

使用Volume

pod的生命周期通常比较短,只要出现异常,就会创建一个新的Pod代替她,那容器产生的数据呢?容器内的数据会随着Pod的死亡而自动消失Volume就是为了持久化容器数据产生的,比如可以为redis容器指定一个hostpath来存储redis数据

使用Service

前面虽然创建了Pod 但是在k8s中Pod的IP地址会随之Pod的重启不断变化,并不建议直接拿Pod的IP来交互,那么如何来访问这些Pod提供的服务呢?使用Serivce,Service为一组Pod 提供一个统一入口,并为他们提供负载均衡和服务发现 比如可以为前面的nginx-app 创建一个Service

这样,在cluster内部就可以通过10.0.0.66 和 http://node-ip:30772 来访问nginx-app 而在cluster外面,则只能通过http://node-ip:30772

扩展应用

通过修改Deployment中副本的数量(replicas) 可以动态扩展或收缩应用:

这些自动扩展的哦让其会自动加入到service中,而收缩回收的容器也会自动从service中删除

kubectl scale --replicas=3 deployment/nginx-app

kubectl get deploy

滚动升级

滚动升级通过逐个容器替代升级的方式来实现五终端的服务升级

kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2

在滚动升级的过程中,如果发现了失败或者配置错误,还可以随时回滚

kubectl rolling-update frontend-v1 frontend-v2 --rollback

需要注意的是 kubectl rolling-update 只针对ReplicationController 对于更新策略是RollingUpdate的Deployment(Deployment 可以在spec中设置更新策略为RollingUpdate 默认就是RollingUpdate)更新应用后会自动滚动升级

而更新应用的话 直接使用 kubectl set命令

kubectl set image deployment/nginx-app nginx-app=nginx:1.9.1

滚动升级的过程可以使用 rollout 命令查看

kubectl rollout status deployment/nginx-app

Deployment也支持回滚

kubectl rollout history deployment/nginx-app

资源限制

k8s 通过 cgroups 提供容器资源管理的功能,可以限制每个容器的CPU和内存使用,比如对于刚开始创建的Deployment 可以通过下面的命令来限制nginx容器最多使用50%的CPU和128M内存

kubectl set resources deployment nginx-app -c=nginx --limits=cpu-500m,memory=128Mi

deployment "nginx" resources requirements updated

等同于在每个Pod中何止resources limits;

健康检查

为了保证容器在部署后处于正常运行的状态, k8s提供了两种探针(Probe 支持exectcpSocket和http)来探测容器的状态

  • LivenessProbe: 探针应用是否处于健康状态如果不健康则删除并重新创建容器
  • ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则不会接手来则Kubernets Service的流量

对于已经部署的deployment 可以通过 kubectl edit deployment/nginx-app 来更新manifest 增加健康检查部分

Kubernetes集群

一个k8s集群由分布式存储etcd,控制节点controller 以及服务节点Node组成

  • 控制节点负责整个集群的管理 比如容器的调度,维护资源的状态,自动扩展以及滚动更新
  • 服务节点Node是真正运行容器的主机,负责管理容器镜像和容器以及cluster内的服务发现和负载句能
  • etcd集群宝尊了整个集群的状态

集群联邦

集群联邦(Federation)用于阔可用去的Kubernetes集群,需要配合云服务商 一起实现

创建k8s集群

使用minikube

创建单机版最简单的办法是minikube:

minikube start

minikube cluster-info

play-with-k8s

提供了一个免费的k8s体验环境 直接访问Play with Kubernetes 就可以使用kubeadm来创建k8s集群,每次创建的集群最长可以使用4个小时

Katacoda playground

提供了免费2节点的体验环境网络基于weaveNet 并且会自动部署整个集群,注意刚打开页面集群可能还没有初始化完成,可以在master节点上运行launch.sh等待集群初始化完成

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

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

相关文章

ELFK的部署

目录 一、ELFK(FilebeatELK) 1. Filebeat的作用 2. ELFK工作流程 3. ELFK的部署 3.1 服务器配置 3.2 服务器环境 3.3 安装filebeat 3.4 修改filebeat主配置文件 3.5 在logstash组件所在节点(apache节点)上新建一个logstas…

如何管好地铁站见新质生产力 | 图扑数字孪生

智慧车站建设是现代交通领域的重要发展方向,旨在通过集成先进的信息技术,提升车站的运营效率、安全性及乘客体验。基于既有的综合监控技术,通过集成多种传感器和数据采集设备,实现对车站设备、环境、客流、人员等对象群的智能感知…

这样画箱线图,为你的SCI论文增色!

高级箱线图的绘制 下面的箱线图比较美观,非常适合数据量不大、且分布明显的时候使用。 在论文撰写中,图表的清晰和吸引人的展示方式是至关重要的。箱线图(Whisker Plot)是一种展示数据分布的经典工具,它不仅可以清楚地…

第十一届蓝桥杯大赛第二场省赛试题 CC++ 研究生组-七段码

#include<iostream> using namespace std; const int N 10, M 7; int e[N][N] {0}, f[N], open[N];//e[i][j]表示i和j之间是否连通&#xff1b;f[i]表示结点i的父节点&#xff1b;open[i] 1表示结点i打开&#xff0c;0表示关闭 long long ans 0;int find(int x){if(…

【ROS2笔记一】ROS2的基本组件

1.ROS2的基本组件 与ROS1类似的&#xff0c;ROS2也具有node&#xff0c;topic&#xff0c;service&#xff0c;action之类的组件&#xff0c;并且也具有rqt等工具。 可以像使用ROS1的命令行的方式&#xff08;参这里【ROS学习笔记7】ROS中的常用命令行&#xff09;&#xff0…

Mysql内存表及使用场景(12/16)

内存表&#xff08;Memory引擎&#xff09; InnoDB引擎使用B树作为主键索引&#xff0c;数据按照索引顺序存储&#xff0c;称为索引组织表&#xff08;Index Organized Table&#xff09;。 Memory引擎的数据和索引分开存储&#xff0c;数据以数组形式存放&#xff0c;主键索…

【保姆级讲解Nginx】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

拿到迅雷网盘推广授权,离财富自由更进一步

为了提高平台知名度、增加平台用户数量&#xff0c;迅雷网盘推出了网盘推广的新项目。网盘推广的奖励很丰厚&#xff0c;只要有人点击、下载你分享的资料&#xff0c;你就能获得佣金。听到这里&#xff0c;是不是已经有人心动了&#xff1f;心动的人一定要看完下面的网盘推广&a…

【开发篇】十七、基准测试框架JMH

文章目录 1、JMH2、运行方式二3、死代码与黑洞变量4、可视化分析5、案例&#xff1a;日期格式化方法性能测试6、总结7、整合到SpringBoot 判断一个方法的耗时 ⇒ endTime-startTime ⇒ 不准确&#xff0c;首先部分对象懒加载&#xff0c;第一次请求会慢一些&#xff0c;其次&am…

YOLOv8改进 | 检测头篇 | 自研超分辨率检测头HATHead助力超分辨率检测(混合注意力变换器检测头)

一、本文介绍 本文给大家带来的改进机制是由由我本人利用HAT注意力机制(超分辨率注意力机制)结合V8检测头去掉其中的部分内容形成一种全新的超分辨率检测头。混合注意力变换器(HAT)的设计理念是通过融合通道注意力和自注意力机制来提升单图像超分辨率重建的性能。通道注意…

多无人机集群协同避障

matlab2020a正常运行 场景1规划结果 场景2规划结果 场景3规划结果 代码地址&#xff1a; 多无人机集群协同避障效果&#xff08;5架&#xff09;资源-CSDN文库

【D3.js Tidy tree绘制树形图,单棵树,左右树,平移,拖拽,树形中的天花板实现,源码实现】

这里写自定义目录标题 D3.js Tidy tree绘制树形图,单棵树,左右树,平移,拖拽,树形中的天花板实现,源码实现D3 简介D3 官网有很多例子,这里说的是Tidy tree[树形图表svg][左侧关系->中间对象<-右侧关系 ] 树形实现 D3.js Tidy tree绘制树形图,单棵树,左右树,平移,拖拽,树形…

BM25和语言模型的改进研究

原文链接&#xff1a; BM25和语言模型的改进研究 摘要&#xff1a; 近期关于搜索引擎排名函数的研究报告指出&#xff0c;BM25和带Dirichlet平滑的语言模型有所改进。本研究通过在INEX 2009维基百科语料库上训练&#xff0c;然后在INEX 2010和9个TREC语料库上测试&#xff0…

ES6 全详解 let 、 const 、解构赋值、剩余运算符、函数默认参数、扩展运算符、箭头函数、新增方法,promise、Set、class等等

目录 ES6概念ECMAScript6简介ECMAScript 和 JavaScript 的关系ES6 与 ECMAScript 2015 的关系 1、let 、 const 、var 区别2、变量解构赋值1、数组解构赋值2、对象解构赋值3、字符串的解构赋值 3、展开剩余运算符1、**展开运算符(...)**2、**剩余运算符(...)** 4、函数的拓展函…

前端用 HTML5 + CSS3 + JavaScript,后端连接什么数据库更简单?

当前端使用 HTML5、CSS3 和 JavaScript 进行开发时&#xff0c;后端连接何种数据库是一个非常重要的问题&#xff0c;因为数据库的选择直接影响着后端代码的编写、数据存储与查询的效率以及系统的可维护性。 1. 关系型数据库&#xff08;SQL 数据库&#xff09;&#xff1a; …

两两交换链表中的节点 - LeetCode 热题 30

大家好&#xff01;我是曾续缘&#x1f916; 今天是《LeetCode 热题 100》系列 发车第 30 天 链表第 9 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点…

CV界,卷积神经网络真的干不过Transformer了吗?

一、 CNN及其优势和局限性 其他答主回答的角度和内容非常全面&#xff0c;答主也从自己的角度谈谈这个问题。我们不妨先看一下CNN的结构。CNN依靠卷积拥有感受野&#xff0c;具有了时移不变性。 1.1 CNN的局限性 可以看到随着卷积层的增加&#xff0c;feature maps上的一个…

3.00 版本来了!DolphinDB V2.00.12 V3.00.0 正式发布!

一文带你了解 DolphinDB 全新版本升级&#xff01; 本次更新后&#xff0c;3.00.0版本将成为 DolphinDB 的最新版&#xff0c;2.00.12版本变更为稳定版&#xff0c;此前发布的1.30.23版本将成为1.30系列的最后一个版本。接下来&#xff0c;带大家一起看看 DolphinDB V2.00.12 …

【Linux系统编程】第一弹---背景介绍

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、Linux 背景介绍 1.1、发展史 1.1.1、UNIX发展的历史 1.1.2、Linux发展历史 2、开源精神 3、Linux内核官网 4、企业应用…

windows下安装yolov8环境(详细图文教程)

目录 一&#xff1a;前言 二&#xff1a;安装yolov8 一&#xff1a;前言 最近看了 YOLO 的发展史&#xff0c;发现在机器视觉领域的应用非常广泛&#xff0c;f刚好最近一直在做机器视觉的工作&#xff0c;特此记录下搭建yolov的环境。我们使用的版本是yolov8的就用这个作为演…