【K8S】学习笔记(二)

news2024/11/13 9:00:58

K8S学习笔记

  • 三、Kubernetes 核心概念
    • 3.1、kubernetes 集群命令行工具 kubectl
      • 3.1.1、kubectl 概述
      • 3.1.2、kubectl 命令格式
      • 3.1.3、kubectl 基础命令
      • 3.1.4、kubectl 部署命令
      • 3.1.5、kubectl 集群管理命令
      • 3.1.6、kubectl 故障和调试命令
      • 3.1.7、kubectl 其它命令
    • 3.2、Kubernetes 集群 YAML 文件详解
      • 3.2.1、组成部分
      • 3.2.2、YAML 快速编写
        • 3.2.2.1、使用 kubectl create 命令
        • 3.2.2.2、使用 kubectl get 命令导出 yaml 文件
    • 3.3 Pod
      • 3.3.1、Pod 基本概念
      • 3.3.2、Pod 存在的意义
      • 3.3.3、 Pod 实现机制
      • 3.3.4、 Pod 镜像拉取策略
      • 3.3.5、 Pod 资源限制
      • 3.3.6、 Pod 重启机制
      • 3.3.7、 Pod 健康检查
      • 3.3.8、 Pod 调度策略
    • 3.4、Controller
      • 3.4.1、Controller 概述
      • 3.4.2、Pod 和 Controller 的关系
      • 3.4.3、Deployment 控制器应用
      • 3.4.4、Deployment 部署应用
      • 3.4.5、升级回滚和弹性收缩
        • 3.4.5.1、应用升级
        • 3.4.5.2、查看升级状态
        • 3.4.5.3、查看升级状态
        • 3.4.5.4、应用回滚
        • 3.4.5.5、弹性伸缩

三、Kubernetes 核心概念

3.1、kubernetes 集群命令行工具 kubectl

3.1.1、kubectl 概述

kubectl 是 Kubernetes 集群的命令行工具,通过 kubectl 能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署。

3.1.2、kubectl 命令格式

kubectl [command] [type] [name] [flags]

参数:

  • command:指定要对资源执行的操作,例如 create、get、describe、delete
  • type:指定资源类型,资源类型是大小写敏感的,开发者能够以单数 、复数 和 缩略的形式
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
  • name:指定资源的名称,名称也是大小写敏感的,如果省略名称,则会显示所有的资源,例如
kubectl get pods
  • flags:指定可选的参数,例如,可用 -s 或者 -server 参数指定 Kubernetes API server 的地址和端口

3.1.3、kubectl 基础命令

命令介绍
create通过文件名或标准输入创建资源
expose将一个资源公开为一个新的 Service
run在集群中运行一个特定的镜像
set在对象上设置特定的功能
get显示一个或多个资源
explain文档参考资料
edit使用默认的编辑器编辑一个资源
delete通过文件名,标准输入,资源名称或标签来删除资源

3.1.4、kubectl 部署命令

命令介绍
rollout管理资源的发布
rolling-update对给定的复制控制器滚动更新
scale扩容或缩容 Pod 数量,Deployment、ReplicaSet、RC 或 Job
autoscale创建一个自动选择扩容或缩容并设置 Pod 数量

3.1.5、kubectl 集群管理命令

命令介绍
certificate修改证书资源
cluster-info显示集群信息
top显示资源 (CPU/M)
cordon标记节点不可调度
uncordon标记节点可被调度
drain驱逐节点上的应用,准备下线维护
taint修改节点 taint 标记

3.1.6、kubectl 故障和调试命令

命令介绍
describe显示特定资源或资源组的详细信息
logs在一个 Pod 中打印一个容器日志,如果 Pod 只有一个容器,容器名称是可选的
attach附加到一个运行的容器
exec执行命令到容器
port-forward转发一个或多个
proxy运行一个 proxy 到 Kubernetes API Server
cp拷贝文件或目录到容器中
auth检查授权

3.1.7、kubectl 其它命令

命令介绍
apply通过文件名或标准输入对资源应用配置
patch使用补丁修改、更新资源的字段
replace通过文件名或标准输入替换一个资源
convert不同的 API 版本之间转换配置文件
label更新资源上的标签
annotate更新资源上的注释
completion用于实现 kubectl 工具自动补全
api-versions打印受支持的 API 版本
config修改 kubeconfig 文件(用于访问 API,比如配置认证信息)
help所有命令帮助
plugin运行一个命令行插件
version打印客户端和服务版本信息

3.2、Kubernetes 集群 YAML 文件详解

3.2.1、组成部分

主要分为了两部分,一个是控制器的定义 和 被控制的对象。

在一个 YAML 文件的控制器定义中,有很多属性名称

