002_Kubernetes安装配置

2023-11-07

1. k8s环境平台规划

1.1 单master集群

  单个master节点,然后管理多个node节点

在这里插入图片描述

1.2 多master集群

  多个master节点,管理多个node节点,同时中间多了一个负载均衡的过程

在这里插入图片描述

2. 配置要求

环境 节点 要求
测试环境 master 2核 4G 20G
测试环境 node 4核 8G 40G
生产环境 master 8核 16G 100G
生产环境 node 16核 64G 200G

对于 Kubernetes 初学者推荐在阿里云或腾讯云采购如下配置:(您也可以使用自己的虚拟机、私有云等您最容易获得的 Linux 环境)

  • 至少2台 2核4G 的服务器
  • Cent OS 7.6 / 7.7 / 7.8

3. Kubernetes集群主要有两种方式

3.1 kubeadm

  kubeadm是一个K8S部署工具,提供kubeadm init 和 kubeadm join,用于快速部署Kubernetes集群

  官网地址

3.2 二进制包

  从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

  Kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

4. kubeadm、 kubectl 、kubelet 区别

  1. kubeadm
    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。
    这个工具能通过两条指令完成一个kubernetes集群的部署:

    # 创建一个 Master 节点
    kubeadm init
    
    # 将一个 Node 节点加入到当前集群中
    kubeadm join <Master节点的IP和端口 >
    
    
  2. kubectl
    kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署

  3. kubelet

    Kubelet:master派到node节点代表,管理本机容器

    • 一个集群中每个节点上运行的代理,它保证容器都运行在Pod中
    • 负责维护容器的生命周期,同时也负责Volume(CSI) 和 网络(CNI)的管理

5. 使用kubeadm方式搭建K8s集群主要分为以下几步

  • 准备三台虚拟机,同时安装操作系统CentOS 7.x
  • 对三个安装之后的操作系统进行初始化操作
  • 在三个节点安装 docker kubelet kubeadm kubectl
  • 在master节点执行kubeadm init命令初始化
  • 在node节点上执行 kubeadm join命令,把node节点添加到当前集群
  • 配置CNI网络插件,用于节点之间的连通【失败了可以多试几次】
  • 通过拉取一个nginx进行测试,能否进行外网测试

5. 安装步骤

1. 检查 centos / hostname

# 在 master 节点和 worker 节点都要执行
cat /etc/redhat-release

# 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字
# 不能使用 localhost 作为节点的名字
hostname

# 请使用 lscpu 命令,核对 CPU 信息
# Architecture: x86_64    本安装文档不支持 arm 架构
# CPU(s):       2         CPU 内核数量不能低于 2
lscpu

在这里插入图片描述

修改 hostname

# 修改 hostname
hostnamectl set-hostname your-new-host-name
# 查看修改结果
hostnamectl status
# 设置 hostname 解析
echo "127.0.0.1   $(hostname)" >> /etc/hosts

