讲师:互联网老辛

官方网站: www.geekyunwei.com

第一阶段:《Kubernetes入门》

说明:

  1. 强烈建议学习课堂视频,更多细节都在里面!

第2章:Kubernetes核心概念

  • Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S。

  • Kubernetes用于容器化应用程序的部署,扩展和管理,目标是让部署容器化应用简单高效。

官方网站:http://www.kubernetes.io

2.1 Kubernetes集群架构与组件

Master角色

  • kube-apiserver

Kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。

  • kube-controller-manager

处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。

  • kube-scheduler

根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。

  • etcd

分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息。

Worker Node角色

  • kubelet

kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。

  • kube-proxy

在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

  • docker或rocket

容器引擎,运行容器。

2.2 Kubernetes基本概念

Pod

  • 最小部署单元
  • 一组容器的集合
  • 一个Pod中的容器共享网络命名空间
  • Pod是短暂的

Controllers

  • Deployment : 无状态应用部署
  • StatefulSet : 有状态应用部署
  • DaemonSet : 确保所有Node运行同一个Pod
  • Job : 一次性任务
  • Cronjob : 定时任务

控制器是更高级层次对象,用于部署和管理Pod。

Service

  • 防止Pod失联

  • 定义一组Pod的访问策略

Label : 标签,附加到某个资源上,用于关联对象、查询和筛选

Namespaces : 命名空间,将对象逻辑上隔离

第3章:快速部署一个Kubernetes集群

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。

这个工具能通过两条指令完成一个kubernetes集群的部署:

# 创建一个 Master 节点
$ kubeadm init# 将一个 Node 节点加入到当前集群中
$ kubeadm join <Master节点的IP和端口 >

3.1 安装要求

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统 CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止swap分区

3.2 准备环境

kubernetes架构图

角色IP
k8s-master192.168.124.61
k8s-node1192.168.124.62
k8s-node2192.168.124.63
关闭防火墙:
$ systemctl stop firewalld
$ systemctl disable firewalld关闭selinux:
$ sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
$ setenforce 0  # 临时关闭swap:
$ swapoff -a  # 临时
$ vim /etc/fstab  # 永久设置主机名:
$ hostnamectl set-hostname <hostname>在master添加hosts:
$ cat >> /etc/hosts << EOF
192.168.124.61 k8s-master
192.168.124.62 k8s-node1
192.168.124.63 k8s-node2
EOF将桥接的IPv4流量传递到iptables的链:
$ cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sysctl --system  # 生效时间同步:
$ yum install ntpdate -y
$ ntpdate time.windows.com

3.4 所有节点安装Docker/kubeadm/kubelet

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

1、 安装Docker

$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
$ yum -y install docker-ce-18.06.1.ce-3.el7
$ systemctl enable docker && systemctl start docker
$ docker --version
Docker version 18.06.1-ce, build e68fc7a
# cat > /etc/docker/daemon.json << EOF
{"registry-mirrors": ["https://ywrd8tun.mirror.aliyuncs.com"]
}
EOF

2、 添加阿里云YUM软件源

$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3、 安装kubeadm,kubelet和kubectl

由于版本更新频繁,这里指定版本号部署:

$ yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
$ systemctl enable kubelet

3.5 部署Kubernetes Master

cpu 确保是2核

在192.168.124.61(Master)执行。

$ kubeadm init \--apiserver-advertise-address=192.168.124.61 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.17.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16

由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。

kubeadm init --apiserver-advertise-address=192.168.1.17 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.17.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

使用kubectl工具:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl get nodes

3.6 安装Pod网络插件(CNI)

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

确保能够访问到quay.io这个registery。

如果Pod镜像下载失败,可以改成这个镜像地址:lizhenliang/flannel:v0.11.0-amd64

3.7 加入Kubernetes Node

在192.168.124.62/63(Node)执行。

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:

注意: 这条命令在你安装完k8s-master后就会看到

kubeadm join 192.168.124.61:6443 --token g0l3ao.99flotdlufrn3zff \--discovery-token-ca-cert-hash sha256:afbeac5a4ca581ca0701cf93910c893dd46e309a7577baa28400b705b6d1c437

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

# kubeadm token create
# kubeadm token list
# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
63bca849e0e01691ae14eab449570284f0c3ddeea590f8da988c07fe2729e924# kubeadm join 192.168.124.61:6443 --token nuja6n.o3jrhsffiqs9swnu --discovery-token-ca-cert-hash sha256:63bca849e0e01691ae14eab449570284f0c3ddeea590f8da988c07fe2729e924

kubeadm token create --print-join-command

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-join/

