2024年k8s最新版本使用教程

2024年k8s最新版本使用教程

    • 3. YAML语言入门
      • 3.1 基本语法规则
      • 3.2 支持的数据结构
      • 3.3 其他语法
    • 4 资源管理
      • 4.1 k8s资源查询
      • 4.2 资源操作命令
      • 4.3 资源操作方式
        • 4.3.1 命令行方式
        • 4.3.2 YAML文件方式
    • 5 Namespace
      • 5.1 查看命名空间
      • 5.2 创建命名空间
      • 5.3 删除命名空间
      • 5.4 命名空间资源限额
    • 6 Pod
      • 6.1 创建pods
      • 6.2 查看pods
      • 6.3 删除pods
      • 6.4 资源清单
    • 7 Label标签
      • 7.1 标签操作
      • 7.2 分组管理
    • 8 Pod控制器
      • 8.1 Pod控制器概念
      • 8.2 Pod控制器种类
      • 8.3 ReplicaSet
        • 8.3.1 常见操作
        • 8.3.2 资源清单
        • 8.3.3 pod数量固定
        • 8.3.4 pod数量扩缩容
        • 8.3.5 pod镜像更改
      • 8.4 Deployment
        • 8.4.1 常见操作
        • 8.4.2 资源清单
        • 8.4.3 pod镜像更改
        • 8.4.4 pod镜像更改操作
      • 8.5 HPA控制器
        • 8.5.1 自动扩缩容
        • 8.5.2 指标API可用安装
      • 8.6 DaemonSet
        • 8.6.1 资源清单
      • 8.7 Job控制器
        • 8.7.1 资源清单
      • 8.8 CronJob
        • 8.8.1 资源清单

如果需要K8S安装观看2024年k8s最新版本安装教程博客

3. YAML语言入门

YAML是一门简洁的非标记语言,常用来做配置文件,文件后缀是yaml。

3.1 基本语法规则

key: value键值对方式(:与value之间有空格)

name: buddha

key书写区分大小写

name: buddhaName: buddha

使用缩进表示层级关系(缩进只能用空格,没有规定需要多少个空格,相同层级左对齐即可;不能用tab键替代空格键,除非编辑器内认可的tab键;)

person:name: buddhaage: 18

支持单行注释,#是单号注释符

# 下面是开发环境配置
name: buddha

---...配合使用,如下就相当于写了两个配置文件

---
name: buddha
age: 18
...---
name: jack
age: 12
...

3.2 支持的数据结构

字面量,单个、不能再分的值。date(日期、时间)、boolean、number(整数、浮点数)、null(~)、string(字符串一般不用引号,双引号特殊字符会转义,单引号不会转义处理)

name: buddha
age: 18
flag: true
remark: ~
day: 2024-01-01

对象,键值对的集合

# 行内写法,k与v之间可以不加空格
o: {k1: v1,k2: v2,k3: v3}# 一般写法
o:k1: v1k2: v2k3: v3

数组,一组按次序排列的值

k: [v1,v2,v3]k:- v1- v2- v3

3.3 其他语法

允许使用两个感叹号,强制转换数据类型

a: !!str 123
b: !!str true

多行字符串可以使用|保留换行符,也可以使用>折叠换行

this: |FooBar
that: >FooBar

可以用这个网站检验yaml文件书写是否正确

https://www.json2yaml.com/convert-yaml-to-json

4 资源管理

4.1 k8s资源查询

在k8s中,所有内容都抽象为资源进行管理。通过kubectl api-resources命令查看k8s有哪些资源。

常用资源有:

资源分类资源名称资源名称简写说明
集群级别资源nodesno集群节点
namespacesns命名空间
pod资源podspo容器运行在pod里面
pod控制器资源replicationcontrollersrc控制pod资源
replicasetsrs
deploymentsdeploy
daemonsetsds
jobs
cronjobscj
horizontalpodautoscalershpa
statefulsetssts
服务发现资源servicessvc统一pod对外接口
ingressing
存储资源volumeattachments存储
persistentvolumespv
persistentvolumeclaimspvc
配置资源configmapscm配置
secrets配置

4.2 资源操作命令

k8s对资源如何操作,可以通过kubectl --help命令获取帮助信息

常用操作有:

操作分类命令说明
基本命令create创建资源
edit编辑资源
patch更新资源
get获取资源
delete删除资源
explain展示资源文档
运行和调试run运行一个pod
expose暴露资源为Service
describe显示资源内部信息
logs输出容器在pod中的日志
attach进入运行中的容器
exec执行容器中的一个命令
cp在pod内外复制文件
rollout管理资源的发布
scale扩(缩)容pod的数量
autoscale自动调整pod的数量
其他apply通过文件对资源进行配置
label更新资源上的标签
cluster-info显示集群信息
version显示当前Server和Client的版本

4.3 资源操作方式

4.3.1 命令行方式

语法:

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

说明:

command,要对资源执行的操作,例如create、get、delete

type,资源类型,比如deployment、pod、service

name,资源名称

flags,额外可选参数

示例:

# kubectl [command] [type]
kubectl get pod# kubectl [command] [type] [name]
kubectl get pod nginx-pod# kubectl [command] [type] [name] [flags]
kubectl get pod nginx-pod -o yaml
4.3.2 YAML文件方式

创建nginx-pod.yaml文件

---
apiVersion: v1
kind: Namespace
metadata:name: prod
...---
apiVersion: v1
kind: Pod
metadata:name: nginx-podnamespace: prod
spec:containers:- name: nginx-containerimage: nginx:latest
...
# 执行create命令,创建资源
kubectl create -f nginx-pod.yaml# 使用apply操作资源,如果资源不存在,就创建;如果资源已存在,就更新
[root@k8s-master ~]# kubectl apply -f nginx-pod.yaml
namespace/prod created
pod/nginx-pod created
[root@k8s-master ~]# kubectl apply -f nginx-pod.yaml
namespace/prod unchanged
pod/nginx-pod unchanged
[root@k8s-master ~]# kubectl create -f nginx-pod.yaml 
namespace/prod created
pod/nginx-pod created
[root@k8s-master ~]# kubectl get -f nginx-pod.yaml
NAME             STATUS   AGE
namespace/prod   Active   21sNAME            READY   STATUS    RESTARTS   AGE
pod/nginx-pod   1/1     Running   0          21s

小结:

# 创建/更新资源
kubectl apply -f  xxx.yaml# 删除资源
kubectl delete -f  xxx.yaml# 查看资源
kubectl get -f  xxx.yaml
kubectl describe -f  xxx.yaml