2. 安装docker及kubelet

  安装参考:https://www.kuboard.cn/install/history-k8s/install-k8s-1.18.x.html

  1. 认真核对如下选项

    • 我的任意节点 centos 版本为 7.6 / 7.7 或 7.8
    • 我的任意节点 CPU 内核数量大于等于 2,且内存大于等于 4G
    • 我的任意节点 hostname 不是 localhost,且不包含下划线、小数点、大写字母
    • 我的任意节点都有固定的内网 IP 地址
    • 我的任意节点都只有一个网卡,如果有特殊目的,我可以在完成 K8S 安装后再增加新的网卡
    • 我的任意节点上 Kubelet使用的 IP 地址 可互通(无需 NAT 映射即可相互访问),且没有防火墙、安全组隔离
    • 我的任意节点不会直接使用 docker run 或 docker-compose 运行容器
  2. 使用 root 身份在所有节点执行如下代码,以安装软件:

    • docker
    • nfs-utils
    • kubectl / kubeadm / kubelet
  3. 手动执行以下代码,结果与快速安装相同。请将脚本第} 替换成您需要的版本号,例如 1.18.9

    docker hub 镜像请根据自己网络的情况任选一个

    	# 在 master 节点和 worker 节点都要执行
    	# 最后一个参数 1.18.9 用于指定 kubenetes 版本,支持所有 1.18.x 版本的安装
    	# 腾讯云 docker hub 镜像
    	# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
    	# DaoCloud 镜像
    	# export REGISTRY_MIRROR="http://f1361db2.m.daocloud.io"
    	# 阿里云 docker hub 镜像
    	export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
    
    #!/bin/bash
    
    # 在 master 节点和 worker 节点都要执行
    
    # 安装 docker
    # 参考文档如下
    # https://docs.docker.com/install/linux/docker-ce/centos/ 
    # https://docs.docker.com/install/linux/linux-postinstall/
    
    # 卸载旧版本
    yum remove -y docker \
    docker-client \
    docker-client-latest \
    docker-ce-cli \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine
    
    # 设置 yum repository
    yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # 安装并启动 docker
    yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io
    systemctl enable docker
    systemctl start docker
    
    # 安装 nfs-utils
    # 必须先安装 nfs-utils 才能挂载 nfs 网络存储
    yum install -y nfs-utils
    yum install -y wget
    
    # 关闭 防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    
    # 关闭 SeLinux 容器可以读取主机文件系统
    setenforce 0
    sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    
    # 关闭 swap 关闭交换空间的使用
    swapoff -a
    yes | cp /etc/fstab /etc/fstab_bak
    cat /etc/fstab_bak |grep -v swap > /etc/fstab
    
    # 修改 /etc/sysctl.conf
    # 如果有配置,则修改
    sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g"  /etc/sysctl.conf
    sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g"  /etc/sysctl.conf
    sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g"  /etc/sysctl.conf
    sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g"  /etc/sysctl.conf
    sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g"  /etc/sysctl.conf
    sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g"  /etc/sysctl.conf
    sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g"  /etc/sysctl.conf
    # 可能没有,追加
    #主要是目的是 当linux主机有多个网卡时一个网卡收到的信息是否能够传递给其他的网卡 如果设置成1 的话 可以进行数据包转发 可以实现VxLAN 等功能.将桥接的 IPv4 流量传递到 iptables 的链
    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
    #意味着二层的网桥在转发包时也会被iptables的FORWARD规则所过滤
    echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
    #设置禁用IPv6
    echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
    echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
    echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
    #IPv6 转发必须要启用
    echo "net.ipv6.conf.all.forwarding = 1"  >> /etc/sysctl.conf
    # 执行命令以应用
    sysctl -p
    
    # 配置K8S的yum源
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
           http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
    # 卸载旧版本
    yum remove -y kubelet kubeadm kubectl
    
    # 安装kubelet、kubeadm、kubectl
    # 将 ${1} 替换为 kubernetes 版本号,例如 1.17.2
    yum install -y kubelet-${1} kubeadm-${1} kubectl-${1}
    
    # 修改docker Cgroup Driver为systemd
    # # 将/usr/lib/systemd/system/docker.service文件中的这一行 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    # # 修改为 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
    # 如果不修改,在添加 worker 节点时可能会碰到如下错误
    # [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". 
    # Please follow the guide at https://kubernetes.io/docs/setup/cri/
    sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service
    
    # 设置 docker 镜像,提高 docker 镜像下载速度和稳定性
    # 如果您访问 https://hub.docker.io 速度非常稳定,亦可以跳过这个步骤
    curl -sSL https://kuboard.cn/install-script/set_mirror.sh | sh -s ${REGISTRY_MIRROR}
    
    # 重启 docker,并启动 kubelet
    systemctl daemon-reload
    systemctl restart docker
    systemctl enable kubelet && systemctl start kubelet
    
    docker version
    
    
  4. 初始化 master 节点

    # 只在 master 节点执行
    # 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP)
    # export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
    export MASTER_IP=x.x.x.x
    # 替换 apiserver.demo 为 您想要的 dnsName
    export APISERVER_NAME=apiserver.demo
    # Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
    export POD_SUBNET=10.100.0.1/16
    echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
    curl -sSL https://kuboard.cn/install-script/v1.18.x/init_master.sh | sh -s 1.18.9
    
    
  5. 检查 master 初始化结果

    # 只在 master 节点执行
    
    # 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
    watch kubectl get pod -n kube-system -o wide
    
    # 查看 master 节点初始化结果
    kubectl get nodes -o wide
    
    
  6. 初始化 worker节点

    获得 join命令参数
    在 master 节点上执行

    # 只在 master 节点执行
    kubeadm token create --print-join-command
    

    可获取kubeadm join 命令及参数,如下所示

    # kubeadm token create 命令的输出
    kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
    
    

    针对所有的 worker 节点执行

    # 只在 worker 节点执行
    # 替换 x.x.x.x 为 master 节点的内网 IP
    export MASTER_IP=x.x.x.x
    # 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME
    export APISERVER_NAME=apiserver.demo
    echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
    
    # 替换为 master 节点上 kubeadm token create 命令的输出
    kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
    
    
  7. 检查初始化结果
    在 master 节点上执行

    # 只在 master 节点执行
    kubectl get nodes -o wide
    
    

