当前位置: 首页 > news >正文

K8S基础笔记

 1、namespace

  • 名称空间
  • 用来对集群资源进行隔离划分,默认只隔离资源,不隔离网络
  • k8s默认的名称空间为default

查看k8s的所有命名空间

kubectl get namespace

或者

kubectl get ns

创建名称空间

kubectl create ns 名称

或使用yaml方式

  1.  编写yaml
  2. kubectl apply -f yaml文件
appVersion: v1
kind: Namespace
metedata:name: hello

appVersion表示版本号,kind表示种类(说明是名称空间,若是pod就是pod类型),metedata.name表示名称为hello的名称空间

删除yaml方式创建的名称空间,需要这样删除:

#可以yaml文件和yaml文件执行的结果(这里是删除名称空间)
kubectl delete -f yaml文件

删除名称空间

kubectl delete ns 名称

注意以下命令

kubectl get pods -A

  • -A:All表示所有的名称空间
  • 这条命令表示获取所有名称空间下的所有pod

kubectl get pods

  • 没有指定名称空间,那么默认为default空间

kubectl get pods -n kubernetes-dashboard

  • -n:-namespace:用于指定名称空间
  • 这条命令表示获取kubernetes-dashboard空间下的所有pod

2、Pod

  • 运行中的一组容器,Pod是kubernetes中应用的最小单位
  • 一个Pod可以有一个或多个容器
2.1、命令行创建Pod
kubectl run mynginx --image=nginx
  • 没有指定namespace,默认在default下创建的Pod
  • mynginx:Pod的名称
  • --image=nginx:使用nginx镜像去构建该Pod,nginx由于没有指定镜像版本,默认使用最新的

删除Pod

kubectl delete pod mynginx
2.2、查看Pod的创建信息
kubectl describe pod pod的名称

会打印Pod的构建信息,如Pod的构建event事件

2.3、yaml创建Pod

创建一个pod.yaml(文件名任意命名),复制一下内容

  • 不知道namespace,默认在default下
apiVersion: v1
kind: Pod
metadata:labels:run: mynginxname: mynginx
#  namespace: default
spec:containers:- image: nginxname: mynginx

应用yaml

kubectl apply -f pod.yaml

查看构建信息

kubectl describe pod mynginx

删除配置文件创建的pod

kubectl delete -f pod.yaml

2.4、使用可视化dashboard创建pod

把2.3中的代码复制进行:

之后k8s在创建pod

2.5、查看pod日志
  • 类似于docker查看容器日志
kubectl logs pod名字

上述默认是查看default名称空间下的pod

指定名称空间获取pod日志:

kubectl logs pod名字 -n namespace名字
2.6、日志阻塞式追踪(实时更新日志)

-n namespace名字:缺省,则表示查询的是default名称空间

kubectl logs pod名字 -n namespace名字
2.7、获取pod更完善信息
kubectl get pod -o wide
  • -o wide:可以写成 -owide
  • 上述默认查询的是default名称空间,可以使用kubectl get pod -o wide -A获取所有pod

2.8、进入pod
kubectl exec -it pod名字 -- /bin/bash
2.9、pod中运行多个容器
  • 多个容器间端口存在冲突时,只会启动第一个容器,后面的容器会报端口冲突错误
  • 一个pod间的网络、存储空间是共享的,容器间可以通过127.0.0.1进行访问
apiVersion: v1
kind: Pod
metadata:labels:run: myappname: myapp
#  namespace: default
spec:containers:- image: nginxname: mynginx- image: tomcat8.5.68name: mytomcat

3、Deployment

  • 部署
  • 控制pod,使pod用于多副本、自愈、扩缩容等能力
3.1、创建deployment

语法:

kubectl create deployment deployment的名字 --image=镜像名称

eg:

kubectl create deployment mytomcat --image=tomcat:8.5.68
3.2、删除deployment

语法:

kubectl delete deployment deployment的名字

eg:

kubectl delete deployment mytomcat

与删除pod的区别

  • deployment创建的pod,可以用pod的删除语句去删除这个pod,但是k8s会自动创建下一个pod
  • 只有使用删除deployment语句,才能彻底删除deployment创建的pod
3.3、多副本

语法:

kubectl create deployment deployment的名字 --image=镜像名称 --replicas=pod的数量

eg:

kubectl create deployment mytomcat --image=tomcat:8.5.68 --replicas=3

如下图,创建了3个pod 