属性名称介绍
apiVersionAPI 版本
kind资源类型
metadata资源元数据
spec资源规格
replicas副本数量
selector标签选择器
templatePod 模板
metadataPod 元数据
specPod 规格
containers容器配置

3.2.2、YAML 快速编写

一般来说,我们很少自己手写 YAML 文件,因为这里面涉及到了很多内容,我们一般都会借助工具来创建

3.2.2.1、使用 kubectl create 命令

这种方式一般用于资源没有部署的时候,我们可以直接创建一个 YAML 配置文件

# 尝试运行,并不会真正的创建镜像
kubectl create deployment web --image=nginx -o yaml --dry-run

或者我们可以输出到一个文件中

kubectl create deployment web --image=nginx -o yaml --dry-run > hello.yaml

然后我们就在文件中直接修改即可

3.2.2.2、使用 kubectl get 命令导出 yaml 文件

可以首先查看一个目前已经部署的镜像

kubectl get deploy

然后我们导出 nginx 的配置

kubectl get deploy nginx -o=yaml --export > nginx.yaml

然后会生成一个 nginx.yaml 的配置文件

3.3 Pod

3.3.1、Pod 基本概念

最小部署的单元

Pod 里面是由一个或多个容器组成【一组容器的集合】

一个 pod 中的容器是共享网络命名空间

Pod 是短暂的

每个 Pod 包含一个或多个紧密相关的用户业务容器

3.3.2、Pod 存在的意义

创建容器使用 docker,一个 docker 对应一个容器,一个容器运行一个应用进程

Pod 是多进程设计,运用多个应用程序,也就是一个 Pod 里面有多个容器,而一个容器里面运行一个应用程序

Pod 的存在是为了亲密性应用

两个应用之间进行交互

网络之间的调用【通过 127.0.0.1 或 socket】

两个应用之间需要频繁调用

3.3.3、 Pod 实现机制

Pod 主要有以下两大机制:共享网络 和 共享存储。

1、共享网络【容器通过 namespace 和 group 进行隔离】
Pod 中容器通信 过程:
同一个 namespace 下
在 Pod 中创建一个根容器: pause 容器
在 Pod 中创建业务容器 【nginx,redis 等】【创建时会添加到 pause 容器 中】
在 pause 容器 中会独立出 ip 地址,mac 地址,port 等信息,然后实现网络的共享

2、共享存储【Pod 持久化数据,专门存储到某个地方中,使用 Volumn 数据卷进行共享存储】
在这里插入图片描述

3.3.4、 Pod 镜像拉取策略

我们以具体实例来说,拉取策略就是imagePullPolicy

拉取策略主要分为了以下几种:

  • IfNotPresent:默认值,镜像在宿主机上不存在才拉取
  • Always:每次创建 Pod 都会重新拉取一次镜像
  • Never:Pod 永远不会主动拉取这个镜像

3.3.5、 Pod 资源限制

也就是我们 Pod 在进行调度的时候,可以对调度的资源进行限制
例如我们限制 Pod 调度是使用的资源是 2C4G,那么在调度对应的 node 节点时,只会占用对应的资源,对于不满足资源的节点,将不会进行调度。

这里分了两个部分:

  • request:表示调度所需的资源
  • limits:表示最大所占用的资源

3.3.6、 Pod 重启机制

因为 Pod 中包含了很多个容器,假设某个容器出现问题了,那么就会触发 Pod 重启机制

重启策略主要分为以下三种:

  • Always:当容器终止退出后,总是重启容器,默认策略 【nginx 等,需要不断提供服务】
  • OnFailure:当容器异常退出(退出状态码非 0)时,才重启容器。
  • Never:当容器终止退出,从不重启容器 【批量任务】

3.3.7、 Pod 健康检查

1、通过容器检查

kubectl get pod

2、通过应用检查

# 存活检查,如果检查失败,将杀死容器,根据 Pod 的 restartPolicy【重启策略】来操作
livenessProbe

# 就绪检查,如果检查失败,Kubernetes 会把 Pod 从 Service endpoints 中剔除
readinessProbe

Probe 支持以下三种检查方式

  • http Get:发送 HTTP 请求,返回 200 - 400 范围状态码为成功
  • exec:执行 Shell 命令返回状态码是 0 为成功
  • tcpSocket:发起 TCP Socket 建立成功

3.3.8、 Pod 调度策略

创建 Pod 流程:

  • 首先创建一个 pod,然后创建一个 API Server 和 Etcd【把创建出来的信息存储在 etcd 中】
  • 然后创建 Scheduler,监控 API Server 是否有新的 Pod,如果有的话,会通过调度算法,把 pod 调度某个 node 上
  • 在 node 节点,会通过 kubelet – apiserver 读取 etcd 拿到分配在当前 node 节点上的 pod,然后通过 docker 创建容器
    在这里插入图片描述