5 Namespace

k8s的命名空间(Namespace)可以将集群的资源进行逻辑上的划分和隔离。

作用:

  • 隔离和资源划分:命名空间允许将集群资源进行逻辑上的划分和隔离。
  • 多租户支持:通过使用命名空间,可以在同一个Kubernetes集群中支持多个租户或团队。
  • 访问控制和权限管理:命名空间提供了一种在集群中实施访问控制和权限管理的机制。
  • 资源管理和监控:通过将相关的资源放置在同一个命名空间下,可以更方便地进行资源管理和监控。

在这里插入图片描述

5.1 查看命名空间

资源查看命名空间

[root@k8s-master ~]# kubectl api-resources | grep Namespace
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
namespaces                        ns           v1                                     false        Namespace

命名空间查看命令

常用命令

# 查看所有的命名空间
kubectl get ns# 查看某个命名空间
kubectl get ns 命名空间名称# 查看某个命名空间详情
kubectl describe ns 命名空间名称# 查看命名空间指定格式输出
# 常见wide、json、yaml格式
kubectl get ns -o yaml
kubectl get ns 命名空间名称 -o yaml

示例:

[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   3d3h
kube-node-lease   Active   3d3h
kube-public       Active   3d3h
kube-system       Active   3d3h[root@k8s-master ~]# kubectl get ns default
NAME      STATUS   AGE
default   Active   3d3h
[root@k8s-master ~]# kubectl describe ns default
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       ActiveNo resource quota.No LimitRange resource.[root@k8s-master ~]# kubectl describe ns default
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       ActiveNo resource quota.No LimitRange resource.[root@k8s-master ~]# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:creationTimestamp: "2023-12-18T07:51:02Z"labels:kubernetes.io/metadata.name: defaultname: defaultresourceVersion: "45"uid: e88e80f3-8a34-46c1-9978-41014cd3a179
spec:finalizers:- kubernetes
status:phase: Active

5.2 创建命名空间

kubectl create ns 命名空间名称kubectl create -f 文件名.yamlkubectl apply -f 文件名.yaml

示例:

[root@k8s-master ~]# kubectl create ns dev
namespace/dev created
# ns-dev.yaml
# create dev namespace yaml
apiVersion: v1
kind: Namespace
metadata:name: dev
[root@k8s-master ~]# kubectl apply -f ns-dev.yaml 
namespace/dev created

5.3 删除命名空间

kubectl delete ns 命名空间名称kubectl delete -f 文件名.yaml

示例:

[root@k8s-master ~]# kubectl delete ns dev
namespace "dev" deleted
[root@k8s-master ~]# kubectl delete -f ns-dev.yaml 
namespace "dev" deleted

5.4 命名空间资源限额

通过ResourceQuota,可以对Namespace资源(包括CPU、内存、存储等)使用限制。编写YAML文件时,可以采用kubectl explain 资源类型或资源类型.属性获得帮助信息。

备注:如果命名空间做了限制,那么对应pod也要做资源限制

示例:

apiVersion: v1
kind: Namespace
metadata:name: dev
---
apiVersion: v1
kind: ResourceQuota
metadata:name: uat-quotanamespace: dev
spec:hard:requests.cpu: 2requests.memory: 2Gilimits.cpu: 2limits.memory: 2Gi
[root@k8s-master ~]# kubectl apply -f ns-dev.yaml 
namespace/dev created
resourcequota/uat-quota created
[root@k8s-master ~]# kubectl get -f ns-dev.yaml
NAME            STATUS   AGE
namespace/dev   Active   7m35sNAME                      AGE     REQUEST                                     LIMIT
resourcequota/uat-quota   7m35s   requests.cpu: 0/2, requests.memory: 0/2Gi   limits.cpu: 0/2, limits.memory: 0/2Gi

配置含义说明:

资源名称说明
limits.cpu所有非终止状态的 Pod,其 CPU 限额总量不能超过该值
limits.memory所有非终止状态的 Pod,其内存限额总量不能超过该值
requests.cpu所有非终止状态的 Pod,其 CPU 需求总量不能超过该值
requests.memory所有非终止状态的 Pod,其内存需求总量不能超过该值
hugepages-对于所有非终止状态的 Pod,针对指定尺寸的巨页请求总数不能超过此值
cpu与 requests.cpu 相同
memory与 requests.memory 相同

6 Pod

程序运行在容器中,容器运行在pod中,pod属于某个命名空间
在这里插入图片描述

[root@k8s-master ~]# kubectl api-resources | grep Pod
pods                              po           v1                                     true         Pod

6.1 创建pods

语法:

kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client]
[--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
kubectl apply -f 文件名.yamlkubectl create -f 文件名.yaml

示例:

[root@k8s-master ~]# kubectl run nginx-test --image=nginx --port=80 -n dev
pod/nginx-test created

6.2 查看pods

[root@k8s-master ~]# kubectl get pods -n dev
NAME         READY   STATUS    RESTARTS   AGE
nginx-test   1/1     Running   0          26s[root@k8s-master ~]# kubectl get pods nginx-test -n dev
NAME         READY   STATUS    RESTARTS   AGE
nginx-test   1/1     Running   0          108s[root@k8s-master ~]# kubectl get pods -o wide -n dev
NAME         READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
nginx-test   1/1     Running   0          51s   10.244.36.80   k8s-node1   <none>           <none>[root@k8s-master ~]# kubectl describe pods nginx-test -n dev[root@k8s-master ~]# kubectl get pods -o wide -n dev
# 在k8s各个节点上都可以访问nginx-test pod里面的nginx服务
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   3d20h   v1.28.2
k8s-node1    Ready    <none>          3d19h   v1.28.2
k8s-node2    Ready    <none>          3d19h   v1.28.2
k8s-node3    Ready    <none>          3d19h   v1.28.2[root@k8s-master ~]# curl 10.244.36.80:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>[root@k8s-node1 ~]# curl 10.244.36.80:80[root@k8s-node2 ~]# curl 10.244.36.80:80[root@k8s-node3 ~]# curl 10.244.36.80:80

6.3 删除pods

[root@k8s-master ~]# kubectl delete pods nginx-test
pod "nginx-test" deleted

6.4 资源清单

apiVersion: v1     #必选,版本号,例如v1
kind: Pod         #必选,资源类型,例如 Pod
metadata:         #必选,元数据name: string     #必选,Pod名称namespace: string  #Pod所属的命名空间,默认为"default"labels:           #自定义标签列表name: string                 
spec:  #必选,Pod中容器的详细定义containers:  #必选,Pod中容器列表- name: string   #必选,容器名称image: string  #必选,容器的镜像名称imagePullPolicy: [ Always|Never|IfNotPresent ]  #获取镜像的策略 command: [string]   #容器的启动命令列表,如不指定,使用打包时使用的启动命令args: [string]      #容器的启动命令参数列表workingDir: string  #容器的工作目录volumeMounts:       #挂载到容器内部的存储卷配置- name: string      #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符readOnly: boolean #是否为只读模式ports: #需要暴露的端口库号列表- name: string        #端口的名称containerPort: int  #容器需要监听的端口号hostPort: int       #容器所在主机需要监听的端口号,默认与Container相同protocol: string    #端口协议,支持TCP和UDP,默认TCPenv:   #容器运行前需设置的环境变量列表- name: string  #环境变量名称value: string #环境变量的值resources: #资源限制和请求的设置limits:  #资源限制的设置cpu: string     #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数memory: string  #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数requests: #资源请求的设置cpu: string    #Cpu请求,容器启动的初始可用数量memory: string #内存请求,容器启动的初始可用数量lifecycle: #生命周期钩子postStart: #容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启preStop: #容器终止前执行此钩子,无论结果如何,容器都会终止livenessProbe:  #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器exec:         #对Pod容器内检查方式设置为exec方式command: [string]  #exec方式需要制定的命令或脚本httpGet:       #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、portpath: stringport: numberhost: stringscheme: stringHttpHeaders:- name: stringvalue: stringtcpSocket:     #对Pod内个容器健康检查方式设置为tcpSocket方式port: numberinitialDelaySeconds: 0       #容器启动完成后首次探测的时间,单位为秒timeoutSeconds: 0          #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒periodSeconds: 0           #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次successThreshold: 0failureThreshold: 0securityContext:privileged: falserestartPolicy: [Always | Never | OnFailure]  #Pod的重启策略nodeName: <string> #设置NodeName表示将该Pod调度到指定到名称的node节点上nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定- name: stringhostNetwork: false   #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络volumes:   #在该pod上定义共享存储卷列表- name: string    #共享存储卷名称 (volumes类型有很多种)emptyDir: {}       #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值hostPath: string   #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录path: string                #Pod所在宿主机的目录,将被用于同期中mount的目录secret:          #类型为secret的存储卷,挂载集群与定义的secret对象到容器内部scretname: string  items:     - key: stringpath: stringconfigMap:         #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部name: stringitems:- key: stringpath: string

7 Label标签

label标签的意思,给资源添加标签,实现对资源进行分类分组

标签是以键值对(key: value 或 key=value)添加到资源上(node、pods、pods控制器、service等)

一个标签可以添加到多个资源上;一个资源也可以添加多个标签

常见标签:

版本标签:version: “1.0”

环境标签:env: dev

7.1 标签操作

语法:

kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N
[--resource-version=version] [options]

示例:

1、前提工作

[root@k8s-master ~]# kubectl run nginx-pod --image=nginx --port=80 -n dev
pod/nginx-pod created[root@k8s-master ~]# kubectl get pods -n dev
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          19s

2、添加标签

[root@k8s-master ~]# kubectl label Pod nginx-pod env=dev version=1.0 -n dev
pod/nginx-pod labeled

3、更新标签

[root@k8s-master ~]# kubectl label --overwrite Pod nginx-pod version=2.0 -n dev
pod/nginx-pod labeled

4、查看标签

[root@k8s-master ~]# kubectl get pods nginx-pod -n dev --show-labels
NAME        READY   STATUS    RESTARTS   AGE     LABELS
nginx-pod   1/1     Running   0          7m26s   env=dev,run=nginx-pod,version=2.0

5、删除标签

[root@k8s-master ~]# kubectl label Pod nginx-pod version- -n dev
pod/nginx-pod unlabeled# 验证标签是否删除
[root@k8s-master ~]# kubectl get pods nginx-pod -n dev --show-labels
NAME        READY   STATUS    RESTARTS   AGE     LABELS
nginx-pod   1/1     Running   0          9m18s   env=dev,run=nginx-pod

6、添加、更新、删除标签也都可以在文件中实施

# nginx-pod.yaml文件
apiVersion: v1
kind: Pod
metadata:name: nginx-podnamespace: devlabels:env: devversion: "2.0"
spec:containers:- name: nginx-containerimage: nginx:latest
[root@k8s-master ~]# kubectl apply -f nginx-pod.yaml 
pod/nginx-pod created[root@k8s-master ~]# kubectl get pods -n dev --show-labels
NAME        READY   STATUS    RESTARTS   AGE   LABELS
nginx-pod   1/1     Running   0          25s   env=dev,version=2.0

7.2 分组管理

Label Selector选择器通过一个过滤的语法进行查找到对应标签的资源

匹配规则:

  • key=value:这类是直接匹配

  • key!=value:匹配标签中没有key=value的资源

  • key in (A,B):匹配所有具有key=A和key=B标签的资源

  • key not in (A):匹配所有不具有标签A的资源

  • 多个条件匹配,用逗号隔开

示例:

[root@k8s-master ~]# kubectl get pods -n dev --show-labels
NAME        READY   STATUS    RESTARTS   AGE   LABELS
nginx-pod   1/1     Running   0          19m   env=dev,version=2.0[root@k8s-master ~]# kubectl get pods -l env=dev -n dev
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          19m[root@k8s-master ~]# kubectl get pods -l env!=dev -n dev
No resources found in dev namespace.[root@k8s-master ~]# kubectl get pods -l env=dev,version=2.0 -n dev
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          21m

在这里插入图片描述

selector: # 选择器,通过它指定该控制器管理哪些podmatchLabels: # Labels匹配规则app: nginx-podmatchExpressions: # Expressions匹配规则- { key: app, operator: In, values: [ nginx-pod ] }

通过类似上面这种方式实现资源的互相绑定,这个是后话。

8 Pod控制器

Pod是k8s最小管理单元,在k8s中,按照pods的创建方式分为两类:

  • 自主式pod:kubectl run直接创建,这种pods删除后就没有了,也不会重建

  • 控制器创建的pods:通过控制器创建的pods,直接删除pods会自动新建,得直接删除控制器才行

8.1 Pod控制器概念

Pod控制器是管理pod的中间层,通过Pod控制器,按照控制器的策略,维护pods
在这里插入图片描述

8.2 Pod控制器种类

在k8s中,有很多类型的Pod控制器,每种都有自己的适合的场景,常见的Pod控制器有下面这些:

kind名称简称apiVersion说明备注
ReplicationControllerreplicationcontrollersrcv1比较原始的pod控制器,由ReplicaSet替代废弃
ReplicaSetreplicasetsrsapps/v1pod数量固定,支持pod数量扩缩容,镜像升级
Deploymentdeploymentsdeployapps/v1控制ReplicaSet操作Pod,并支持滚动升级、回退版本
HorizontalPodAutoscalerhorizontalpodautoscalershpaautoscaling/v2根据集群负载自动调整Pod数量,实现削峰填谷
DaemonSetdaemonsetsdsapps/v1指定节点运行一个Pod,用于守护进程任务
Jobjobsbatch/v1完成一次性任务
CronJobcronjobscjbatch/v1定时任务,不需要持续后台运行
StatefulSetstatefulsetsstsapps/v1管理有状态应用

8.3 ReplicaSet

pod数量固定,支持pod数量扩缩容,镜像升级
在这里插入图片描述

8.3.1 常见操作
# 查
kubectl get replicasets -n 命名空间kubectl get replicasets -n 命名空间 -o wide/json/yamlkubectl get replicasets rs控制器名 -n 命名空间 -o wide/json/yamlkubectl describe replicasets rs控制器名 -n 命名空间# 建
kubectl create/apply -f 文件名.yaml# 编辑
kubectl edit replicasets rs控制器名 -n 命名空间
kubectl apply -f 文件名.yamlkubectl set SUBCOMMAND [options]
# SUBCOMMAND选项,可以通过类似kubectl set image --help帮助信息
env              Update environment variables on a pod template
image            Update the image of a pod template
resources        使用 Pod 模板更新对象的资源请求/限制
selector         为资源设置选择器
serviceaccount   Update the service account of a resource
subject          Update the user, group, or service account in a role binding or cluster role# 删除
kubectl delete -f 文件名.yaml
kubectl delete replicasets rs控制器名 -n 命名空间
8.3.2 资源清单
apiVersion: apps/v1 # 版本号
kind: ReplicaSet    # 类型       
metadata:           # 元数据name:             # rs名称 namespace:        # 所属命名空间 labels:           # 标签controller: rs
spec:               # 详情描述replicas: 3       # 副本数量selector:         # 选择器,通过它指定该控制器管理哪些podmatchLabels:    # Labels匹配规则app: nginx-podmatchExpressions: # Expressions匹配规则- { key: app, operator: In, values: [ nginx-pod ] }template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80

示例:

apiVersion: apps/v1
kind: ReplicaSet
metadata:name: rs-nginxnamespace: devlabels:controller: rs-nginx
spec:replicas: 3selector:matchLabels:app: nginx-podmatchExpressions:- { key: app, operator: In, values: [ nginx-pod ] }template:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
[root@k8s-master ~]# kubectl get replicasets -n dev
NAME       DESIRED   CURRENT   READY   AGE
rs-nginx   3         3         3       3m50s[root@k8s-master ~]# kubectl get pods -n dev
NAME             READY   STATUS    RESTARTS   AGE
rs-nginx-4znwr   1/1     Running   0          3m56s
rs-nginx-6g6t2   1/1     Running   0          3m56s
rs-nginx-6rtm2   1/1     Running   0          3m56s[root@k8s-master ~]# kubectl get pods -o wide -n dev
NAME             READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
rs-nginx-4znwr   1/1     Running   0          6m50s   10.244.36.81     k8s-node1   <none>           <none>
rs-nginx-6g6t2   1/1     Running   0          6m50s   10.244.169.135   k8s-node2   <none>           <none>
rs-nginx-6rtm2   1/1     Running   0          6m50s   10.244.107.199   k8s-node3   <none>           <none>
8.3.3 pod数量固定

ReplicaSet管理的pod数量保持稳定,假如删除一个pod,马上又会重新启动一个pod

示例:

[root@k8s-master ~]# kubectl delete pods rs-nginx-4znwr -n dev
pod "rs-nginx-4znwr" deleted
[root@k8s-master ~]# kubectl get pods -n dev
NAME             READY   STATUS              RESTARTS   AGE
rs-nginx-6g6t2   1/1     Running             0          8m33s
rs-nginx-6rtm2   1/1     Running             0          8m33s
rs-nginx-ss8kw   0/1     ContainerCreating   0          6s[root@k8s-master ~]# kubectl get pods -n dev
NAME             READY   STATUS    RESTARTS   AGE
rs-nginx-6g6t2   1/1     Running   0          8m48s
rs-nginx-6rtm2   1/1     Running   0          8m48s
rs-nginx-ss8kw   1/1     Running   0          21s
8.3.4 pod数量扩缩容

ReplicaSet管理的pod数量可以进行扩缩容,增加pod数量,或者减少pod数量

示例:

1、查看replicasets名称

[root@k8s-master ~]# kubectl get replicasets -n dev
NAME       DESIRED   CURRENT   READY   AGE
rs-nginx   3         3         3       16m

2、方式一修改pod数量

# 修改数量为5
[root@k8s-master ~]# kubectl edit replicasets rs-nginx -n dev
replicaset.apps/rs-nginx edited

3、方式一修改pod数量是否生效

[root@k8s-master ~]# kubectl get replicasets -n dev
NAME       DESIRED   CURRENT   READY   AGE
rs-nginx   5         5         4       18m

4、方式二修改pod数量

# 修改数量为4
[root@k8s-master ~]# kubectl scale replicasets rs-nginx --replicas=4 -n dev
replicaset.apps/rs-nginx scaled

5、方式二修改pod数量是否生效

[root@k8s-master ~]# kubectl scale replicasets rs-nginx --replicas=4 -n dev
replicaset.apps/rs-nginx scaled

6、方式三修改pod数量

# # 修改数量为6
[root@k8s-master ~]# vim controller-rs-nginx.yaml 
[root@k8s-master ~]# kubectl apply -f controller-rs-nginx.yaml 
replicaset.apps/rs-nginx configured

7、方式三修改pod数量是否生效

[root@k8s-master ~]# kubectl get replicasets -n dev
NAME       DESIRED   CURRENT   READY   AGE
rs-nginx   6         6         4       24m
8.3.5 pod镜像更改

ReplicaSet管理的pod容器镜像进行更改

示例:

1、查看replicasets的镜像

[root@k8s-master ~]# kubectl get replicasets -n dev -o wide
NAME       DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
rs-nginx   3         3         0       6s    nginx        nginx:1.13.0   app=nginx-pod,app in (nginx-pod)

2、方式一修改容器镜像

# 修改容器镜像为nginx:1.15.0
[root@k8s-master ~]# kubectl edit replicasets rs-nginx -n dev
replicaset.apps/rs-nginx edited

3、方式一修改容器镜像验证

[root@k8s-master ~]# kubectl get replicasets -n dev -o wide
NAME       DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES         SELECTOR
rs-nginx   3         3         3       3m13s   nginx        nginx:1.15.0   app=nginx-pod,app in (nginx-pod)

4、方式二修改容器镜像

# 修改容器镜像为nginx:1.15.5
[root@k8s-master ~]# vim controller-rs-nginx.yaml 
[root@k8s-master ~]# kubectl apply -f controller-rs-nginx.yaml 
replicaset.apps/rs-nginx configured

5、方式二修改容器镜像验证

[root@k8s-master ~]# kubectl get replicasets -n dev -o wide
NAME       DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
rs-nginx   3         3         3       12m   nginx        nginx:1.15.5   app=nginx-pod,app in (nginx-pod)

6、方式三修改容器镜像

# 修改容器镜像为nginx:1.23.0
[root@k8s-master ~]# kubectl set image replicasets rs-nginx nginx=nginx:1.23.0  -n dev
replicaset.apps/rs-nginx image updated

7、方式三修改容器镜像验证

[root@k8s-master ~]# kubectl get replicasets -n dev -o wide
NAME       DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
rs-nginx   3         3         3       14m   nginx        nginx:1.23.0   app=nginx-pod,app in (nginx-pod)

注意:上面方式只是把ReplicaSet控制器容器镜像版本给更改了,但是现有pod容器镜像并不会发生改变,得一个个删掉现有的,重新生成的才是新镜像版本

[root@k8s-master ~]# kubectl delete pods rs-nginx-5gsxg -n dev
pod "rs-nginx-5gsxg" deleted[root@k8s-master ~]# kubectl get pods -n dev
NAME             READY   STATUS              RESTARTS   AGE
rs-nginx-2s5wm   0/1     ContainerCreating   0          8s
rs-nginx-jjfbq   1/1     Running             0          26m
rs-nginx-tk4th   1/1     Running             0          26m[root@k8s-master ~]# kubectl get pods -n dev
NAME             READY   STATUS    RESTARTS   AGE
rs-nginx-2s5wm   1/1     Running   0          6m30s
rs-nginx-jjfbq   1/1     Running   0          32m
rs-nginx-tk4th   1/1     Running   0          32m

8.4 Deployment

控制ReplicaSet操作Pod,就是控制器ReplicaSet该有的功能,控制器Deployment都实现。并在pod镜像方面做了升级,pod会自动更换镜像、暂停更换、继续更换、回滚操作
在这里插入图片描述

8.4.1 常见操作
# 查
kubectl get deployments -n 命名空间kubectl get deployments -n 命名空间 -o wide/json/yamlkubectl get deployments deploy控制器名 -n 命名空间 -o wide/json/yamlkubectl describe deployments deploy控制器名 -n 命名空间# 建
kubectl create/apply -f 文件名.yaml# 编辑
kubectl edit deployments deploy控制器名 -n 命名空间
kubectl apply -f 文件名.yamlkubectl set SUBCOMMAND [options]
# SUBCOMMAND选项,可以通过类似kubectl set image --help帮助信息
env              Update environment variables on a pod template
image            Update the image of a pod template
resources        使用 Pod 模板更新对象的资源请求/限制
selector         为资源设置选择器
serviceaccount   Update the service account of a resource
subject          Update the user, group, or service account in a role binding or cluster role# 删除
kubectl delete -f 文件名.yaml
kubectl delete deployments deploy控制器名 -n 命名空间
8.4.2 资源清单
apiVersion: apps/v1  # 版本号
kind: Deployment     # 类型
metadata:            # 元数据name:              # rs名称namespace:         # 所属命名空间labels:            # 标签controller: deploy
spec:                # 详情描述replicas: 3        # 副本数量revisionHistoryLimit: 3 # 保留历史版本paused: false           # 暂停部署,默认是falseprogressDeadlineSeconds: 600 # 部署超时时间(s),默认是600strategy:               # 策略type: RollingUpdate   # 滚动更新策略rollingUpdate:        # 滚动更新maxSurge: 30%       # 最大额外可以存在的副本数,可以为百分比,也可以为整数maxUnavailable: 30% # 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数selector:               # 选择器,通过它指定该控制器管理哪些podmatchLabels:          # Labels匹配规则app: nginx-podmatchExpressions:     # Expressions匹配规则- { key: app, operator: In, values: [ nginx-pod ] }template:               # 模板,当副本数量不足时,会根据下面的模板创建pod副本metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.30.1ports:- containerPort: 80
8.4.3 pod镜像更改

Deployment控制器的容器镜像修改也同ReplicaSet控制器修改容器镜像方法相同,但是pod的容器镜像不需要手动删除,会根据策略进行自动版本更新。

spec.strategy.type有两个值:

  • RollingUpdate:滚动更新,就是杀死一部分,就启动一部分,在更新过程中,存在两个版本Pod
  • Recreate:在创建出新的Pod之前会先杀掉所有已存在的Pod

spec.strategy.rollingUpdate.maxSurge:用来指定在升级过程中不可用Pod的最大数量,默认为25%

spec.strategy.rollingUpdate.maxSurge:用来指定在升级过程中可以超过期望的Pod的最大数量,默认为25%
在这里插入图片描述
示例:

apiVersion: apps/v1
kind: Deployment
metadata:name: deploy-nginxnamespace: devlabels:controller: deploy
spec:replicas: 3revisionHistoryLimit: 3paused: falseprogressDeadlineSeconds: 600strategy:type: RollingUpdaterollingUpdate:maxSurge: 30%maxUnavailable: 30%selector:matchLabels:app: nginx-podmatchExpressions:- { key: app, operator: In, values: [ nginx-pod ] }template:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.15.5ports:- containerPort: 80
[root@k8s-master ~]# kubectl apply -f controller-deploy-nginx.yaml 
deployment.apps/deploy-nginx created[root@k8s-master ~]# kubectl get deployment -n dev -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES         SELECTOR
deploy-nginx   3/3     3            3           103s   nginx        nginx:1.15.5   app=nginx-pod,app in (nginx-pod)[root@k8s-master ~]# kubectl get pods -n dev
NAME                           READY   STATUS    RESTARTS   AGE
deploy-nginx-677f59dd8-2m9ph   1/1     Running   0          83s
deploy-nginx-677f59dd8-c5rbk   1/1     Running   0          83s
deploy-nginx-677f59dd8-t64bl   1/1     Running   0          83s

1、容器镜像版本更改

容器镜像版本更改方式参照ReplicaSet控制器方式

[root@k8s-master ~]# kubectl set image deployment deploy-nginx nginx=nginx:1.23.0  -n dev
deployment.apps/deploy-nginx image updated

2、容器镜像版本更改验证

[root@k8s-master ~]# kubectl get deployment -n dev -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES         SELECTOR
deploy-nginx   3/3     2            3           3m1s   nginx        nginx:1.23.0   app=nginx-pod,app in (nginx-pod)

3、观看pods情况,是会进行镜像自动更新

[root@k8s-master ~]# kubectl get pods -n dev
NAME                            READY   STATUS              RESTARTS   AGE
deploy-nginx-677f59dd8-2m9ph    1/1     Running             0          3m12s
deploy-nginx-677f59dd8-t64bl    1/1     Running             0          3m12s
deploy-nginx-7cd566d98b-6sthc   0/1     ContainerCreating   0          12s
deploy-nginx-7cd566d98b-ztl65   1/1     Running             0          14s[root@k8s-master ~]# kubectl get pods -n dev
NAME                            READY   STATUS    RESTARTS   AGE
deploy-nginx-7cd566d98b-6sthc   1/1     Running   0          2m35s
deploy-nginx-7cd566d98b-sxkn5   1/1     Running   0          101s
deploy-nginx-7cd566d98b-ztl65   1/1     Running   0          2m37s[root@k8s-master ~]# kubectl describe pods deploy-nginx-7cd566d98b-6sthc -n dev
8.4.4 pod镜像更改操作

pod镜像也可以称为pod版本,通过kubectl rollout --help可知以下常见操作

kubectl rollout SUBCOMMAND [options]
# SUBCOMMAND
status        显示上线的状态
history       显示pod容器镜像(版本)更改记录
pause         暂停pod容器镜像(版本)更改操作
resume        继续已经暂停的pod容器镜像(版本)更改操作
restart       重启pod容器镜像(版本)更改操作
undo          默认回滚到上一次更改pod容器镜像(版本)更改记录(使用--to-revision指定回滚版本)

1、查看pod镜像(版本)更换情况

kubectl rollout status deployments deploy控制器名 -n 命名空间

示例:

[root@k8s-master ~]# kubectl rollout status deploy deploy-nginx -n dev
deployment "deploy-nginx" successfully rolled out

2、查看pod镜像(版本)更换历史

kubectl rollout history deployments deploy控制器名 -n 命名空间

示例:

[root@k8s-master ~]# kubectl rollout history deploy deploy-nginx -n dev
deployment.apps/deploy-nginx 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

3、暂停pod镜像(版本)更换操作

滚动更新是逐个替换,更新是需要一个时间段,暂停更换,就是维持目前pod容器镜像版本现状

kubectl rollout pause deployments deploy控制器名 -n 命名空间

4、暂停继续更换pod镜像(版本)

kubectl rollout resume deployments deploy控制器名 -n 命名空间

5、重启更改pod镜像(版本)

kubectl rollout restart deployments deploy控制器名 -n 命名空间

6、回滚操作

# 默认回滚到上一个版本
kubectl rollout undo deployments deploy控制器名 -n 命名空间# 回滚到1的版本
kubectl rollout undo deployments deploy控制器名 --to-revision=1 -n 命名空间

8.5 HPA控制器

kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f
FILENAME | TYPE NAME) [options]