yaml文件配置方式

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: mytomcatname: mytomcat
spec:replicas: 3selector:matchLabels:app: mytomcattemplate:metadata:labels:app: mytomcatspec:containers:- image: tomcatname: tomcat
3.4、扩缩容
  • 其实就是改变deployment下的pod数量
  • 当我们pod在运行期间只有3个,需要增加pod数量去支持访问量时,这个就称为扩容
  • 需要减少pod数量去支持访问量时,这个就称为缩容

语法:

kubectl scale deployment/deployment的名字 --replicas=pod的数量

eg::

kubectl deployment/mytomcat scale --replicas=5
3.5、自愈与故障转移

自愈:deployment下的pod出现问题,k8s会对该pod自动进行重启修复

故障转移:当一个pod所在的节点宕机后,k8s会把宕机的pod自动拉到其他的node进行运行

3.7、滚动更新

假设deployment下有3个pod,这3个pod为同一个镜像应用,当该镜像更新时,需要对k8s的pod进行更新,而滚动更新的作用就是:

  • 能保证镜像更新后,pod能平滑更新到下一个版本

更新步骤:

  1. k8s接收到滚动更新指令
  2. 启动1个新版本的镜像pod,当该pod启动完成后,k8s会杀掉3个镜像中的一个pod
  3. 然后再启动1个新pod,pod启动完成后,再杀掉1个旧pod
  4. 以此类推,直到新pod全部上线,旧pod全部下线,滚动更新完成

滚动更新只需要一个指令,即可执行上述步骤:

语法:

  • --record表示记录下这次更新
kubectl set image deployment/deployment的名字 原镜像=新镜像 --record

eg:

kubectl set image deployment/mytomcat tomcat=tomcat --record

3.8、命令修改deployment配置
kubectl edit deployment mytomcat #mytomcat为deployment的名字
3.9、版本回退

k8s支持deployment版本回退,且回退是滚动更新的过程!

回退流程:

<1>查看deployment的版本列表

格式:

kubectl rollout history deployment/deployment的名字

eg:

kubectl rollout history deployment/mytomcat

CHANGE-CAUSE:类似于GIT每次提交的message,只是k8s可以不写(none),在变更deployment的时,使用 --record来保存记录,参考3.7

<2>检查当前deployment使用的镜像版本

kubectl get deployment mytomcat -oyaml

或者

kubectl get deployment mytomcat -oyaml | grep tomcat
  • tomcat的镜像为tomcat最新版镜像

<3>查看某个版本的yaml详情

kubectl rollout history deployment/mytomcat --revision=1
  •  --revision=历史版本的编号

或者直接查看镜像:

kubectl rollout history deployment/mytomcat --revision=1 | grep image

 <4>版本回退

#回退到上次版本

kubectl rollout undo deployment/mytomcat

#回退到指定版本
kubectl rollout undo deployment/mytomcat --to-revision=1

3.10、工作负载

除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job  等 类型资源。我们都称为 工作负载。
有状态应用使用  StatefulSet  部署,无状态应用使用 Deployment 部署
官方文档:https://kubernetes.io/zh/docs/concepts/workloads/controllers/


4、Service

  • 服务
  • 将一组 Pods 公开为网络服务的抽象方法。
  • Pod的服务发现与负载均衡(服务发现指的是能感知同一组pod的上线下线变更,与注册中心一样)
  • 该暴露出来的IP或域名,只能集群内部访问,不能外部访问
  • Service的默认域名为:服务名.所在名称空间.svc,如:mytomcat.default.svc

不使用service时存在的问题:

  1. 当一个项目需要启动多个pod,每个pod的IP是不同的,假设我们通过某一个pod的IP去访问项目,若该pod宕机后,我们需要手动切换pod的IP(虽然可以使用nginx的负载均衡去实现切换,但是无状态pod的IP是会改变的,除非每次去变更nginx的配置)
  2. 当一个项目存在多个pod时,我们只能去连接某一个pod,并不能把所有的pod的资源使用起来

Service解决的问题:

  • 把相同标签的一组pod暴露成一个统一访问的服务,我们只需要访问service即可访问标签中的所有pod(负载均衡的方式)
4.1、暴露Service命令
kubectl expose deploy deployment的名字 --port=指定暴露的端口 --target-port=pod中需要暴露的端口
  • --port:指定暴露的端口,外部访问时的端口
  • --target-port:pod中需要暴露的端口,一般为pod中应用的端口

eg:把mytomcat的deployment中,pod的8080端口暴露给service服务8000端口

kubectl expose deploy mytomcat --port=8000 --target-port=8080
4.2、获取k8s下的service列表
kubectl get svc -A

或者

kubectl get svc