3.8 测试kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行:

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   Ready      master   18m   v1.17.0
k8s-node1    Ready      <none>   78s   v1.17.0
k8s-node2    NotReady   <none>   16s   v1.17.0

notready, 稍等一会就可以了。

-n 指定命名空间

^C
[root@k8s-master ~]# kubectl get pods -n kube-system
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-9d85f5447-5qh6p              1/1     Running   0          39m
coredns-9d85f5447-8dntr              1/1     Running   0          39m
etcd-k8s-master                      1/1     Running   0          39m
kube-apiserver-k8s-master            1/1     Running   0          39m
kube-controller-manager-k8s-master   1/1     Running   0          39m
kube-flannel-ds-amd64-cl9rb          1/1     Running   0          22m
kube-flannel-ds-amd64-h9wkm          1/1     Running   0          34m
kube-flannel-ds-amd64-p4bjd          1/1     Running   0          21m
kube-proxy-5jg6b                     1/1     Running   0          21m
kube-proxy-6j6l5                     1/1     Running   0          39m
kube-proxy-vbqrq                     1/1     Running   0          22m
kube-scheduler-k8s-master            1/1     Running   0          39m
[root@k8s-master ~]# kubectl get ns  查看命名空间
NAME                   STATUS   AGE
default                Active   40m
kube-node-lease        Active   40m
kube-public            Active   40m
kube-system            Active   40m
kubernetes-dashboard   Active   11m
$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=NodePort
$ kubectl get pod,svc

访问地址:http://NodeIP:Port

3.9 部署 Dashboard (官方的)

可以直接使用下载好的包: dashboard.yaml

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:

kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443targetPort: 8443selector:k8s-app: kubernetes-dashboard

image-20210326211834023

新生成了一个命名空间

[root@k8s-master ~]# kubectl get pods -n kubernetes-dashboard
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-76585494d8-jtsc2   1/1     Running   0          20m
kubernetes-dashboard-5996555fd8-2gdqn        1/1     Running   0          20m
[root@k8s-master ~]# kubectl -n kubernetes-dashboard get pod -o wide
NAME                                         READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
dashboard-metrics-scraper-76585494d8-jtsc2   1/1     Running   0          33m   10.244.2.2   k8s-node2   <none>           <none>
kubernetes-dashboard-5996555fd8-2gdqn        1/1     Running   0          33m   10.244.2.3   k8s-node2   <none>           <none>

然后我们要访问: 看一下service暴露的地址

[root@k8s-master ~]# kubectl get svc  -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.96.221.63    <none>        8000/TCP        22m
kubernetes-dashboard        NodePort    10.96.253.172   <none>        443:30001/TCP   22m

访问地址:http://NodeIP:30001

注意:在没有设置证书的情况下,通过Chrome和ie内核是无法访问这个页面的,我们这里就先使用火狐来继续实验,后面补充通过更新证书来解决此问题。

image-20210326213749335

生成token

创建一个create-admin.yaml文件,内容如下:

apiVersion: v1
kind: ServiceAccount
metadata:name: admin-usernamespace: kubernetes-dashboard---apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard

应用配置文件创建用户

[root@k8s-master ~]#  kubectl apply -f create-admin.yaml serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created[root@k8s-master ~]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

image-20210326214422775

建议像我这样复制出来之后,在复制到网站上,避免因为空格导致失败

eyJhbGciOiJSUzI1NiIsImtpZCI6Img1eGp4WEx4dFgxb2pqWkpwSWxYWjN1eFBteFNWUXRLOXpwT0dDOGM4YVkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXc2bXZrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5MjhjYjY4OC0xNTY4LTRkNTQtOGFhZS1hODY2OTc1NGRhNTUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.ZwpJ5hDyxCAgb4jyiCtK8piJqLzkhxwKPUSgjZXmaHD67mfZXDFUv1Pm0G5-3UCGygnocmHrBpCKv5fuJlc_zhUGley_cM2X8gtM3n5Mt2DPJ_0HzcButYxKUnt2VsKKAEEO4eWO9cILANNFSyabN96kAEq7UfOvaQDFp0TP-zidpxnIWLR1zezsCuIMLfhp1yY89c-OIX0XEXiF8HgbGaJxqFe_s0GAcMDJsVki-e0EqtNvLg5qMHD6YeXApeVzO4ZZvw1joWPdVr9utCIICe6MqCXdSiC2f4IJEB8Pn6-y8Xyapsjk23ZXh4ljYzASO0igwJ_G3YOhESjajWICyQ

创建service account并绑定默认cluster-admin管理员集群角色:

kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

使用输出的token登录Dashboard。

image-20210326214011205

image-20210326214214724

第4章:kubectl命令行管理工具

kubectl --help 查看帮助信息

kubectl create --help 查看create命令帮助信息

命令描述
create通过文件名或标准输入创建资源
expose将一个资源公开为一个新的Service
run在集群中运行一个特定的镜像
set在对象上设置特定的功能
get显示一个或多个资源
explain文档参考资料
edit使用默认的编辑器编辑一个资源。
delete通过文件名、标准输入、资源名称或标签选择器来删除资源。
rollout管理资源的发布
rolling-update对给定的复制控制器滚动更新
scale扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job
autoscale创建一个自动选择扩容或缩容并设置Pod数量
certificate修改证书资源
cluster-info显示集群信息
top显示资源(CPU/Memory/Storage)使用。需要Heapster运行
cordon标记节点不可调度
uncordon标记节点可调度
drain驱逐节点上的应用,准备下线维护
taint修改节点taint标记
describe显示特定资源或资源组的详细信息
logs在一个Pod中打印一个容器日志。如果Pod只有一个容器,容器名称是可选的
attach附加到一个运行的容器
exec执行命令到容器
port-forward转发一个或多个本地端口到一个pod
proxy运行一个proxy到Kubernetes API server
cp拷贝文件或目录到容器中
auth检查授权
apply通过文件名或标准输入对资源应用配置
patch使用补丁修改、更新资源的字段
replace通过文件名或标准输入替换一个资源
convert不同的API版本之间转换配置文件
label更新资源上的标签
annotate更新资源上的注释
completion用于实现kubectl工具自动补全
api-versions打印受支持的API版本
config修改kubeconfig文件(用于访问API,比如配置认证信息)
help所有命令帮助
plugin运行一个命令行插件
version打印客户端和服务版本信息

使用kubectl管理应用生命周期

1、创建
kubectl create deployment web --image=lizhenliang/java-demo 
kubectl get deploy,pods2、发布
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web
kubectl get service3、升级
kubectl set image deployment/web nginx=nginx:1.15
kubectl rollout status deployment/nginx-deployment  # 查看升级状态4、回滚
kubectl rollout history deployment/web  # 查看发布记录
kubectl rollout undo deployment/web   # 回滚最新版本
kubectl rollout undo deployment/web --revision=2  # 回滚指定版本5、删除
kubectl delete deploy/web
kubectl delete svc/web

第5章:资源编排(YAML)

5.1 编写YAML注意事项

YAML 是一种简洁的非标记语言。

语法格式:

  • 缩进表示层级关系

  • 不支持制表符“tab”缩进,使用空格缩进

  • 通常开头缩进 2 个空格

  • 字符后缩进 1 个空格,如冒号、逗号等

  • “---” 表示YAML格式,一个文件的开始

  • “#”注释

5.2 YAML内容解析

在K8S部署一个应用的YAML内容大致分为两部分:

控制器定义:定义控制器属性

被控制对象:Pod模板,定义容器属性

具体字段意义:

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

5.3 资源字段太多,记不住怎么办?

很多同学YAML不会写!主要原因还是用的少,里面都是由于各个资源组成,熟悉了每个资源应用,自然就会写了,但也不用等到熟悉各种资源,这里教你几个技巧,帮助快速上手。

  • 用run命令生成部署模板

    kubectl create deployment nginx --image=nginx:1.14 -o yaml --dry-run> my-deploy.yaml

  • 用get命令将已有部署的应用yaml导出

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

  • 如果某个字段单词不记得了,可以通过explain查看更详细的帮助文档获得

    kubectl explain pods.spec.containers

第6章:深入理解Pod对象

Pod是最小的部署单元,也是后面经常配置的地方,本章节带你熟悉Pod中常见资源配置及参数。

也就是YAML这部分:

  ...template:metadata:labels:app: webspec:containers:- image: lizhenliang/java-demo:latestimagePullPolicy: Alwaysname: java 

6.1 Pod介绍

  • 最小部署单元

  • 一组容器的集合

  • 一个Pod中的容器共享网络命名空间

  • Pod是短暂的

6.2 Pod存在的意义

Pod为亲密性应用而存在。

亲密性应用场景:

  • 两个应用之间发生文件交互

  • 两个应用需要通过127.0.0.1或者socket通信

  • 两个应用需要发生频繁的调用

6.3 Pod实现机制与设计模式

Pod本身是一个逻辑概念,没有具体存在,那究竟是怎么实现的呢?

众所周知,容器之间是通过Namespace隔离的,Pod要想解决上述应用场景,那么就要让Pod里的容器之间高效共享。