kubectl scale可以实现pod数量的更改,实际生产环境中,希望实现自动扩缩容。
在这里插入图片描述

[root@k8s-master ~]# kubectl api-resources | grep Horizontal
horizontalpodautoscalers          hpa          autoscaling/v2                         true         HorizontalPodAutoscaler
8.5.1 自动扩缩容

文档地址:https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics

示例:

# hpa-nginx.yaml 文件
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: hpa-nginxnamespace: devlabels:controller: hpa
spec:scaleTargetRef: # 指定要控制的信息apiVersion: apps/v1kind: Deploymentname: deploy-nginxminReplicas: 1 # 最小pod数量maxReplicas: 10 # 最大pod数量metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50
# 执行
[root@k8s-master ~]# kubectl apply -f hpa-nginx.yaml 
horizontalpodautoscaler.autoscaling/hpa-nginx created# 查看发现内存查看
[root@k8s-master ~]# kubectl get hpa -n dev
NAME        REFERENCE                 TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/deploy-nginx   <unknown>/50%   1         10        3          6m4s# 查看内存、cpu使用情况,发现指标API不可用
[root@k8s-master ~]# kubectl top node
error: Metrics API not available
8.5.2 指标API可用安装

kubectl top命令可用,则需要安装Metrics API

# 下载最新版本high-availability-1.21+.yaml
[root@k8s-master ~]# https://521github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml# 改下面三处内容
hostNetwork: true
- --kubelet-insecure-tls
image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.4