4.3、yaml方式生成Service
apiVersion: v1
kind: Service
metadata:labels:app:mytomcatname: mytomcat
spec:selector:app: mytomcat    #pod的标签ports:- port: 8000protocol: TCPtargetPort: 8080
  • selector.app:pod的标签label,用于给pod分类的
  • pod的标签若不指定,一般默认为deployment的名字
4.4、获取pod的标签
kubectl get pod --show-labels

4.5、Service暴露方式

默认方式(clusterIP 集群IP访问):

kubectl expose deployment mytomcat --port=8000 --target-port=8080

等同于:

kubectl expose deployment mytomcat --port=8000 --target-port=8080 --type=ClusterIP

yaml方式:

apiVersion: v1
kind: Service
metadata:labels:app: mytomcatname: mytomcat
spec:ports:- port: 8000protocol: TCPtargetPort: 8080selector:app: mytomcattype: ClusterIP    #NodePort集群外访问

NodePort暴露方式

kubectl expose deployment mytomcat --port=8000 --target-port=8080 --type=NodePort

  • k8s会自动生成一个提供外部访问的端口
  • NodePort范围在 30000-32767 之间

  • 访问方式:集群任意node节点+端口,即可访问Service

如:http://111.230.19.178:31634/


5、上述网络访问总结

1、节点与节点直接是否能正常通信的判断缘由
kubectl get node -owide
  • node节点加入k8s是外网IP,证明节点间的通信是没有问题的(就是确保node节点以外网的方式接入的) 

2、pod的IP访问范围
  • 一般除了搭建k8s时生成的pod,使用机器外网IP或master节点的IP外,其余在k8s集群搭建好的基础上,生成的pod,会使用master初始化时pod-network-cidr的网络范围(需要确保calico的网段与之一致)
  • pod-network-cidr的网络范围:指的是k8s给pod分配的IP地址的范围,这个IP只能集群内部访问!!!
  • 这里的集群内部是指K8S内pod互相访问,而不是k8s节点进行访问!
  • 节点访问pod的IP不属于集群内的访问!!!

3、Service暴露方式访问的范围
  • 以clusterIP暴露方式的访问范围,指的是集群内的访问!!!不是k8s节点进行访问
kubectl expose deployment mytomcat --port=8000 --target-port=8080
  • 以NodePort暴露方式的访问范围
kubectl expose deploy mynginx --port=8000 --target-port=80 --type=NodePort

因为calico问题,我现在只能在mynginx的工作节点才能访问上述service的IP

如下(在我的k8s-node1中访问):

浏览器使用k8s-node1的IP家31522端口:

相关文章:

K8S基础笔记

1、namespace 名称空间用来对集群资源进行隔离划分&#xff0c;默认只隔离资源&#xff0c;不隔离网络k8s默认的名称空间为default 查看k8s的所有命名空间 kubectl get namespace 或者 kubectl get ns 创建名称空间 kubectl create ns 名称 或使用yaml方式 编写yamlkub…...

十一、统一网关GateWay(搭建网关、过滤器、跨越解决)

目录 一、网关技术的实现 在SpringCloud中网关的实现包括两种: 作用&#xff1a; 二、搭建网关服务 1、新建模块&#xff0c;并添加依赖 2、新建Gateway包&#xff0c;并编写启动类 3、编写yml文件 4、启动服务&#xff0c;并在网页内测试 5、步骤 三、路由断言工厂 …...

C语言--每日五道选择题--Day20

第一题 1. 在如下结构定义中&#xff0c;不正确的是&#xff08; &#xff09;。 A&#xff1a; struct student {  int no;  char name[10];  float score; }; B&#xff1a; struct stud[20] {  int no;  char name[10];  float score; }; C&#xff1a; struct stu…...

Fourier分析导论——第6章——R^d 上的Fourier变换(E.M. Stein R. Shakarchi)

第6章 上的 Fourier 变换 It occurred to me that in order to improve treatment planning one had to know the distribution of the at- tenuation coefficient of tissues in the body. This in- formation would be useful for diagnostic purposes and would con…...

音视频技术在手机上的应用与挑战

// 编者按&#xff1a;随着手机相机功能日益强大&#xff0c;4k&#xff0c;8k&#xff0c;各类特色短视频的拍摄&#xff0c;编辑、播放需求日益增长&#xff0c;短视频应用的火爆也对当前的手机音视频技术提出了更高的要求&#xff0c;如何更好地提高用户体验成为了行业共同…...

三十分钟学会SCALA