具体分为两个部分:网络和存储

  • 共享网络

kubernetes的解法是这样的:会在每个Pod里先启动一个infra container小容器,然后让其他的容器连接进来这个网络命名空间,然后其他容器看到的网络试图就完全一样了,即网络设备、IP地址、Mac地址等,这就是解决网络共享问题。在Pod的IP地址就是infra container的IP地址。

  • 共享存储

比如有两个容器,一个是nginx,另一个是普通的容器,普通容器要想访问nginx里的文件,就需要nginx容器将共享目录通过volume挂载出来,然后让普通容器挂载的这个volume,最后大家看到这个共享目录的内容一样。

例如:

# pod.yaml
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: writeimage: centoscommand: ["bash","-c","for i in {1..100};do echo $i >> /data/hello;sleep 1;done"]volumeMounts:- name: datamountPath: /data- name: readimage: centoscommand: ["bash","-c","tail -f /data/hello"]volumeMounts:- name: datamountPath: /datavolumes:- name: dataemptyDir: {}

上述示例中有两个容器,write容器负责提供数据,read消费数据,通过数据卷将写入数据的目录和读取数据的目录都放到了该卷中,这样每个容器都能看到该目录。

验证:

kubectl apply -f pod.yaml
kubectl logs my-pod -c read -f

在Pod中容器分为以下几个类型:

  • Infrastructure Container:基础容器,维护整个Pod网络空间,对用户不可见

  • InitContainers:初始化容器,先于业务容器开始执行,一般用于业务容器的初始化工作

  • Containers:业务容器,具体跑应用程序的镜像

6.4 镜像拉取策略

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: javaimage: lizhenliang/java-demoimagePullPolicy: IfNotPresent

imagePullPolicy 字段有三个可选值:

  • IfNotPresent:默认值,镜像在宿主机上不存在时才拉取

  • Always:每次创建 Pod 都会重新拉取一次镜像

  • Never: Pod 永远不会主动拉取这个镜像

如果拉取公开的镜像,直接按照上述示例即可,但要拉取私有的镜像,是必须认证镜像仓库才可以,即docker login,而在K8S集群中会有多个Node,显然这种方式是很不放方便的!为了解决这个问题,K8s 实现了自动拉取镜像的功能。 以secret方式保存到K8S中,然后传给kubelet。

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:imagePullSecrets:- name: myregistrykeycontainers:- name: javaimage: lizhenliang/java-demoimagePullPolicy: IfNotPresent

上述中名为 myregistrykey 的secret是由kubectl create secret docker-registry命令创建:

 kubectl create secret docker-registry myregistrykey --docker-username=admin --docker-password=Harbor12345 --docker-email=admin@harbor.com --docker-server=192.168.31.70

--docker-server: 指定docke仓库地址 --docker-username: 指定docker仓库账号 --docker-password: 指定docker仓库密码 --docker-email: 指定邮件地址(选填)

6.5 资源限制

Pod资源配额有两种:

  • 申请配额:调度时使用,参考是否有节点满足该配置

    spec.containers[].resources.limits.cpu

    spec.containers[].resources.limits.memory

  • 限制配额:容器能使用的最大配置

    spec.containers[].resources.requests.cpu

    spec.containers[].resources.requests.memory

示例:

apiVersion: v1
kind: Pod
metadata:name: web
spec:containers:- name: javaimage: lizhenliang/java-demoresources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"

其中cpu值比较抽象,可以这么理解:

1核=1000m

1.5核=1500m

那上面限制配置就是1核的二分之一(500m),即该容器最大使用半核CPU。

该值也可以写成浮点数,更容易理解:

半核=0.5

1核=1

1.5核=1.5

6.6 重启策略

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: javaimage: lizhenliang/java-demorestartPolicy: Always

restartPolicy字段有三个可选值:

  • Always:当容器终止退出后,总是重启容器,默认策略。

  • OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。适于job

  • Never:当容器终止退出,从不重启容器。适于job

6.7 健康检查

默认情况下,kubelet 根据容器状态作为健康依据,但不能容器中应用程序状态,例如程序假死。这就会导致无法提供服务,丢失流量。因此引入健康检查机制确保容器健康存活。

健康检查有两种类型:

  • livenessProbe

    如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。

  • readinessProbe

    如果检查失败,Kubernetes会把Pod从service endpoints中剔除。

这两种类型支持三种检查方法:

Probe支持以下三种检查方法:

  • httpGet

    发送HTTP请求,返回200-400范围状态码为成功。

  • exec

    执行Shell命令返回状态码是0为成功。

  • tcpSocket

    发起TCP Socket建立成功。