3.4、Controller

3.4.1、Controller 概述

Controller 是集群上管理和运行容器的对象

  • Controller 是实际存在的
  • Pod 是虚拟机的

3.4.2、Pod 和 Controller 的关系

Pod 是通过 Controller 实现应用的运维,比如弹性收缩,滚动升级。

Pod 和 Controller 之间是通过 label 标签建立关系,同时 Controller 又被称为控制器工作负载。

  • Controller【控制器】【工作负载】selector: app:nginx
  • Pod【容器】labels: app:nginx

3.4.3、Deployment 控制器应用

Deployment 表示用户对 K8S 集群的一次更新操作。

Deployment 控制器可以部署无状态应用

  • 管理 Pod 和 ReplicaSet
  • 部署,滚动升级等功能
  • 应用场景:web 服务,微服务

3.4.4、Deployment 部署应用

使用 Deploment 部署应用

kubectrl create deployment web --image=nginx

使用 YAML 文件进行配置:【快速编写 YAML 文件】

kubectl create deployment web --image=nginx -o yaml --dry-run > nginx.yaml

nginx.yaml:【selector 和 label 就是我们 Pod 和 Controller 之间建立关系的桥梁】

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  # Pod
  labels:
    app: web
  name: web
spec:
  replicas: 1
  # Controller
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}

现在,使用nginx.yaml文件创建镜像:

kubectl apply -f nginx.yaml

然后,对外暴露端口:

kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1

# 参数说明
# --port:就是我们内部的端口号
# --target-port:就是暴露外面访问的端口号
# --name:名称
# --type:类型

3.4.5、升级回滚和弹性收缩

3.4.5.1、应用升级

kubectl set image deployment web nginx=nginx:1.15

首先是开始的 nginx 1.14 版本的 Pod 在运行,然后 1.15 版本的在创建
然后在 1.15 版本创建完成后,就会暂停 1.14 版本
最后把 1.14 版本的 Pod 移除,完成我们的升级
这么做的好处就是:升级可以保证服务不中断

3.4.5.2、查看升级状态

kubectl rollout status deployment web

3.4.5.3、查看升级状态

kubectl rollout history deployment web

3.4.5.4、应用回滚

# 查看历史版本
kubectl rollout history deployment web

# 回滚到上一版本
kubectl rollout undo deployment web

# 回滚到指定版本
kubectl rollout undo deployment web --to-revision=2

3.4.5.5、弹性伸缩

# 通过命令创建多个副本
kubectl scale deployment web --replicas=10

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

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

相关文章

分组后将成员拼成字符串

【问题】 I have a text file like this: key1 value1 A key1 value2 B key1 value3 A key2 value1 A key2 value2 BI am trying to open it as a dictionary and print the list of keys and values separated by commas so it looks like this in the end: key1 value1,va…

PTA题目 谁先倒

划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输则继续下一轮&…

智云通CRM:越是害怕被客户拒绝,你就越会被拒绝?

你害怕被客户拒绝码?先别急着说“害怕”,先来看看你为什么会被拒绝?因为你认为自己会失败! 很多情况霞,我们会被客户拒绝,原因在哪里?原因有很多,最常见的是因为业务员自身的心理障…

SSM整合(四)

SSM整合之redis设置值和获取值三种方式 准备工作(导入一些必要的依赖) <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>2.4.1</version> </dependency> <…

ES6 入门教程 19 Generator 函数的语法 19.1 简介

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程19 Generator 函数的语法19.1 简介19.1.1 基本概念19.1.2 yield 表达式19.1.3 与 Iterator 接口的关系19 Generator 函数的语…

Espressif-IDE ESP32 LED Flash 闪烁工程的创建

前言 Espressif-IDE 类似于 eclipse 开发环境&#xff0c;更新 ESP32的开发环境后&#xff0c;发现可以直接使用 Espressif-IDE 进行ESP32 的工程代码开发、程序下载&#xff0c;非常的方便 本篇开始把 ESP32的开发板的LED 点亮&#xff0c;熟悉下 Espressif-IDE 的开发流程 …

MySQL表的高级增删改查

文章目录一、聚合查询二、分组查询三、联合查询内连接外连接自连接四、合并查询五、子查询一、聚合查询 聚合查询是针对行与行之间的计算&#xff0c;常见的聚合函数有: 函数作用COUNT(expr)查询数据的数量SUM(expr)查询数据的总和AVG(expr)查询数据的平均值MAX(expr)查询数据…