SCALA Scala 是一种运行在 JVM上的函数式的面向对象语言。 Scala 是兼容的&#xff1a;兼容 Java&#xff0c;可以访问庞大的 Java 类库&#xff1b;Scala 是精简的&#xff1a;Scala 表达能力强&#xff0c;一行代码抵得上多行 Java 代码&#xff0c;开发速度快。可以让程序…...

leetcode做题笔记242. 有效的字母异位词

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输…...

沸点 | Ultipa 图数据库金融应用场景优秀案例首批入选,金融街论坛年会发布

为推进图数据库在金融行业的创新应用试点&#xff0c;近日&#xff0c;在2023金融街论坛年会“全球金融科技中心网络年会暨ZIBS北京论坛”上&#xff0c;北京前沿金融监管科技研究院发布了基于国际标准组织——国际关联数据基准委员会&#xff08;LDBC&#xff09;的《图数据库…...

GaussDB SQL基础语法示例-GOTO语句

目录 一、前言 二、在GaussDB数据库中的概念及语法 1、基本概念 2、语法 三、在GaussDB数据库中的基础示例和限制场景说明 1、基础示例 2、限制场景说明 四、小结 一、前言 SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准&#xff08;默认支持SQL2、…...

ClickHouse 物化视图

ClickHouse的物化视图是一种查询结果的持久化&#xff0c;它确实是给我们带来了查询效率的提升。用户查起来跟表没有区别&#xff0c;它就是一张表&#xff0c;它也像是一张时刻在预计算的表&#xff0c;创建的过程它是用了一个特殊引擎&#xff0c;加上后来 as select&#xf…...

原理Redis-ZipList

ZipList 1) ZipList的组成2) ZipList的连锁更新问题3) 总结 1) ZipList的组成 ZipList 是一种特殊的“双端链表” &#xff0c;由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作, 并且该操作的时间复杂度为 O(1)。 ZipListEntry: ZipList 中的Entry并不像…...

小迪安全笔记——Web架构篇语言中间件数据库系统源码获取

1、信息搜集搜集哪些东西&#xff1f; 架构信息收集&#xff0c;主要包括&#xff1a;操作系统、开发语言、中间件容器、数据库类型、第三方软件等&#xff1b; web源码信息收集&#xff0c;CMS开源&#xff1f;闭源&#xff1f;售卖&#xff1f;自主研发&#xff1f; 进行web…...

Linux从 全栈开发 centOS 7 到 运维

Linux从 全栈开发centOS 7 到 运维 一 Linux 入门概述1.1 操作系统1.2 Linux 简介1.3 Linux 系统组成1.4 Linux 发行版1.4 Linux 应用领域1.5 Linux vs Windows 二 环境搭建【狂神说Java】服务器购买及宝塔部署环境说明为什么程序员都需要一个自己的服务器服务器如何购买买完服…...

Harmony Ble 蓝牙App (一)扫描

Harmony Ble 蓝牙App &#xff08;一&#xff09;扫描 前言正文一、创建工程二、工程配置① 权限配置② Debug配置③ UI配置 三、扫描① 扫描接口② 扫描类 四、业务处理① Slice的生命周期② 蓝牙开关和动态权限请求 五、扫描设备六、显示设备① 自定义蓝牙类② 提供者③ 显示…...

录制第一个jmeter性能测试脚本2(http协议)——webtour

我们手工编写了一个测试计划&#xff0c;现在我们通过录制的方式来实现那个测试计划。也就是说‘’测试计划目标和上一节类似&#xff1a;让5个用户在2s内登录webtour&#xff0c;然后进入 页面进行查看。 目录 欢迎访问我的免费课程 PPT、安装包、视频应有尽有&#xff01; …...

时间序列与 Statsmodels:预测所需的基本概念(1)

后文&#xff1a;时间序列与 statsmodels&#xff1a;预测所需的基本概念&#xff08;2&#xff09;-CSDN博客 一、说明 本博客解释了理解时间序列的基本概念&#xff1a;趋势、季节性、白噪声、平稳性&#xff0c;并使用自回归、差分和移动平均参数进行预测示例。这是理解任何…...

计算机网络(持续更新…)

文章目录 一、概述1. 计网概述⭐ 发展史⭐ 基本概念⭐ 分类⭐ 数据交换方式&#x1f970; 小练 2. 分层体系结构⭐ OSI 参考模型⭐TCP/IP 参考模型&#x1f970; 小练 二、物理层1. 物理层概述⭐ 四个特性 2. 通信基础⭐ 重点概念⭐ 极限数据传输率⭐ 信道复用技术&#x1f389…...

BetterDisplay Pro for Mac(显示器校准软件)

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 以下是BetterDisplay Pro的主要特点&#xff1a; - 显示器校准&#xff1a;可以根据不同的需求和环境…...

