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有哪些资源。
常用资源有:
资源分类 | 资源名称 | 资源名称简写 | 说明 |
---|---|---|---|
集群级别资源 | nodes | no | 集群节点 |
namespaces | ns | 命名空间 | |
pod资源 | pods | po | 容器运行在pod里面 |
pod控制器资源 | replicationcontrollers | rc | 控制pod资源 |
replicasets | rs | ||
deployments | deploy | ||
daemonsets | ds | ||
jobs | |||
cronjobs | cj | ||
horizontalpodautoscalers | hpa | ||
statefulsets | sts | ||
服务发现资源 | services | svc | 统一pod对外接口 |
ingress | ing | ||
存储资源 | volumeattachments | 存储 | |
persistentvolumes | pv | ||
persistentvolumeclaims | pvc | ||
配置资源 | configmaps | cm | 配置 |
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 | 说明 | 备注 |
---|---|---|---|---|---|
ReplicationController | replicationcontrollers | rc | v1 | 比较原始的pod控制器,由ReplicaSet替代 | 废弃 |
ReplicaSet | replicasets | rs | apps/v1 | pod数量固定,支持pod数量扩缩容,镜像升级 | |
Deployment | deployments | deploy | apps/v1 | 控制ReplicaSet操作Pod,并支持滚动升级、回退版本 | |
HorizontalPodAutoscaler | horizontalpodautoscalers | hpa | autoscaling/v2 | 根据集群负载自动调整Pod数量,实现削峰填谷 | |
DaemonSet | daemonsets | ds | apps/v1 | 指定节点运行一个Pod,用于守护进程任务 | |
Job | jobs | batch/v1 | 完成一次性任务 | ||
CronJob | cronjobs | cj | batch/v1 | 定时任务,不需要持续后台运行 | |
StatefulSet | statefulsets | sts | apps/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: 替换,取消当前正在运行的作业并用新作业替换它
相关文章:

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 Namespace5.1 查看命名空间5.2 创建命名空间5.3 删除命名空间5.4 命名空间资源限…...

IDEA管理Git + Gitee 常用操作
文章目录 IDEA管理Git Gitee 常用操作1.Gitee创建代码仓库1.创建仓库1.点击新建仓库2.完成仓库信息填写3.创建成功4.管理菜单可以修改这个项目的设置 2.设置SSH公钥免密登录基本介绍1.找到.ssh目录2.执行指令 ssh-keygen3.将公钥信息添加到码云账户1.点击设置2.ssh公钥3.复制.…...

HBase安装,配置,启动,检查
目录: 一、HBase安装,配置 1、下载HBase安装包 2、解压,配置环境变量并激活 3、hbase 配置 4、将hadoop和zookeeper的配置文件创建软连接放在hbase配置目录 5、配置 regionserver 二、HBase启动与关闭,安装检验 1、启动关闭hbase的命令 2、 检…...

当金蝶遇上BI,马上就能看到数据可视化效果
最近整理咨询内容时发现,很多企业用户在咨询时都会问是否有行业案例,究其原因时他们没用过BI数据分析,不知道BI可以做什么,能做到什么地步。其实,要知道这些东西还不简单,只需要注册奥威BI软件,…...

计算机网络:网络层知识点汇总
文章目录 一、网络功能概述二、SDN基本概念三、路由算法与路由协议概述四、IP数据报格式五、IP数据报分片六、IPv4地址七、网络地址转换NAT八、子网划分和子网掩码九、无分类编址CIDR十、ARP协议十一、DHCP协议十二、ICMP协议十三、IPv6十四、RIP协议与距离向量算法十五、OSPF协…...

uniapp:小程序数字键盘功能样式实现
代码如下: <template><view><view><view class"money-input"><view class"input-container" click"toggleBox"><view class"input-wrapper"><view class"input-iconone"…...

python处理csv文件
1.使用 csv_writer.writerow # 导入CSV安装包 import csv# 1. 创建文件对象 f open(文件名.csv,a,encodingutf-8)# 2. 基于文件对象构建 csv写入对象 csv_writer csv.writer(f)# 3. 构建列表头 csv_writer.writerow(["问题","答案"])list_name[] # 4. 写…...