3. 测试kubernetes集群

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

    # 下载nginx 【会联网拉取nginx镜像】
    kubectl create deployment nginx --image=nginx
    # 查看状态
    kubectl get pod
    
  2. 如果我们出现Running状态的时候,表示已经成功运行了
    在这里插入图片描述

  3. 将端口暴露出去,让其它外界能够访问

    # 暴露端口
    kubectl expose deployment nginx --port=80 --type=NodePort
    # 查看一下对外的端口
    kubectl get pod,svc
    

4. 安装过程中遇到的错误

#查看错误日志
journalctl -xefu kubelet
  1. Cgroup Driver和kubelet的Cgroup Driver不一致

    failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
    
    vim  /var/lib/kubelet/kubeadm-flags.env
    

    修改成以下内容,增加 --cgroup-driver=systemd

    KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/k8sxio/pause:3.2"
    
  2. Calico 问题

    Readiness probe failed: caliconode is not ready: BIRD is not ready: BGP not established with 10.1.126.32
    

    master执行

    kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=ens*
    

6. 常用命令

kubectl命令的语法如下
kubectl [command] [type] [name] [flags]

  • comand:指定要对资源执行的操作,例如create、 get、delete
  • type:指定资源类型,比如deployment、pod、 service
  • name:指定资源的名称,名称大小写敏感
  • flags:指定额外的可选参数

移除worker节点

# 只在 worker 节点执行
kubeadm reset -f
# 只在 master 节点执行
kubectl get nodes -o wide
# 只在 master 节点执行 demo  节点名称
kubectl delete node demo-worker-x-x

node

命令 说明
查看服务器节点 kubectl get nodes
查看服务器节点详情 kubectl get nodes -o wide
查看服务器节点 kubectl get nodes
移除节点 kubectl delete node demo-worker-x-x
节点打标签 kubectl label nodes <节点名称> labelName=<标签名称>
查看节点标签 kubectl get node --show-labels
删除节点标签 kubectl label node <节点名称> labelName-

pod

命令 说明
查看所有pod节点 kubectl get pods -A
查看所有名称空间下的pod kubectl get pod --all-namespaces
根据命名空间查看pod kubectl get pod -n test
查看异常pod节点的日志 kubectl describe pod <pod名称> -n <名称空间>
根据yaml文件创建pod kubectl apply -f <文件名称>
根据yaml文件删除pod kubectl delete -f <文件名称>
删除pod节点 kubectl delete pod <pod名称> -n <名称空间>
查看异常pod节点的日志 kubectl describe pod <pod名称> -n <名称空间>
进入默认命名空间的pod节点 kubectl exec -it <pod名称> – /bin/bash
进入某个特定命名空间下的pod节点 kubectl exec -it <pod名称> -n <命名空间> – /bin/bash
普通方式创建pod kubectl run <pod名称> --image=<镜像名称>

deployment

说明 命令
deployment部署pod(具有自愈能力,宕机自动拉起) kubectl create deployment <pod名称> --image=<镜像名称>
deployment部署pod(多副本) kubectl create deployment <pod名称> --image=<镜像名称> --replicas=3
查看deployment部署 kubectl get deploy
删除deployment部署 kubectl delete deploy <pod名称>
deployment扩容\缩容pod kubectl scale deploy/<pod名称> --replicas=<5>
deployment扩容\缩容pod kubectl edit deploy <pod名称>
deployment滚动更新pod kubectl set image deploy/<pod名称> <容器名称>=<镜像名称:版本号> --record
deployment查看pod回退版本 kubectl rollout history deploy/<pod名称>
deployment查看pod回退版本详情 kubectl rollout history deploy/<pod名称> --revision=1
deployment回退pod到上一个版本 kubectl rollout undo deploy/<pod名称>
deployment回退pod到指定版本 kubectl rollout undo deploy/<pod名称> --to-revision=1
deployment暴露pod集群内部访问(ClusterIP) kubectl expose deployment <pod名称> --port=8080 --target-port=80 --type=ClusterIP
deployment暴露pod外网访问(NodePort) kubectl expose deployment <pod名称> --port=8080 --target-port=80 --type=NodePort