Node.js之TCP(net)

Hi I’m Shendi Node.js之TCP&#xff08;net&#xff09; 最近使用Nodejs编写程序&#xff0c;需要用到自己编写的分布式工具&#xff0c;于是需要将Java版的用NodeJs重新写一遍&#xff0c;需要使用到TCP通信&#xff0c;于是在这里记录下Node.js TCP 的使用方法 依赖 需要使…...

何时使用Elasticsearch而不是MySql?

何时使用Elasticsearch而不是MySql&#xff1f; MySQL 和 Elasticsearch 是两种不同的数据管理系统&#xff0c;它们各有优劣&#xff0c;适用于不同的场景。本文将从以下几个方面对它们进行比较和分析&#xff1a; 数据模型查询语言索引和搜索分布式和高可用性能和扩展性使用…...

nodejs微信小程序 +python+PHP+图书销售管理系统的设计与实现-网上书店-图书商城-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…...

云原生周刊:Istio 1.20.0 发布 | 2023.11.20

开源项目推荐 DevPod DevPod 是一款纯客户端工具&#xff0c;可在任何后端基于 devcontainer.json 创建可重现的开发人员环境。每个开发者环境都在一个容器中运行&#xff0c;并通过 devcontainer.json 进行指定。通过 DevPod 提供商&#xff0c;这些环境可以在任何后端创建&…...

Ajax基础(应用场景|jquery实现Ajax|注意事项)

文章目录 一、Ajax简介二、基于jquery实现Ajax三、使用Ajax注意的问题1.Ajax不要与form表单同时提交2.后端响应格式问题3、使用了Ajax作为请求后的注意事项 一、Ajax简介 AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻译成中文就是“异步Javascript和XML”。…...

【SpringCloud】Eureka基于Ribbon负载均衡的调用链路流程分析

文章目录 前言1.调用形式2.LoadBalancerInterceptor3.负载均衡流程分析3.1 调用流程图3.2 intercept&#xff08;&#xff09;方法3.3 execute&#xff08;&#xff09;方法3.4 getServer()方法3.4 子类的chooseServer&#xff08;&#xff09;方法3.5 getLoadBalancerStats().…...

Springboot和Vue+MYSQL项目(基本介绍+前后端结合初步项目)+maven+mybatis

一、基本知识 当我们谈论全栈开发时&#xff0c;通常指的是一个开发者能够处理整个应用程序的开发&#xff0c;包括前端&#xff08;Front-End&#xff09;和后端&#xff08;Back-End&#xff09;的所有层面。这三个基本的领域是&#xff1a; 前端开发&#xff08;Front-End …...

基于单片机K型热电偶温度采集报警系统

**单片机设计介绍&#xff0c; 基于单片机K型热电偶温度采集报警系统 文章目录 一 概要简介系统特点系统组成工作原理应用领域 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于单片机K型热电偶温度采集报警系统介绍 简介 该系统是基于单片…...

利用OpenCV做个熊猫表情包 二

之前写了一篇 利用OpenCV做个熊猫表情包吧_Leen的博客-CSDN博客 回想起来觉得有点太弱了&#xff0c;意犹未尽&#xff0c;每次使用需要自己去手动截取人脸&#xff0c;清除黑边什么的才能使用demo去合成表情&#xff0c;无奈之前由于安装的vs&#xff0c;opencv版本都比较低…...

华纳云服务器怎么清理cdn缓存?

清理 CDN(内容分发网络)缓存通常需要通过 CDN 提供商的管理界面或 API 进行操作。不同的 CDN 提供商可能有不同的方法和步骤&#xff0c;以下是一个通用的清理 CDN 缓存的一般步骤&#xff1a; 1. 登录到 CDN 提供商的管理界面&#xff1a; 打开你所使用的 CDN 提供商的网站。 …...

python functools.wraps保留被装饰函数属性

作用 普通装饰器 &#xff0c;会覆盖函数名称&#xff0c;并且 会替换 函数 文档字符串 介绍 functools.wraps(wrapped[, assigned][, updated]) This is a convenience function for invoking partial(update_wrapper, wrappedwrapped, assignedassigned, updatedupdated) …...

【多线程 - 11、死锁】

死锁 1、介绍 在 Java 中使用多线程&#xff0c;就会有可能导致死锁问题。死锁会让程序一直卡住&#xff0c;程序不再往下执行。只能通过中止并重启的方式来让程序重新执行。要尽可能避免死锁的情况发生 2、造成死锁的原因 互斥条件&#xff1a; 同一资源同时只能由一个线程读…...