示例:

apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-exec
spec:containers:- name: livenessimage: busyboxargs:- /bin/sh- -c- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 60livenessProbe:exec:command:- cat- /tmp/healthyinitialDelaySeconds: 5periodSeconds: 5

上述示例:启动容器第一件事创建文件,停止30s,删除该文件,再停止60s,确保容器还在运行中。

验证现象:容器启动正常,30s后异常,会restartPolicy策略自动重建,容器继续正常,反复现象。

6.8 调度策略

先看下创建一个Pod的工作流程: create pod -> apiserver -> write etcd -> scheduler -> bind pod to node -> write etcd -> kubelet( apiserver get pod) -> dcoekr api,create container -> apiserver -> update pod status to etcd -> kubectl get pods

Pod根据调度器默认算法将Pod分配到合适的节点上,一般是比较空闲的节点。但有些情况我们希望将Pod分配到指定节点,该怎么做呢?

这里给你介绍调度策略:nodeName、nodeSelector和污点

1、nodeName

nodeName用于将Pod调度到指定的Node名称上。

例如:下面示例会绕过调度系统,直接分配到k8s-node1节点。

apiVersion: v1
kind: Pod
metadata:labels:run: busyboxname: busyboxnamespace: default
spec:nodeName: k8s-node1containers:- image: busyboxname: bscommand:- "ping"- "baidu.com"

2、nodeSelector

nodeSelector用于将Pod调度到匹配Label的Node上。

先给规划node用途,然后打标签,例如将两台node划分给不同团队使用:

kubectl label nodes k8s-node1 team=a
kubectl label nodes k8s-node2 team=b

然后在创建Pod只会被调度到含有team=a标签的节点上。

apiVersion: v1
kind: Pod
metadata:name: busyboxnamespace: default
spec:nodeSelector: team: bcontainers:- image: busyboxname: bscommand:- "ping"- "baidu.com"

3、taint(污点)与tolerations(容忍)

污点应用场景:节点独占,例如具有特殊硬件设备的节点,如GPU

设置污点命令:

kubectl taint node [node] key=value[effect] 

其中[effect] 可取值:

  • NoSchedule :一定不能被调度。

  • PreferNoSchedule:尽量不要调度。

  • NoExecute:不仅不会调度,还会驱逐Node上已有的Pod。

示例:

先给节点设置污点,说明这个节点不是谁都可以调度过来的:

kubectl taint node k8s-node1  abc=123:NoSchedule

查看污点:

kubectl describe node k8s-node1 |grep Taints

然后在创建Pod只有声明了容忍污点(tolerations),才允许被调度到abc=123污点节点上。

apiVersion: v1
kind: Pod
metadata:labels:run: busyboxname: busybox3namespace: default
spec:tolerations:- key: "abc"operator: "Equal"value: "123"effect: "NoSchedule"containers:- image: busyboxname: bscommand:- "ping"- "baidu.com"

如果不配置容忍污点,则永远不会调度到k8s-node1。

去掉污点:

kubectl taint node [node] key:[effect]-
kubectl taint node k8s-node1 abc:NoSchedule-

6.9 故障排查

# 查看事件,可用于大部分资源
kubectl describe TYPE/NAME    
# 如果pod启动失败,先查看日志
kubectl logs TYPE/NAME [-c CONTAINER]  
# 进入到容器中debug
kubectl exec POD [-c CONTAINER] -- COMMAND [args...]  

第7章:深入理解常用控制器

7.1 Pod与controller的关系

  • controllers:在集群上管理和运行容器的对象。有时也称为工作负载(workload)

  • 通过label-selector相关联,如下图所示。

  • Pod通过控制器实现应用的运维,如伸缩,滚动升级等

7.2 无状态应用部署控制器 Deployment

Deployment功能:

  • 部署无状态应用(无状态应用简单来讲,就是Pod可以漂移任意节点,而不用考虑数据和IP变化)

  • 管理Pod和ReplicaSet(副本数量管理控制器)

  • 具有上线部署、副本设定、滚动升级、回滚等功能

  • 提供声明式更新,例如只更新一个新的Image

应用场景:Web服务,微服务

下图是Deployment 标准YAML,通过标签与Pod关联。

使用YAML部署一个java应用:

apiVersion: apps/v1
kind: Deployment
metadata:name: web
spec:replicas: 3    # 设置3个副本selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:containers:- image: lizhenliang/java-demoname: java

将这个java应用暴露到集群外部访问:

apiVersion: v1
kind: Service
metadata:labels:app: webname: web
spec:ports:- port: 80             # 集群内容访问应用端口protocol: TCPtargetPort: 8080     # 容器镜像端口nodePort: 30008      # 对外暴露的端口selector:app: webtype: NodePort

查看资源:

kubectl get pods,svc
NAME                       READY   STATUS    RESTARTS   AGE
pod/web-7f9c858899-dcqwb   1/1     Running   0          18s
pod/web-7f9c858899-q26bj   1/1     Running   0          18s
pod/web-7f9c858899-wg287   1/1     Running   0          48sNAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.1.0.1      <none>        443/TCP        5m55s
service/web          NodePort    10.1.157.27   <none>        80:30008/TCP   48s

浏览器输入:http://NodeIP:30008 即可访问到该应用。

升级项目,即更新最新镜像版本,这里换一个nginx镜像为例:
kubectl set image deployment/web nginx=nginx:1.15
kubectl rollout status deployment/web # 查看升级状态如果该版本发布失败想回滚到上一个版本可以执行:
kubectl rollout undo deployment/web   # 回滚最新版本也可以回滚到指定发布记录:
kubectl rollout history deployment/web  # 查看发布记录
kubectl rollout undo deployment/web --revision=2  # 回滚指定版本扩容/缩容:
kubectl scale deployment nginx-deployment --replicas=5 
--replicas设置比现在值大就是扩容,反之就是缩容。

kubectl set image 会触发滚动更新,即分批升级Pod。

滚动更新原理其实很简单,利用新旧两个replicaset,例如副本是3个,首先Scale Up增加新RS副本数量为1,准备就绪后,Scale Down减少旧RS副本数量为2,以此类推,逐渐替代,最终旧RS副本数量为0,新RS副本数量为3,完成本次更新。这个过程可通过kubectl describe deployment web看到。

7.3 守护进程控制器 DaemonSet

DaemonSet功能:

  • 在每一个Node上运行一个Pod

  • 新加入的Node也同样会自动运行一个Pod

应用场景:Agent,例如监控采集工具,日志采集工具

7.4 批处理 Job & CronJob

Job:一次性执行

应用场景:离线数据处理,视频解码等业务

apiVersion: batch/v1
kind: Job
metadata:name: pi
spec:template:spec:containers:- name: piimage: perlcommand: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: Never   # 作业失败后会不再尝试创建新的PodbackoffLimit: 4   # .spec.backoffLimit字段限制重试次数。默认情况下,这个字段默认值是6。

上述示例中将π计算到2000个位置并将其打印出来。完成大约需要10秒。

查看任务:

kubectl get pods,job 

CronJob:定时任务,像Linux的Crontab一样。

应用场景:通知,备份

apiVersion: batch/v1beta1
kind: CronJob
metadata:name: hello
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: helloimage: busyboxargs:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailure  # 作业失败并返回状态码非0时,尝试创建新的Pod运行任务

上述示例中将每分钟打印一次Hello。

查看任务:

kubectl get pods,cronjob

官方网站: http://www.ctnrs.com

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