svc

说明 命令
查看服务 kubectl get svc
查看服务详情 kubectl get svc -o wide
查看所有名称空间下的服务 kubectl get svc --all-namespaces

namespace

说明 命令
查看名称空间 kubectl get namespace
查看名称空间 kubectl get ns
创建名称空间 kubectl create ns <名称>
删除名称空间 kubectl delete ns <名称>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

002_Kubernetes安装配置 的相关文章

  • 如何找出 Kubernetes 中可用的端口?

    我想在 kubernetes 集群中的不同端口上运行多个服务 并且想知道如何检查哪些端口可用并且不会与我的服务产生任何冲突 我还想知道每个端口上的服务名称 以便我可以更好地理解我的配置 有类似的问题涉及验证哪个NodePorts已经在使用中
  • 如何重用现有的持久卷声明

    我已经删除了我的 Elasticsearch 集群 但现在在部署新集群后 我需要访问存储在 3 个持久卷 PV 上的旧数据 如下所述 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS
  • Kubernetes:无法创建存储库

    我正在跟进Kubernetes 入门指南 http kubernetes io docs hellonode 一切都很顺利 直到我跑步 gcloud docker push gcr io
  • 将代码/文件直接注入 Google Cloud Engine 上的 Kubernetes 容器中

    如何将代码 文件直接注入 Google Cloud Engine 上的 Kubernetes 容器中 类似于使用 Docker 挂载主机文件 目录的方式 例如 docker run d name nginx p 443 443 v ngin
  • 如何在 kubernetes 中传递命令行参数?

    需要在 pod yaml 中传递 docker 容器 appContainer1 和 appContainer2 的命令行参数 pod yaml apiVersion v1 kind Pod metadata name microservi
  • 在 Kubernetes/Openshift 中将客户端-服务器流量保持在同一区域的最佳方法?

    我们运行兼容 Kubernetes OKD 3 11 的本地 私有云集群 其中后端应用程序与用作缓存和 K V 存储的低延迟 Redis 数据库进行通信 新的架构设计将在两个地理上分布的数据中心 区域 之间平均划分工作节点 我们可以假设节点
  • Grafana/prometheus 中没有 kafka 指标

    我成功部署了 Helm Chart普罗米修斯操作员 https github com coreos prometheus operator tree master helm prometheus operator kube 普罗米修斯 ht
  • Kubernetes 1.8 支持的 Docker 版本

    我要将我的 Kubernetes 集群升级到该版本1 8 7 有谁知道哪个 docker 版本与其最兼容 这是我在 Kubernetes 官方页面上找到的 但我想它可能是针对最新的 k8s 版本的 1 9 在每台计算机上安装 Docker
  • Kubernetes Pod 动态环境变量

    我需要能够将自定义环境变量分配给 Pod 的每个副本 一个变量应该是一些随机的 uuid 另一个唯一的数字 怎么可能实现呢 我更愿意继续使用带有副本的 部署 如果这不是开箱即用的 如何通过自定义复制控制器 控制器管理器来实现 有没有可用的钩
  • Kubernetes - 服务之间的通信

    我目前正在开发 kubernetes 集群 集群工作正常 我需要在不使用代理的情况下建立服务之间的通信 例如我有以下服务 worker app1 app2 app3 Worker 需要直接通过 SSH 登录应用程序容器并执行一些命令 在 d
  • 如何根据 Kubernetes / Docker 事件发送警报?

    是否可以根据 Kubernetes 集群内发生的事件以某种方式发送警报 到电子邮件 slack 特别是 如果 Pod 意外重新启动或 Pod 无法启动 那么获取警报将非常有用 同样 了解 Pod 的 CPU 使用率是否超过特定阈值并获取警报
  • 如何将 configmap 附加到 Kubernetes 中的部署?

    根据此处找到的说明 https kubernetes io docs tasks access application cluster connecting frontend backend https kubernetes io docs
  • 入口和 SSL 直通

    我最近一直在使用 nginxdemo nginx ingress 控制器 据我了解 该控制器无法执行 SSL 直通 我的意思是 将客户端证书一直传递到后端服务进行身份验证 因此我一直通过标头传递客户端主题 DN 最终 我更喜欢 SSL 直通
  • 如何将 kubernetes LoadBalancer Ingress URL 发布到 aws Route53

    今天 当我通过 aws 使用 kubernetes 启动一个应用程序时 它公开了一个公开可见的 LoadBalancer Ingress URL 但是要将其链接到我的域以使公众可以访问该应用程序 我需要在每个设备上的浏览器中手动进入 aws
  • 匹配同一端口上不同路径的 Istio 虚拟服务路由

    我想知道如何在同一端口上匹配 gRPC 路由 以下是我希望通过 VirtualService 实现的目标的示例 apiVersion networking istio io v1alpha3 kind VirtualService meta
  • 如何为某些节点分配命名空间?

    有什么办法可以配置吗nodeSelector在命名空间级别 我只想在此命名空间的某些节点上运行工作负载 为了达到这个目的 你可以使用PodNodeSelector准入控制器 首先 您需要在您的kubernetes apiserver Edi
  • 指定命名空间时,无法使用 nginx-stable 中的 helm 安装 nginx ingress

    我有个问题 我正在尝试使用 helm 3 安装 nginx 但当我指定命名空间时它不起作用 知道为什么吗 它无需任何操作即可工作 helm install nginx release nginx stable nginx ingres n
  • 从 Kubernetes Python 客户端登录到 GitLab 存储库

    我有一个 Django 应用程序 它使用python 的官方 Kubernetes 客户端 https github com kubernetes client python并且工作正常 但它只部署 正确 公共注册表 有没有办法执行登录后让
  • 阻止 ingress-nginx 负载均衡器上的特定路径

    我有许多指向入口控制器 IP 的域 我想阻止所有域 站点的 特定路径 有没有办法做到这一点 我可以用nginx ingress kubernetes io configuration snippet 对于每个站点 但正在寻找同时处理所有站点
  • Helm 3 图表安装错误:验证数据时出错:未设置 apiVersion

    我有一个简单的 helm 图表 它将通过 docker 桌面将应用程序部署到我的 kubernetes 本地副本 如果我使用 kubectl 一次部署一个 yaml 文件 一切都会正常工作 但是 当我尝试创建 helm 图表以方便部署时 出