ES6 入门教程 18 Iterator 和 for...of 循环 18.1 Iterator(遍历器)的概念

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程18 Iterator 和 for...of 循环18.1 Iterator&#xff08;遍历器&#xff09;的概念18 Iterator 和 for…of 循环 18.1 Iter…

zk中watcher机制(重补早期学习记录)

前言:补学习记录,几年前写一半丢草稿箱,突然看到,有强迫症所以补完 一、理解watcher机制 二、父节点watcher事件 连接zk客户端 ./zkCli.sh 使用help查看命令 父节点使用,stat或者get创建自己的watch事件 stat 路径 watch get 路径 watch 我们给一个不存在的节点设置一个w…

这次把怎么做好一个PPT讲清-动画篇

干货预警&#xff01; 作为一位PPT发烧友看过诸多PPT案例&#xff0c;分享几个高大上的动画效果。文末有福利&#xff01; 废话不多说&#xff0c;直接上重点&#xff0c;本文主要讲八个动画技巧&#xff0c;我们来看先目录&#xff1a; 收藏是点赞的六倍&#xff0c;各位看官…

统计学习、机器学习以及python的学习顺序是什么

前言 我是非科班出身成功转行算法的&#xff0c;我来说下我的学习路线是怎样的。&#xff08;文末送读者福利&#xff09; 1、看书学原理&#xff1a;我因为没买周志华老师的西瓜书&#xff0c;只看过李航老师的小蓝书&#xff0c;我第一遍看统计学习 方法的时候非常痛苦全是…

Monaco Editor教程(十七):代码信息指示器CodeLens配置详解

背景 有时候我们在使用VS Code编辑一个文件时 会看到这样的效果 在上述的图片中&#xff0c;1720行和1721行之间&#xff0c;有一行不属于该文件本身内容的注释。这一效果能够方便开发者快速地理解代码&#xff0c;看到代码的提交人&#xff0c;时间&#xff0c;可能还会有备…

C语言:一维数组的创建、初始化

一、一维数组的创建 数组的定义&#xff1a;在C语言中有各种数据类型&#xff0c;而每一种数据类型都有相对应的数据元素&#xff0c;这些元素可以组成一个团体&#xff0c;一个集合&#xff0c;从而有了数组概念。 数组也有三要素&#xff1a;数组元素类型&#xff0c; …

双链笔记Logseq的安装指南

便民服务还是挺方便的&#xff0c;不用出小区就可以做了 本文完成于 10 月初&#xff0c;撰写时 Logseq 的版本为 v0.8.8&#xff0c;发布时的最新版本是 v0.8.11 什么是 Logseq &#xff1f; Logseq 是一个本地优先的非线性大纲笔记本&#xff0c;用于组织和共享您的个人知识库…

Win11电脑如何设置自动开机(Windows 11 2022H2)

Win11电脑如何设置自动开机 ​ 文章目录1、最先右键选择“此电脑”&#xff0c;点一下“管理”。2、随后寻找系统工具里的“任务方案程序”。3、再点一下右边的“创建基本任务”。4、名字中输入“自动开机”。5、随后选择自动开机的次数。6、然后设置我们应该自动开机的实际时间…

并发编程之Executor线程池原理与源码解读

线程 线程是调度CPU资源的最小单位&#xff0c;线程模型分为KLT模型与ULT模型&#xff0c;JVM使用的KLT模 型&#xff0c;Java线程与OS线程保持1:1的映射关系&#xff0c;也就是说有一个java线程也会在操作系统里有一个对应的线程。Java线程有多种生命状态 NEW,新建 RUNNABLE,运…

分布式架构演进过程

分布式的前提&#xff0c;我们得有多台服务器&#xff0c;那么我们需要知道世界上第一台计算机的由来&#xff0c;而第一台计算机的参考模型就是冯诺依曼模型&#xff0c;为此奠定了所有的分布式都在围绕着这个模型里面的某一块或者相互之间模块进行打交道。 搞分布式又有什么意…

【计算机毕业设计】7.健身俱乐部会籍管理系统+vue

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的…

关于clickhouse单节点部署

因为公司网络问题&#xff0c;下载clickhouse无法使用命令下载&#xff0c;所以用压缩包进行下载安装。 首先在其官网下载下载安装包 https://packages.clickhouse.com/tgz/stable/ 一共要下载四个包 clickhouse-client clickhouse-common-static clickhouse-common-static-d…

miRNA 在基因调控中的作用

MicroRNA (miRNA) 是什么&#xff1f;“micro”“mi”是微小的意思&#xff0c;顾名思义&#xff0c;miRNA 就是小的非编码 RNA&#xff0c;长度约 23 个核苷酸 (nt)&#xff0c;它在转录后的基因调控中发挥关键作用&#xff0c;包括疾病的发生、细胞分化与组织发育&#xff0c…