相关文章

  1. Java多进程从头讲到尾,从基础到源码统统帮你搞定

    常见的分布式事务场景 分布式事务其实就在我们身边&#xff0c;你一直在用&#xff0c;但是你却一直不注意它。 转账 扣你账户的余额&#xff0c;增加别人账户余额&#xff0c;如果只扣了你的&#xff0c;别人没增加这是失败&#xff1b;如果没扣你的钱别人也增加了那银行的…...

    2024/4/16 20:12:59
  2. 985毕业,半路出家28岁进军Java,坚持奋斗了三年现如今年薪36W+

    背景 26岁985研究生毕业&#xff0c;学的土木工程相关的专业。工作半年&#xff0c;存款3000&#xff0c;半年后调到深圳总部&#xff08;公司央企&#xff09;&#xff0c;工作一年差不多也就几万存款&#xff0c;感觉生活无望&#xff0c;就直接决定转行。 说实在的&#xf…...

    2024/4/19 22:39:03
  3. React 属性 函数式组件 Hooks(学习第三天)

    目录一.React属性1.PureComponent&#xff08;1&#xff09;介绍PureComponent&#xff08;2&#xff09;为什么用 PureComponent &#xff1f;&#xff08;3&#xff09;PureComponent优点&#xff08;4&#xff09;PureComponent缺点2.ref&#xff08;1&#xff09;ref是什么…...

    2024/4/19 22:38:57
  4. Java大厂74道高级面试合集,附小技巧

    part 1Java基础核心技术总结 万事都离不开根基&#xff0c;Java基础对于一些老鸟来说可能已经很熟悉了&#xff0c;但是对于很多开发5年以下的朋友掌握的或许不是很牢固&#xff0c;因此这份笔记更适合温故而知新。 Part 2并发编程&#xff08;架构师筑基必备&#xff09; 并发…...

    2024/4/19 22:38:50
  5. lambda表达式中的箭头函数

    语法结构 java中lambda表达式的语法结构&#xff1a;(params) -> expression。 由三部分构成: 第一部分是括号以及括号内部的形式参数 第二部分是"->"箭头符号 第三部分是expression方法体&#xff0c;方法体可以是代码块也可以是执行表达式。 //1. lambda表…...

    2024/4/19 22:38:45
  6. Elasticsearch集成(二)

    49-框架集成-SpringData-整体介绍 Spring Data是一个用于简化数据库、非关系型数据库、索引库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷&#xff0c;并支持 map-reduce框架和云计算数据服务。Spring Data可以极大的简化JPA(Elastics…...

    2024/4/19 22:38:31
  7. 项目实训第五周(二)

    编写测试报告 目录 1. 概述 1.2系统背景 1.3测试范围 1.4参考资料 2.系统分析与测试内容设计 2.1系统功能分析 2.2功能需求 3.测试计划执行情况 3.1测试类型 3.2测试环境与配置 3.3测试问题总结 4.测试总结 4.1测试用例执行结果 4.2测试问题解决 4.3测试结果分…...

    2024/4/19 22:38:19
  8. 三个数求最大值,最小值,并排序

    ...

    2024/4/8 20:51:31
  9. File类和匿名内部类

    文章目录File类和匿名内部类1. File类1.1 File类概述1.2 File类构造方法1.3 File类创建文件和文件夹的方法1.4 File类删除文件和文件夹的方法1.5 File类判断方法1.6 File类鸡肋方法1.7 File类列表方法1.8 FilenameFilter过滤器2. 匿名内部类 Anonymous Inner Type2.1 接口和实现…...

    2024/4/20 23:11:35
  10. Java学习的三个终极问题及学习路线规划,论程序员成长的正确姿势

    蚂蚁花呗第一次技术面&#xff08;60min&#xff09;&#xff1a; Java容器有哪些&#xff1f;哪些是同步容器,哪些是并发容器&#xff1f;ArrayList和LinkedList的插入和访问的时间复杂度&#xff1f;java反射原理&#xff0c; 注解原理&#xff1f;说说一致性 Hash 原理新生…...

    2024/4/19 14:53:37
  11. 快速排序 - python

    快速排序 学习来源&#xff1a;b站 python分享站 快速排序&#xff1a;首先&#xff0c;让列表第一个元素归位。如图&#xff0c;一个列表&#xff0c;两个箭头分别表示left和right&#xff0c; 把5拿出来&#xff0c;right从右往左遍历把比5小的值移到左边&#xff0c;当ri…...

    2024/4/26 19:32:34
  12. java 对象内存大小计算(基于64位操作系统)

    计算对象大小需要了解java对象内存布局。在HotSpot 虚拟机中&#xff0c;对象在内存中布局分为三块区域&#xff0c;对象头&#xff08;Header&#xff09;、实例数据&#xff08;Instance Data&#xff09;和对齐填充&#xff08;Padding&#xff09;。 对象头 对象头主要包括…...

    2024/4/11 23:31:15
  13. 图解SQL语句:经典排名问题+TOP N

    力扣178题 分数排名问题 题目&#xff1a; 如果两个分数相同&#xff0c;则两个分数排名(Rank)相同&#xff0c;平分后的下一个名次应该是下一个连续的整数值值。换句话说&#xff0c;名次之间不应该有“间隔”。 idsalary1100289384489568 根据推断&#xff1a;所得到的…...

    2024/4/21 13:14:52
  14. 数据结构——栈

    数据结构——栈栈1.栈的概念&#xff1a;2.栈的基本运算&#xff1a;3.基本操作的代码&#xff1a;栈的顺序存储结构顺序栈基本操作置空栈判空栈入栈出栈取栈顶元素注意事项多栈共享邻接空间共享栈的基本操作栈 1.栈的概念&#xff1a; 栈作为一种数据结构&#xff0c;是一种…...

    2024/4/20 2:49:03
  15. BigData File Viewer工具介绍

    目录1.概述2.官网地址3.功能4.使用方法1.概述 BigData File Viewer时一个跨平台&#xff08;例如Windows&#xff0c;MAC&#xff0c;Linux等&#xff09;的桌面应用程序&#xff0c;它用于查看常见的大数据二进制格式&#xff0c;例如Parquet&#xff0c;ORC&#xff0c;AVRO…...

    2024/4/21 8:52:36
  16. 第8章 JSP

    目录8.1 概念&#xff1a;8.2 原理8.3 JSP的脚本8.4 JSP的内置对象&#xff1a;requestresponseout&#xff1a;字符输出流对象8.5 案例:改造Cookie案例8.6 指令8.7 注释:8.8 内置对象8.9 MVC&#xff1a;开发模式8.9.1 jsp演变历史8.9.2 MVC&#xff1a;8.9.3 MVC优缺点&#…...

    2024/4/24 7:05:52
  17. 玩转5G之--网络布线2 详细解说

    目录 前言&#xff1a; 上期回顾&#xff1a; 本期内容&#xff1a; 1.交叉线&#xff1a;交叉电缆 2.线缆的连接&#xff1a; 3.制作双绞线跳线&#xff1a; 4.信息插座的安装&#xff1a; 5.双绞线连通性测试&#xff1a; 6.无线传输介质&#xff1a; 一. 无线电波&a…...

    2024/4/27 20:20:48
  18. 2021-07-29牛客网面试题练习总结

    escape方法&#xff1a; 该方法返回对一个字符串编码后的结果字符串 eval方法&#xff1a;该方法将某个参数字符串作为一个JavaScript执行 parseFloat方法&#xff1a;该方法将一个字符串转换成对应的小数 isNaN方法&#xff1a;该方法用于检测参数是否为数值型&#xff0c;…...

    2024/4/21 0:07:07
  19. Python中pip命令出现Microsoft Visual C++ 14.0 is required问题的解决方法

    很多网上遇到这种问题大都是安个pycharm&#xff0c;jupyter notebook之类的&#xff0c;然后在里面配置环境&#xff0c;那么如何不下载而简单解决呢&#xff1f;当然vs的某些东西要下载是避免不了的。 首先如果在下面这个网站找相应版本python的whl文件&#xff0c;cp37代表为…...

    2024/4/21 19:25:47
  20. 【Numpy】numpy.random.uniform均匀分布

    numpy.random.uniform函数的用法numpy.random.uniform()函数其他随机数产生函数1、numpy.random.randint(low, highNone, sizeNone, dtypel)2、numpy.random.random_sample(sizeNone)3、numpy.random.rand(d0, d1, ..., dn)4、numpy.random.randn&#xff08;d0,d1,...,dn)nump…...

    2024/4/27 2:07:34