随机推荐

  • python语言是一种面向过程的语言_浅谈编程语言中的面向过程和面向对象

    最近一直在自学Python 在 Python学习手册 的开篇有一句话 Python可以定义为面向对象的脚本语言 这句话让我十分困惑 并且在之后的一周里面让我总是混淆一些概念 到底什么是 面向对象 到底什么是 对象 带着这个疑问 我继续向下学
  • C# winform 一次只能允许一个应用(使用mutex)

    在很多应用程序开发过程中 需要只允许一个程序实例 即使是通过虚拟桌面方式连接过来的 也是只允许一个人运行 下面是实现该功能的代码 注意mutexName 为系统名称 Global为全局 表示即使通过通过虚拟桌面连接过来 也只是允许运行一次
  • verilog学习笔记(1)module实例化

    兜兜转转又回来学硬件了 哎 命啊 我的答案 有bug module top module input a input b output out wire w1 wire w2 wire w3 mod a mod a inst1 in1 w1
  • IDEA引入JDK/jar包无效、java 文件灰色右下角橙色java图标显示等问题解决办法

    一 引入jdk jar包无效 IDEA有时候会出现引入jdk无效的情况 import灰色 代码爆红 这是因为idea检测发现包并没有导入进来 1 如果是普通java项目 jdk等都配置好还是这样的话 可以通过 清除缓存并重启的方式解决 如下
  • k8s的1.20.15的kubeadm安装教程

    k8s的1 20 15的kubeadm安装教程 1 基础环境配置 1 1 配置信息 系统版本 centOS7 9 docker版本 19 03 x kubernetes 1 20 x Pod网段 172 168 0 0 16 service
  • Fiddler下载安装 Mac版

    目录 下载 安装 下载 1 进入FiddlerDownload Fiddler Web Debugging Tool for Free by Telerik下载网站 点击 Try Fiddler Everywhere 2 我这里选择的是ma
  • 【Spring Boot 初识丨一】入门实战

    学习前提 学习Spring Boot的前提是具备Java编程基础 包括面向对象编程 Java集合框架 异常处理 多线程等基本概念和技能 此外 还需要了解Web开发的基本知识 例如HTTP协议 Servlet JSP HTML CSS Jav
  • 《eNSP - OSPF 查看命令》

    display ospf peer 查看 OSPF 邻居的相关信息 display ip routing table protocol ospf 查看 OSPF 协议路由表 display ospf interface 查看运行 OSPF
  • LeetCode-二进制中1的个数

    计算机中的补数是 两个数加起来等于在二进制里一个非常整的数 比如 加起来等于 10000000000000000000000000000000000这样的 1 01 的补数 111111111111111111111111111111111
  • springboot封装响应实体

    前言 首先什么是响应实体 正常我们的后端都是接收前端 然后把请求需要的数据返回给前端 而这个返回的数据就是我们的响应实体 那么 为什么我们需要进行封装响应实体呢 第一点 最明显的就是 为了人机友好交互 如果单单只是把返回的数据给到前端 有数
  • Leetcode53/152—最大子数组和/最大子数组乘积(状态转移方程/不熟)

    53 最大子数组和 给你一个整数数组 nums 请你找出一个具有最大和的连续子数组 子数组最少包含一个元素 返回其最大和 子数组 是数组中的一个连续部分 思路 aaaaa 我老不会这个题 动态规划的是首先对数组进行遍历 当前最大连续子序列和
  • 什么是Spring三级缓存 对象在三级缓存中的创建流程 【三级缓存 循环依赖】

    一 什么是Spring三级缓存 第一级缓存 也叫单例池 存放已经经历了完整生命周期的Bean对象 第二级缓存 存放早期暴露出来的Bean对象 实例化以后 就把对象放到这个Map中 Bean可能只经过实例化 属性还未填充 第三级缓存 存放早期
  • Confluence不仅仅是一个wiki,它还可以是一个应用系统平台。

    利用Confluence插件系统 可以很容易地定制和扩展Confluence来满足您的需要 下面是Confluence开发者社区所开发的一些被广泛使用的插件 我们提供了一个包含了更多插件的库 您甚至可以去开发自己的插件 Office Con
  • JavaScript从题学习——预解析案例

    前言 从题中快速了解和复习下变量提升 函数提升 作用域链 预解析案例 答案在最后 案例1 var num 10 fun function fun console log num var num 20 相当于执行了以下操作 var num f
  • 1024 程序员节:低代码低成本硬件 - 树莓派 Pico 2040

    恰逢 1024 程序员节 程序员们忙着开交流会 或者写代码 来庆祝节日 或者随便写点什么 留下自己的足迹 CSDN 组织了好几个线下 线上的会 大家也在讨论开源 开放 小米的崔总 引用了 论语 里的一句话 德不孤 必有邻 来评价正确的开源之
  • 判断回文串C++

    题目描述 输入一串字符 字符个数不超过1000 判断它们是否构成回文 所谓回文字符串 就是一个字符串 从左到右读和从右到左读是完全一样的 比如 level aaabbaaa 输入 输入只有一行 包括一串字符 输出 输出只有一行TRUE或者F
  • 从mysql数据库中读取二进制文件_ASP中从数据库读取二进制文件数据代码

    driver name1 DRIVER Microsoft Access Driver mdb DBQ D 数据库 TREE MDB 根目录下数据库打开语句 dim search rs j search select from Files
  • 关于图像处理技术检测火焰的一些建议(仅个人观点)

    1 火焰检测是图像识别的一个细类 某种意义上图像识别的技术都可以用于火焰检测 因此如帧间差分法 RGB方法等都可直接搜相应方法获得源码 直接用于火焰检测 微调参数即可 当然这种检测结果是不佳的 2 火焰检测需要认清到底是要检测动态火焰还是静
  • Vue3打印功能

    目录 安装 vue3 print nb main js中引入 vue3 print nb 页面内引入 声明打印时的配置的变量 选择要打印的模板区域 配置对应的id包裹 配置完成了看效果 点击打印出现打印模态框 安装 vue3 print n
  • 002_Kubernetes安装配置

    文章目录 1 k8s环境平台规划 1 1 单master集群 1 2 多master集群 2 配置要求 3 Kubernetes集群主要有两种方式 3 1 kubeadm 3 2 二进制包 4 kubeadm kubectl kubelet