在这里插入图片描述

[root@k8s-master ~]# kubectl apply -f high-availability-1.21+.yaml[root@k8s-master ~]# kubectl top nodes
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
k8s-master   193m         4%     1641Mi          44%       
k8s-node1    68m          3%     755Mi           20%       
k8s-node2    70m          3%     651Mi           37%       
k8s-node3    70m          3%     559Mi           32%[root@k8s-master ~]# kubectl top pods -n dev
NAME                            CPU(cores)   MEMORY(bytes)   
deploy-nginx-7cd566d98b-6sthc   0m           1Mi             
deploy-nginx-7cd566d98b-sxkn5   0m           1Mi             
deploy-nginx-7cd566d98b-ztl65   0m           7Mi
[root@k8s-master ~]# kubectl top --help
Display resource (CPU/memory) usage.The top command allows you to see the resource consumption for nodes or pods.This command requires Metrics Server to be correctly configured and working on the server.Available Commands:node          Display resource (CPU/memory) usage of nodespod           Display resource (CPU/memory) usage of podsUsage:kubectl top [flags] [options]Use "kubectl top <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).

常用命令:

# 查看所有节点cpu、内存情况
kubectl top nodes# 查看某个节点cpu、内存情况
kubectl top nodes 节点ip/节点域名# 查看某个命名空间所有pods的cpu、内存情况
kubectl top pods -n 命名空间名称# 查看某个命名空间某个pods的cpu、内存情况
kubectl top pods pods名称 -n 命名空间名称