多核多cluster多系统之间缓存一致性概述
目录 1.思考和质疑2.怎样去维护多核多系统缓存的一致性2.1多核缓存一致性2.2多Master之间的缓存一致性2.3dynamIQ架构同一个core中的L1和L2 cache 3.MESI协议的介绍4.ACE维护的缓存一致性5.软件定义的缓存和替换策略6.动图示例 本文转自 周贺贺,baron,代…...
力扣爆刷第91天之hot100五连刷41-45
力扣爆刷第91天之hot100五连刷41-45 文章目录 力扣爆刷第91天之hot100五连刷41-45一、102. 二叉树的层序遍历二、108. 将有序数组转换为二叉搜索树三、98. 验证二叉搜索树四、230. 二叉搜索树中第K小的元素五、199. 二叉树的右视图 一、102. 二叉树的层序遍历 题目链接&#x…...

STM32day2
1.思维导图 个人暂时的学后感,不一定对,没什么东西,为做项目奔波中。。。1.使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度。 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_val HAL_ADC_GetValue(&a…...

查询IP地址保障电商平台安全
随着电子商务的快速发展,网购已经成为人们日常生活中不可或缺的一部分。然而,网络交易安全一直是人们关注的焦点之一,尤其是在面对日益频发的网络诈骗和欺诈行为时。为了提高网购平台交易的安全性,一种有效的方法是通过查询IP地址…...
使用pytorch实现线性回归(很基础模型搭建详解)
使用pytorch实现线性回归 步骤: 1.prepare dataset 2.design model using Class 目的是为了前向传播forward,即计算y hat(预测值) 3.Construct loss and optimizer (using pytorch API) 其中计算loss是为了进行反向传播࿰…...

【力扣100】【好题】322.零钱兑换 || 01背包完全背包
添加链接描述 思路: dp[j]数组表示的是在金额达到 j 的时候所需要的最小硬币数金额:背包容量,每个硬币的个数都为1:背包中物品的价值,硬币面额:物品重量dp[j]min(dp[j],dp[j-coin]1) class Solution:def …...

工单管理系统建设方案
1.1 系统概述 1.1.1 需求描述 1.1.2 需求分析 1.1.3 重难点分析 1.1.4 重难点解决措施 1.2 系统架构设计 1.2.1 系统架构图 1.2.2 关键技术 1.3 系统功能设计 1.3.1 工单创建 1.3.2 工单管理 1.3.3 工单处理 1.3.4 工单催办 1.3.5 工单归档 1.3.6 工单统计 软件项目全套资料获取…...

什么是农业四情监测设备?
【TH-Q2】智慧农业四情监测设备是一种高科技的农田监测工具,旨在实时监测和管理农田中的土壤墒情、作物生长、病虫害以及气象条件。具体来说,它主要包括以下组成部分: 气象站:用于监测气温、湿度、风速等气象数据,为农…...
Java面试题:请解释Java并发工具包中的主要组件及其应用场景,请描述一个使用Java并发框架(如Fork/Join框架)解决实际问题的编程实操问题
文章标题:《Java内存模型深入解析与多线程并发工具类应用》 引言: 在Java的世界里,掌握内存模型和多线程并发是高级开发者的必备技能。Java内存模型(JMM)和多线程并发工具包为开发者提供了强大的能力,同时…...

boot应用打包
1.创建项目 2.编写 3.native构建 报错: [WARNING] native:build goal is deprecated. Use native:compile-no-fork instead. [INFO] Found GraalVM installation from GRAALVM_HOME variable. [INFO] Executing: S:\Coding\graalvm-jdk-17_windows-x64_bin\graalv…...

探索数据可视化:Matplotlib 多图布局
多图布局 子视图 import numpy as np import matplotlib.pyplot as pltx np.linspace(0,2*np.pi)plt.figure(figsize(9,6))# 创建子视图 # subplot(2,1,1)表示将当前图形分割成 2 行 1 列的子图网格,并在第 1 个子图位置绘制图形 ax plt.subplot(2,1,1) ax.plot…...

springboot262基于spring boot的小型诊疗预约平台的设计与开发
小型诊疗预约平台 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本小型诊疗预约平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理…...

Java项目修改源码jar文件(无需反编译)
文章目录 应用场景实现方案实现原理注意事项 应用场景 在项目中用了第三方的jar包,但是jar包内某个类不符合项目业务需求,需要修改第三方jar包源码文件内容。 实现方案 首先我们尝试直接修改jar包源码文件内容时,页面上会提示文件是只读的&a…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...