最新文章

  1. 北大发现了一种特殊类型的注意力头!

    检索头的发现或许将有力地帮助大模型领域在提高长上下文推理能力、减少幻觉和压缩KV缓存方面的研究。 从 Claude100K 到 Gemini10M&#xff0c;我们正处于长上下文语言模型的时代。如何在长上下文中利用任何输入位置的信息&#xff1f;北大联合另外四所高校发现了一种特殊类型…...

    2024/4/27 23:17:08
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 在 Visual Studio Code (VSCode) 中隐藏以 . 开头的文件

    打开VSCode。 按下Ctrl ,快捷键打开设置。您也可以点击屏幕左下角的齿轮图标&#xff0c;然后选择“Settings”。 在设置搜索框中&#xff0c;键入files.exclude。 在找到的Files: Exclude项中&#xff0c;点击Add Pattern按钮来添加一个新的模式&#xff0c;或者直接在搜索…...

    2024/4/22 21:08:05
  4. 数据结构——二叉树——二叉搜索树(Binary Search Tree, BST)

    目录 一、98. 验证二叉搜索树 二、96. 不同的二叉搜索树 三、538. 把二叉搜索树转换为累加树 二叉搜索树&#xff1a;对于二叉搜索树中的每个结点&#xff0c;其左子结点的值小于该结点的值&#xff0c;而右子结点的值大于该结点的值 一、98. 验证二叉搜索树 给你一个二叉树的…...

    2024/4/26 8:24:13
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/4/27 1:53:53
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/4/27 3:39:11
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/4/27 12:24:35
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/4/27 12:24:46
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/4/27 3:39:08
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/4/27 3:39:07
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/4/27 3:39:07
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/4/27 12:44:49
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/4/27 21:08:20
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/4/26 22:35:59
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/4/27 18:40:35
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/4/27 3:39:03
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/4/27 13:52:15
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/4/27 13:38:13
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/4/27 1:03:20
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/4/27 3:22:12
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/4/27 22:51:49
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/4/27 3:39:00
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/4/26 23:53:24
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/4/27 20:28:35
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57