8.6 DaemonSet

[root@k8s-master ~]# kubectl api-resources | grep DaemonSet
daemonsets                        ds           apps/v1                                true         DaemonSet

节点级别的控制器,常用来日志收集、节点监控,会随着节点添加新增一个pod,节点移走减少一个pod
在这里插入图片描述

DaemonSet控制器生成的pods也支持使用kubectl rollout回滚操作、暂停、暂停继续、重启等操作。

8.6.1 资源清单
apiVersion: apps/v1 # 版本号
kind: DaemonSet # 类型
metadata: # 元数据name: # ds控制器称namespace: # 所属命名空间labels: #标签controller: daemonset
spec: # 详情描述revisionHistoryLimit: 3 # 保留历史版本updateStrategy: # 更新策略type: RollingUpdate # 滚动更新策略rollingUpdate: # 滚动更新maxUnavailable: 1 # 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数selector: # 选择器,通过它指定该控制器管理哪些podmatchLabels: # Labels匹配规则app: nginx-podmatchExpressions: # Expressions匹配规则- { key: app, operator: In, values: [ nginx-pod ] }template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本metadata:labels:app: nginx-podspec:containers:- name: nginx-containersimage: nginx:latestports:- containerPort: 80

示例:

apiVersion: apps/v1
kind: DaemonSet
metadata:name: ds-nginxnamespace: dev
spec:selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:latest
[root@k8s-master ~]# kubectl apply -f ds-nginx.yaml 
daemonset.apps/ds-nginx created[root@k8s-master ~]# kubectl get pods -n dev -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
ds-nginx-d7dtp   1/1     Running   0          75s   10.244.36.94     k8s-node1   <none>           <none>
ds-nginx-fwlrk   1/1     Running   0          75s   10.244.169.146   k8s-node2   <none>           <none>
ds-nginx-pjqxb   1/1     Running   0          75s   10.244.107.210   k8s-node3   <none>           <none>

8.7 Job控制器

[root@k8s-master ~]# kubectl api-resources | grep Job
jobs                                           batch/v1                               true         Job

在这里插入图片描述

运行一次就结束pods的控制器

8.7.1 资源清单
apiVersion: batch/v1 # 版本号
kind: Job # 类型       
metadata: # 元数据name: # Job控制器名称 namespace: # 所属命名空间 labels: #标签controller: job
spec: # 详情描述completions: 1 # 指定job需要成功运行Pods的次数。默认值: 1parallelism: 1 # 指定job在任一时刻应该并发运行Pods的数量。默认值: 1activeDeadlineSeconds: 30 # 指定job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。backoffLimit: 6 # 指定job失败后进行重试的次数。默认是6manualSelector: true # 是否可以使用selector选择器选择pod,默认是falseselector: # 选择器,通过它指定该控制器管理哪些podmatchLabels: # Labels匹配规则app: counter-podmatchExpressions: # Expressions匹配规则- { key: app, operator: In, values: [ counter-pod ] }template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本metadata:labels:app: counter-podspec:restartPolicy: Never # 重启策略只能设置为Never或者OnFailurecontainers:- name: counterimage: busybox:latestcommand: [ "bin/sh","-c","for i in {1..10}; do echo $i;sleep 2;done" ]
关于重启策略设置的说明:如果指定为OnFailure,则job会在pod出现故障时重启容器,而不是创建pod,failed次数不变如果指定为Never,则job会在pod出现故障时创建新的pod,并且故障pod不会消失,也不会重启,failed次数加1如果指定为Always的话,就意味着一直重启,意味着job任务会重复去执行了,当然不对,所以不能设置为Always

8.8 CronJob

[root@k8s-master ~]# kubectl api-resources | grep CronJob
cronjobs                          cj           batch/v1                               true         CronJob

在这里插入图片描述
执行类似定时任务的pods的控制器

8.8.1 资源清单
apiVersion: batch/v1 # 版本号
kind: CronJob # 类型
metadata: # 元数据name: # CronJob控制器名称namespace: # 所属命名空间labels: #标签controller: cronjob
spec: # 详情描述schedule: # cron格式的作业调度运行时间点,用于控制任务在什么时间执行concurrencyPolicy: # 并发执行策略,用于定义前一次作业运行尚未完成时是否以及如何运行后一次的作业failedJobHistoryLimit: # 为失败的任务执行保留的历史记录数,默认为1successfulJobHistoryLimit: # 为成功的任务执行保留的历史记录数,默认为3startingDeadlineSeconds: # 启动作业错误的超时时长jobTemplate: # job控制器模板,用于为cronjob控制器生成job对象;下面其实就是job的定义metadata:spec:completions: 1parallelism: 1activeDeadlineSeconds: 30backoffLimit: 6manualSelector: trueselector:matchLabels:app: counter-podmatchExpressions: # 规则- { key: app, operator: In, values: [ counter-pod ] }template:metadata:labels:app: counter-podspec:restartPolicy: Nevercontainers:- name: counterimage: busybox:latestcommand: [ "bin/sh","-c","for i in 1 2 3 4 5 6 7 8 9; do echo $i;sleep 20;done" ]
需要重点解释的几个选项:
schedule: cron表达式,用于指定任务的执行时间*/1    *      *    *     *<分钟> <小时> <日> <月份> <星期>分钟 值从 0 到 59.小时 值从 0 到 23.日 值从 1 到 31.月 值从 1 到 12.星期 值从 0 到 6, 0 代表星期日多个时间可以用逗号隔开; 范围可以用连字符给出;*可以作为通配符; /表示每...
concurrencyPolicy:Allow:   允许Jobs并发运行(默认)Forbid:  禁止并发运行,如果上一次运行尚未完成,则跳过下一次运行Replace: 替换,取消当前正在运行的作业并用新作业替换它

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

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

相关文章

计算机组成原理之机器:输入输出系统

计算机组成原理之机器&#xff1a;输入输出系统 笔记来源&#xff1a;哈尔滨工业大学计算机组成原理&#xff08;哈工大刘宏伟&#xff09; Chater3&#xff1a;输入输出系统 3.1 输入输出系统的发展概况 早期阶段 外部设备与主机之间采用分散连接&#xff0c;即每一个设备都…

什么是微隔离技术?

微隔离产生的背景 首先来看下南北向流量以及东西向流量的含义 南北向流量 指通过网关进出数据中心的流量&#xff0c;在云计算数据中心&#xff0c;处于用户业务虚拟机&#xff08;容器&#xff09;跟外部网络之间的流量&#xff0c;一般来说防火墙等安全设备部署在数…

Python打印Linux系统中最常用的linux命令之示例

一、Linux中的~/.bash_history文件说明&#xff1a; 该文件保存了linux系统中运行过的命令的历史。使用该文件来获取命令的列表&#xff0c;并统计命令的执行次数。统计时&#xff0c;只统计命令的名称&#xff0c;以不同参数调用相同的命令也视为同一命令。 二、示例代码&am…

【C语言步行梯】分支语句if...else、switch详谈

&#x1f3af;每日努力一点点&#xff0c;技术进步看得见 &#x1f3e0;专栏介绍&#xff1a;【C语言步行梯】专栏用于介绍C语言相关内容&#xff0c;每篇文章将通过图片代码片段网络相关题目的方式编写&#xff0c;欢迎订阅~~ 文章目录 什么是语句&#xff1f;引入分支语句&am…

Charles-抓包工具的使用

文章目录 Charles简介与安装Charles的简介Charles的安装Charles 安装证书 抓包在PC端抓取HTTPS请求在移动端进行抓包移动端配置Androd端配置iOS端配置 Charles使用小技巧&#xff1a; 模拟慢速网络 Charles简介与安装 Charles的简介 Charles 是在 PC 端常用的网络封包截取工具…

数字化转型导师坚鹏:科技金融政策、案例及营销创新

科技金融政策、案例及营销创新 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好的政策&#xff1f; 不知道科技金融有哪些成功的案例&#xff1f; 不知道科技金融如何进行营销创新&#xff1f; 课程特色&#xff1a; 以案例的方式解…

【重温设计模式】迭代器模式及其Java示例

迭代器模式的介绍 在编程领域&#xff0c;迭代器模式是一种常见的设计模式&#xff0c;它提供了一种方法&#xff0c;使得我们可以顺序访问一个集合对象中的各个元素&#xff0c;而又无需暴露该对象的内部表示。你可以把它想象成一本书&#xff0c;你不需要知道这本书是怎么印…

vue+nodejs超市购物商城在线选品系统wtk87

在此基础上&#xff0c;结合现有超市货品信息管理体系的特点&#xff0c;运用新技术&#xff0c;构建了以 vue为基础的超市货品信息管理信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;根据需求分析结果进行了系统的设计&#xff0c;并将其划分为管理员和用户二种角…

章六、集合(1)—— Set 接口及实现类、集合迭代、Map 接口、Collections类

一、 Set 接口及实现类 Set接口不能存储重复元素 Set接口继承了Collection接口。Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的 Set接口有两个实现类&#xff1a; ● HashSet &#xff1a;HashSet类中的元素不能重复 ● TreeSet &#xff1a;可以给Set集…

python(5)之处理数组

上次代码结果如下&#xff1a; 1、处理数组的缺失值 1、isnan&#xff08;&#xff09;函数 isnan&#xff08;&#xff09;函数是Numpy模块里的一个可以标记数组中缺失值的位置 代码示例如下&#xff1a; import numpy as np ac np.array([1,2,3,2,3,4,5,9,np.nan,1]) p…

系统分析与设计(一)

我们有这么多各式各样的工具,互联网给我们带来了这么多用户和数据,这是好事也有副作用。 世界上能访问用户数据,并根据数据做分析和改进的公司,大概Google是其中翘楚,这种 data-centric 的做法做过了头,也有悲剧发生: Douglas Bowman 曾经是Google 的视觉设计主管,2009年的一天…

设计模式:观察者模式 ⑧

一、思想 观察者模式是一种常见的设计模式&#xff0c;也称作发布-订阅模式。它主要解决了对象之间的通知依赖关系问题。在这种模式中&#xff0c;一个对象&#xff08;称作Subject&#xff09;维护着一个对象列表&#xff0c;这些对象&#xff08;称作Observers&#xff09;都…

Docker完整版(一)

Docker完整版&#xff08;一&#xff09; 一、Docker概述1.1、Docker简介1.2、Docker的用途1.3、容器与虚拟机的区别1.4、Docker系统架构1.5、Docker仓库 二、Docker引擎2.1、Docker引擎架构2.2、Docker引擎分类2.3、Docker引擎的安装2.4、Docker镜像加速器 三、Docker镜像3.1、…

线程-创建线程的方法、线程池

1.创建线程一共有哪几种方法&#xff1f; 继承Thread类创建线程 继承Thread类&#xff0c;重写run()方法&#xff0c;在main()函数中调用子类的strat()方法 实现Runnable接口创建线程 先创建实现Runnable接口的类&#xff0c;重写run()方法&#xff0c;创建类的实例对象&#…

kibana配置 dashbord,做可视化展示

一、环境介绍 这里我使用的kibana版本为7.17版本。 语言选择为中文。 需要已经有es&#xff0c;已经有kibana&#xff0c;并且都能正常访问。 二、背景介绍 kibana的可视化界面&#xff0c;可以配置很多监控统计界面。非常方便&#xff0c;做数据的可视化展示。 这篇文章&…

数据结构:顺序表的奥秘

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE&#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&a…

C#,排列组合的堆生成法(Heap’s Algorithm for generating permutations)算法与源代码

1 排列组合的堆生成法 堆生成算法用于生成n个对象的所有组合。其思想是通过选择一对要交换的元素&#xff0c;在不干扰其他n-2元素的情况下&#xff0c;从先前的组合生成每个组合。 下面是生成n个给定数的所有组合的示例。 示例&#xff1a; 输入&#xff1a;1 2 3 输出&a…

ZigBee技术与实践教程(无线传感网技术第三天)

1.MAC层规范 在IEEE802系列标准中&#xff0c;OSI参考模型的数据链路层进一步划分为逻辑链路控制子层和介子访问子层两个子层。MAC子层使用物理层提供的服务实现设备之间的数据帧传输&#xff0c;而LLC在MAC 层的基础上&#xff0c;在设备之间提供面向连接和非连接的服务&…

智慧城市的新引擎:物联网技术引领城市创新与发展

目录 一、引言 二、物联网技术与智慧城市的融合 三、物联网技术在智慧城市中的应用 1、智慧交通管理 2、智慧能源管理 3、智慧环保管理 4、智慧公共服务 四、物联网技术引领城市创新与发展的价值 五、挑战与前景 六、结论 一、引言 随着科技的日新月异&#xff0c;物…

注意!!墙裂推荐几个好用的实用小工具!一定会用到的!

前言 在开发的世界里&#xff0c;面对各种挑战和问题时&#xff0c;拥有一套合适的工具箱至关重要。这不仅能提升我们的工作效率&#xff0c;还能让复杂的任务变得简单&#xff0c;甚至在解决棘手问题的同时&#xff0c;还能让我们的心情略微舒畅。众所周知&#xff0c;有用的…