当前位置: 首页 > news >正文

【云原生】k8s 离线部署讲解和实战操作

文章目录

    • 一、概述
    • 二、前期准备
      • 1)节点信息
      • 2)修改主机名和配置hosts
      • 3)配置ssh互信
      • 4)时间同步
      • 5)关闭防火墙
      • 6)关闭 swap
      • 7)禁用SELinux
      • 8)允许 iptables 检查桥接流量
    • 三、开始部署
      • 1)离线安装 docker
        • 1、下载
        • 2、解压的docker文件夹全部移动至/usr/bin目录
        • 3、配置 docker 启动文件
        • 4、启动 docker 服务
        • 5、配置镜像下载加速器和 cgroupdriver
      • 2)离线安装 kubeadm, kubelet, kubectl
        • 1、下载
        • 2、配置 kubeadm 启动文件
        • 3、导入镜像
        • 4、启动 kubelet
      • 3)集群初始化
        • 1、安装 keepalived 生成 VIP 实现高可用
        • 2、创建初始化配置文件
        • 3、k8s 集群初始化
        • 4、安装 cni 插件(flannel)
      • 4)添加 master 节点
      • 5)添加 node 节点
      • 6)配置 IPVS
        • 1、加载ip_vs相关内核模块
        • 2、离线安装 ipvsadm 工具
        • 3、编辑kube-proxy配置文件,mode修改成ipvs
        • 4、重启kube-proxy
      • 7)安装 ingress-nginx
      • 8)安装 nfs provisioner
        • 1、安装helm
        • 2、添加helm仓库源
        • 3、安装 nfs
        • 3、nfs provisioner
      • 9)安装 Dashboard
        • 1、安装
        • 2、创建登录用户
        • 3、创建并获取登录token
        • 4、登录 web
      • 10)安装镜像仓库 Harbor
        • 1、创建证书
        • 2、创建证书秘钥
        • 3、添加 Chart 库
        • 4、开始部署 harbor
        • 5、查看
        • 5、web 访问

一、概述

Kubernetes是一种高度可扩展的容器编排平台,可用于部署、管理和自动化容器化应用程序的运行。在某些情况下,离线部署Kubernetes可能是必需的,例如在没有互联网连接的安全环境中或在网络连接不可靠的情况下。以下是离线部署Kubernetes的一般步骤:

  1. 获取Kubernetes二进制文件:从Kubernetes官网下载Kubernetes二进制文件并解压缩到本地。

  2. 准备离线镜像:在离线环境中,必须将所需的容器镜像下载到本地并存储在本地仓库中。可以使用Docker镜像导出/导入命令或Docker Registry Mirror工具将镜像从在线环境中导出并导入到离线环境中。

  3. 配置Kubernetes节点:在每个节点上安装必要的依赖项,例如Docker引擎、kubelet、kubeadm等。可以使用Docker离线安装程序将Docker引擎安装到离线节点中。

  4. 初始化Kubernetes集群:使用kubeadm init命令初始化集群,并将必要的配置文件和证书复制到节点上。在离线环境中,必须将kubelet和kubeadm所需的配置文件手动复制到每个节点上。

  5. 加入节点:使用kubeadm join命令将新节点加入到集群中。在离线环境中,必须手动复制kubelet和kubeadm配置文件,并在每个节点上使用kubeadm join命令将节点加入集群。

  6. 部署应用程序:使用kubectl命令在集群中部署应用程序,并将所需的容器镜像从本地仓库中拉取。

在离线环境中部署Kubernetes需要一些额外的工作,但是这是可能的,并且是部署Kubernetes的重要方法之一。

在这里插入图片描述
k8s 在线部署可以参考我以下几篇文章:

  • Kubernetes(k8s)安装以及搭建k8s-Dashboard详解

  • Kubernetes(k8s)最新版最完整版环境部署+master高可用实现(k8sV1.24.1+dashboard+harbor)

  • 【云原生】k8s 一键部署(ansible)

二、前期准备

1)节点信息

节点信息

主机名IP角色操作系统k8s 版本
local-168-182-110192.168.182.110master、keepalived(VIP:192.168.182.211)、nfs-servercentos71.23.6
local-168-182-111192.168.182.111master、keepalived、nfs-clientcentos71.23.6
local-168-182-112192.168.182.112master、nfs-clientcentos71.23.6
local-168-182-113192.168.182.113node、nfs-clientcentos71.23.6

k8s 版本:https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG

2)修改主机名和配置hosts

修改主机名

# 在192.168.182.110执行
hostnamectl set-hostname  local-168-182-110# 在192.168.182.111执行
hostnamectl set-hostname  local-168-182-110# 在192.168.182.112执行
hostnamectl set-hostname  local-168-182-110# 在192.168.182.113执行
hostnamectl set-hostname  local-168-182-110

配置hosts

cat >> /etc/hosts<<EOF
192.168.182.110 local-168-182-110
192.168.182.111 local-168-182-111
192.168.182.112 local-168-182-112
192.168.182.113 local-168-182-113
# VIP
cluster-endpoint 192.168.182.211
EOF

3)配置ssh互信

# 直接一直回车就行
ssh-keygenssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-110
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-111
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-112
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-113

4)时间同步

yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources

5)关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

6)关闭 swap

# 临时关闭;关闭swap主要是为了性能考虑
swapoff -a
# 可以通过这个命令查看swap是否关闭了
free
# 永久关闭        
sed -ri 's/.*swap.*/#&/' /etc/fstab

7)禁用SELinux

# 临时关闭
setenforce 0
# 永久禁用
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

8)允许 iptables 检查桥接流量

若要显式加载此模块,请运行 sudo modprobe br_netfilter,通过运行 lsmod | grep br_netfilter 来验证 br_netfilter 模块是否已加载:

sudo modprobe br_netfilter
lsmod | grep br_netfilter

为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 设置为 1。 例如:

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFsudo modprobe overlay
sudo modprobe br_netfilter# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF# 应用 sysctl 参数而不重新启动
sudo sysctl --system

三、开始部署

下载地址:https://download.docker.com/linux/static/stable/x86_64/

镜像、安装包、kube-flannel.ymldeploy.yaml等资源可关注我的公众号【大数据与云原生技术分享】回复【k8s】即可获取。

1)离线安装 docker

1、下载

# 下载
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.20.tgz
# 解压
tar -zxvf docker-20.10.20.tgz

2、解压的docker文件夹全部移动至/usr/bin目录

cp -p docker/* /usr/bin

3、配置 docker 启动文件

/usr/lib/systemd/system/目录下,创建docker.service文件

cat> /usr/lib/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
[Service]
Type=notify
EnvironmentFile=-/run/flannel/docker
WorkingDirectory=/usr/local/bin
ExecStart=/usr/bin/dockerd \-H tcp://0.0.0.0:4243 \-H unix:///var/run/docker.sock \--selinux-enabled=false \--log-opt max-size=1g
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

4、启动 docker 服务

systemctl daemon-reload# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
systemctl enable --now docker# 查看容器状态
systemctl status docker

在这里插入图片描述

5、配置镜像下载加速器和 cgroupdriver

cat >/etc/docker/daemon.json<<EOF
{"registry-mirrors": ["http://hub-mirror.c.163.com"],"exec-opts": ["native.cgroupdriver=systemd"]
}
EOFsystemctl restart docker

2)离线安装 kubeadm, kubelet, kubectl

1、下载

下载地址:https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG

wget https://dl.k8s.io/v1.23.6/kubernetes-server-linux-amd64.tar.gztar -xf kubernetes-server-linux-amd64.tar.gz
​
cd kubernetes/server/bin
cp -ar kubelet kubeadm kubectl /usr/bin/

2、配置 kubeadm 启动文件

cat >/usr/lib/systemd/system/kubelet.service <<EOF
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/
​
[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10
​
[Install]
WantedBy=multi-user.target
EOF#注意ExecStart内容换行
mkdir -p /usr/lib/systemd/system/kubelet.service.d/
cat >/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf <<EOF
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
EOF

3、导入镜像

下载资源包,解压进入images目录,执行以下命令就可以导入镜像了

sh image_load.sh

在这里插入图片描述

4、启动 kubelet

# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
systemctl enable --now kubelet

3)集群初始化

1、安装 keepalived 生成 VIP 实现高可用

【1】下载
下载地址:https://www.keepalived.org/download.html

wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz --no-check-certificatetar -zxvf keepalived-2.2.7.tar.gz# 安装openssl(编译keepalived需要)
yum -y install openssl openssl-devel# 编译 keepalived
yum install gcc -ycd keepalived-2.2.7 && ./configure --prefix=/usr/local/keepalived  --sysconf=/etc
make && make install# 配置环境变量
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

【2】master 配置

cat > /etc/keepalived/keepalived.conf<<EOF
! Configuration File for keepalived 
global_defs {#每个keepalived取个不同名称router_id 56
}
vrrp_instance VI_1 {# MASTER为主实例,BACKUP 为从实例state MASTER# 网卡名称interface ens33# 主备这里要配置为同样的 virtual_router_id 68# 优先级,主要高于备. 一般主配置为100  备配置为80priority 100advert_int 1# 主动抢占,主备都开启的话,服务器抢占过去后,要等这个服务器keepalived停掉才会漂移到另一台nopreemptauthentication {# 主备必须配置成同样的auth_type PASS# 主备必须配置成同样的auth_pass 1111}virtual_ipaddress {# vip,主备必须配置一样192.168.182.211}
}
EOF

【3】backend 配置

cat > /etc/keepalived/keepalived.conf<<EOF
! Configuration File for keepalived 
global_defs {#每个keepalived取个不同名称router_id 56
}
vrrp_instance VI_1 {# MASTER为主实例,BACKUP 为从实例state BACKUP# 网卡名称interface ens33# 主备这里要配置为同样的 virtual_router_id 68# 优先级,主要高于备. 一般主配置为100  备配置为80priority 80advert_int 1# 主动抢占,主备都开启的话,服务器抢占过去后,要等这个服务器keepalived停掉才会漂移到另一台nopreemptauthentication {# 主备必须配置成同样的auth_type PASS# 主备必须配置成同样的auth_pass 1111}virtual_ipaddress {# vip,主备必须配置一样192.168.182.211}
}
EOF

【4】配置服务启动

cat > /usr/lib/systemd/system/keepalived.service <<EOF
[Unit]
Description=LVS and VRRP High Availability Monitor
After=network-online.target syslog.target
Wants=network-online.target
Documentation=man:keepalived(8)
Documentation=man:keepalived.conf(5)
Documentation=man:genhash(1)
Documentation=https://keepalived.org[Service]
Type=forking
PIDFile=/run/keepalived.pid
KillMode=process
EnvironmentFile=-/usr/local/keepalived/sysconfig/keepalived
ExecStart=/usr/local/keepalived/sbin/keepalived  $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID[Install]
WantedBy=multi-user.targetEOF

【5】启动 keepalived

systemctl daemon-reload
systemctl enable --now keepalived

在这里插入图片描述

2、创建初始化配置文件

注意这里使用VIP

kubeadm config print init-defaults > kubeadm-config.yaml

3、k8s 集群初始化

这里追加tee命令将初始化日志输出到kubeadm-init.log中以备用(可选)。

kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log

或者直接初始化

kubeadm init \--apiserver-advertise-address=192.168.182.211 \--image-repository registry.aliyuncs.com/google_containers \--control-plane-endpoint=cluster-endpoint \--kubernetes-version v1.23.6 \--service-cidr=10.1.0.0/16 \--pod-network-cidr=10.244.0.0/16 \--v=5

4、安装 cni 插件(flannel)

# wget https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml
kubeclt apply -f kube-flannel.yml

4)添加 master 节点

# 在需要添加的master节点上执行CERT_KEY=`ssh cluster-endpoint "kubeadm init phase upload-certs --upload-certs|tail -1"`join_str=`ssh cluster-endpoint kubeadm token create --print-join-command`echo $join_str " --control-plane --certificate-key $CERT_KEY --v=5"# 拿到上面打印的命令在需要添加的节点上执行# --control-plane 标志通知 kubeadm join 创建一个新的控制平面。加入master必须加这个标记
# --certificate-key ... 将导致从集群中的 kubeadm-certs Secret 下载控制平面证书并使用给定的密钥进行解密。这里的值就是上面这个命令(kubeadm init phase upload-certs --upload-certs)打印出的key。mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config# 去掉master污点
# kubectl taint nodes `hostname` node-role.kubernetes.io/master:NoSchedule- 2>/dev/null
# kubectl taint nodes `hostname` node.kubernetes.io/not-ready:NoSchedule- 2>/dev/null

5)添加 node 节点


CERT_KEY=`ssh cluster-endpoint "kubeadm init phase upload-certs --upload-certs|tail -1"`join_str=`ssh cluster-endpoint kubeadm token create --print-join-command`echo $join_str " --certificate-key $CERT_KEY --v=5"

6)配置 IPVS

1、加载ip_vs相关内核模块

modprobe -- ip_vs
modprobe -- ip_vs_sh
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
# 验证开启了ipvs
lsmod |grep ip_vs

2、离线安装 ipvsadm 工具

在线安装就非常简单了

yum install ipvsadm -y

下载地址:http://www.linuxvirtualserver.org/software/ipvs.html

wget https://kernel.org/pub/linux/utils/kernel/ipvsadm/ipvsadm-1.31.tar.gz --no-check-certificate
tar -xzvf ipvsadm-1.31.tar.gz && cd ipvsadm-1.31# 先安装依赖包
yum install -y libnl libnl-devel gcc
# 编译安装
make && make install# 查看版本号
ipvsadm -version

3、编辑kube-proxy配置文件,mode修改成ipvs

kubectl edit  configmap -n kube-system  kube-proxy

在这里插入图片描述

4、重启kube-proxy

# 先查看
kubectl get pod -n kube-system | grep kube-proxy
# 再delete让它自拉起
kubectl get pod -n kube-system | grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
# 再查看
kubectl get pod -n kube-system | grep kube-proxy

7)安装 ingress-nginx

# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml -O /tmp/deploy.yamlkubectl apply -f /tmp/deploy.yaml

8)安装 nfs provisioner

1、安装helm

helm安装包在提供的资源包里也是有的,可以不用再去外网下载的。

# 下载包
wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz -O /tmp/helm-v3.7.1-linux-amd64.tar.gz
# 解压压缩包
tar -xf /tmp/helm-v3.7.1-linux-amd64.tar.gz -C /root/
# 制作软连接
ln -s /root/linux-amd64/helm /usr/local/bin/helm

2、添加helm仓库源

# 添加helm仓库源
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

3、安装 nfs

【服务端】

#### 安装nfs
yum -y install  nfs-utils rpcbind# 服务端
mkdir -p /opt/nfsdata
# 授权共享目录
chmod 666 /opt/nfsdata
cat > /etc/exports<<EOF
/opt/nfsdata *(rw,no_root_squash,no_all_squash,sync)
EOF
# 配置生效
exportfs -rsystemctl enable --now rpcbind
systemctl enable --now nfs-server

【客户端】

yum -y install rpcbind
systemctl enable --now rpcbind

3、nfs provisioner

### helm安装nfs provisioner,安装包在提供的资源里也有,可以不用再去外网下载
helm install nfs-subdir-external-provisioner ./nfs-subdir-external-provisioner-4.0.17.tgz \--namespace=nfs-provisioner \--create-namespace \--set image.repository=willdockerhub/nfs-subdir-external-provisioner \--set image.tag=v4.0.2 \--set replicaCount=2 \--set storageClass.name=nfs-client \--set storageClass.defaultClass=true \--set nfs.server=cluster-endpoint \--set nfs.path=/opt/nfsdata# 查看
kubectl get pods,deploy,sc -n nfs-provisioner

9)安装 Dashboard

1、安装

GitHub地址:https://github.com/kubernetes/dashboard

kubectl apply -f dashboard.yaml
# 查看
kubectl get pods,svc -n kubernetes-dashboard

在这里插入图片描述

2、创建登录用户

cat >ServiceAccount.yaml<<EOF
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
EOF
kubectl apply -f ServiceAccount.yaml

3、创建并获取登录token

kubectl -n kubernetes-dashboard create token admin-user

4、登录 web

登录地址:https://ip:31443/,如果提示如下,建议换成火狐浏览器试试。(如果有证书情况下是不会有种问题的。)
在这里插入图片描述
火狐浏览器访问web
在这里插入图片描述
在这里插入图片描述

10)安装镜像仓库 Harbor

1、创建证书

mkdir stl && cd stl
# 生成 CA 证书私钥
openssl genrsa -out ca.key 4096
# 生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650 \-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=harbor/OU=harbor/CN=myharbor.com" \-key ca.key \-out ca.crt
# 创建域名证书,生成私钥
openssl genrsa -out myharbor.com.key 4096
# 生成证书签名请求 CSR
openssl req -sha512 -new \-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=harbor/OU=harbor/CN=myharbor.com" \-key myharbor.com.key \-out myharbor.com.csr
# 生成 x509 v3 扩展
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names[alt_names]
DNS.1=myharbor.com
DNS.2=*.myharbor.com
DNS.3=hostname
EOF
#创建 Harbor 访问证书
openssl x509 -req -sha512 -days 3650 \-extfile v3.ext \-CA ca.crt -CAkey ca.key -CAcreateserial \-in myharbor.com.csr \-out myharbor.com.crt

2、创建证书秘钥

kubectl create secret tls myharbor.com --key myharbor.com.key --cert myharbor.com.crt -n harbor
kubectl get secret myharbor.com -n harbor

3、添加 Chart 库

helm repo add harbor https://helm.goharbor.io

4、开始部署 harbor

# 下载安装包
helm pull harbor/harbor
# harbor-1.11.1.tgz 安装包在提供的资源包里是有的,可以不用再去外网下载的。
helm install myharbor ./harbor-1.11.1.tgz \--namespace=harbor --create-namespace \--set expose.ingress.hosts.core=myharbor.com \--set expose.ingress.hosts.notary=notary.myharbor.com \--set-string expose.ingress.annotations.'nginx\.org/client-max-body-size'="1024m" \--set expose.tls.secretName=myharbor.com \--set persistence.persistentVolumeClaim.registry.storageClass=nfs-client \--set persistence.persistentVolumeClaim.jobservice.storageClass=nfs-client \--set persistence.persistentVolumeClaim.database.storageClass=nfs-client \--set persistence.persistentVolumeClaim.redis.storageClass=nfs-client \--set persistence.persistentVolumeClaim.trivy.storageClass=nfs-client \--set persistence.persistentVolumeClaim.chartmuseum.storageClass=nfs-client \--set persistence.enabled=true \--set externalURL=https://myharbor.com \--set harborAdminPassword=Harbor12345

5、查看

kubectl get pods,ingress -n harbor

在这里插入图片描述

5、web 访问

配置hosts(如果是真实的域名,就可以不用配置hosts了)

192.168.182.110 myharbor.com

访问地址:https://myharbor.com/

在这里插入图片描述
账号/密码:admin/Harbor12345(注意:这里的密码是上面安装时自定义的)
在这里插入图片描述
在这里插入图片描述


【云原生】k8s 离线部署详解过程就到这里,有不明白或者部署过程中有问题的小伙伴欢迎给我留言哦,后续会持续更新相关技术文章的,离线部署包资源关注我的公众号【大数据与云原生技术分享】回复【k8s】即可获取~

相关文章:

【云原生】k8s 离线部署讲解和实战操作

文章目录一、概述二、前期准备1&#xff09;节点信息2&#xff09;修改主机名和配置hosts3&#xff09;配置ssh互信4&#xff09;时间同步5&#xff09;关闭防火墙6&#xff09;关闭 swap7&#xff09;禁用SELinux8&#xff09;允许 iptables 检查桥接流量三、开始部署1&#x…...

【Kubernetes】第十一篇 - 滚动发布的介绍与实现

一&#xff0c;前言 上一篇&#xff0c;介绍了灰度发布和流量切分的集中方式&#xff0c;以及如何实现 k8s 的灰度发布&#xff1b; 本篇&#xff0c;介绍滚动发布的实现&#xff1b; 二&#xff0c;滚动发布简介 滚动发布 滚动发布&#xff0c;则是我们一般所说的无宕机发…...

【尊享版】如何系统构建你的思维认知模型?

超友们&#xff0c;早上好&#xff0c;国庆节快乐&#xff5e; 今天为你带来的分享是《如何系统构建你的思维认知模型&#xff1f;》&#xff0c;主要分为三个部分&#xff1a; 第一部分&#xff1a;【实现爆发式成长的 10 个思维模型】 第二部分&#xff1a;【6 个不可不知的…...

urho3D编码约定

缩进样式类似于Allman&#xff08;BSD&#xff09;&#xff0c;即在控制语句的下一行使用大括号&#xff0c;在同一级别缩进。在switch-case语句中&#xff0c;case与switch语句处于相同的缩进级别。 缩进使用4个空格而不是制表符。不应保留空行上的缩进。 类和结构名称以大写…...

Overleaf推广奖励:增加合作者的数量、解锁Dropbox同步和项目修改历史

Overleaf推广奖励 Overleaf是一个LaTeX\LaTeXLATE​X在线编译器&#xff0c;它可以让你与合作者共同在线编辑文档。但是默认的免费账号仅能邀请一个合作者。那么如何增加合作者的数量呢&#xff1f; Overleaf推出了一个奖励计划&#xff0c;你邀请其他人注册Overleaf&#xf…...

ChatGPT的互补工具Perplexity的详细使用方法(持续更新)

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

【Linux驱动开发100问】如何编译Linux内核?

&#x1f947;今日学习目标&#xff1a;如何编译Linux内核&#xff1f; &#x1f935;‍♂️ 创作者&#xff1a;JamesBin ⏰预计时间&#xff1a;10分钟 &#x1f389;个人主页&#xff1a;嵌入式悦翔园个人主页 &#x1f341;专栏介绍&#xff1a;Linux驱动开发100问 如何编译…...

15、条件概率、全概率公式、贝叶斯公式、马尔科夫链

条件概率定义&#xff1a;设A、B是两个事件&#xff0c;且&#xff0c;P(A) > 0 则称 为事件A发生的条件下事件B的条件概率对这个式子进行变形&#xff0c;即可得到概率的乘法公式&#xff1a;P(A) > 0 时&#xff0c;则P(B) > 0 时&#xff0c;则乍一看&#xff0c;…...

Eureka服务注册与发现

注册中心是分布式开发的核心组件之一&#xff0c;而Eureka是spring cloud推荐的注册中心实现。简单分析一下Eureka的原理。Eureka基础概念与流程1、服务注册在微服务架构中&#xff0c;一个服务提供者本质上也是一个Eureka客户端。启动时&#xff0c;会调用Eureka所提供的服务注…...

20230226 引用类型和指针类型的区别 - chatGPT

绝了&#xff0c;把chatGPT当百度之后真爽&#xff01; 引用类型和指针类型都是C语言中的重要概念&#xff0c;它们都提供了访问和操作内存的方法&#xff0c;但它们之间有几个关键的区别。 1. 定义和初始化方式不同 指针类型的变量定义和初始化的方式是通过使用*符号来声明…...

《操作系统》——第二章 进程与线程

目录 2.1.1进程的概念、组成、特征 2.1.2进程的状态与转换、进程的组织 2.1.3进程控制 2.1.4进程通信 2.1.5线程的概念 2.1.6线程的实现方式和多线程模型 2.2.1调度的概念、层次 2.2.2进程调度的时机、切换与过程、方式 2.2.4调度算法的评价指标 2.2.5调度算法(1) 2…...

网络原理之初识

目录 一. 网络互连 1. 局域网 2. 广域网 二. 网络通信基础 1. IP 地址 2. 端口号 3. 网络协议 4. 协议分层 5. TCP/IP 五层网络模型 &#xff08;简述&#xff09; 6. 网络数据传输的基本流程 一. 网络互连 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&am…...

CAN总线开发一本全(4) - FlexCAN的驱动程序

CAN总线开发一本全&#xff08;4&#xff09; - FlexCAN的驱动程序 苏勇&#xff0c;2023年2月 文章目录CAN总线开发一本全&#xff08;4&#xff09; - FlexCAN的驱动程序引言从MindSDK获取FlexCAN驱动程序数据结构配置通信引擎的结构体类型访问MB的结构体类型配置ID过滤器的…...

如何分析linux tcp/ip 丢包问题

引用手把手教你用Dropwatch诊断问题通过dropwatch定位系统内核丢包Finding out if/why a server is dropping packetsgithub source coed: pavel-odintsov/drop_watchHow to drop a packet in Linux in more ways than one试试Linux下的ip命令&#xff0c;ifconfig已经过时了Ho…...

旅游规划(树型dp)

W 市的交通规划出现了重大问题&#xff0c;市政府下定决心在全市各大交通路口安排疏导员来疏导密集的车流。 但由于人员不足&#xff0c;W 市市长决定只在最需要安排人员的路口安排人员。 具体来说&#xff0c;W 市的交通网络十分简单&#xff0c;由 n 个交叉路口和 n−1 条街道…...

【C++】string类的模拟实现

当你将放弃作为一种习惯&#xff0c;你一辈子也不会有出息… 文章目录一、Default member functions1.Constructor2.Copy constructor&#xff08;代码重构&#xff1a;传统写法和现代写法&#xff09;3.operator&#xff08;代码重构&#xff1a;传统写法和现代写法&#xff…...

笔记(一)——STL容器

容器分类&#xff1a;序列式容器&#xff1a;每个元素都有固定位置&#xff0c;取决于插入的时机和地点&#xff0c;和元素无关&#xff0c;如vector、deque、list、stack、queue。关联式容器&#xff1a;元素位置取决于特定的排序准则&#xff0c;和插入顺序无关&#xff0c;如…...

红黑树

红黑树是一个相对的平衡&#xff0c;减少了旋转的消耗 一个节点不是红的就是黑的根节点是黑的一个节点是红的&#xff0c;孩子是黑的&#xff08;没有连续的红色节点&#xff09;对于每个节点&#xff0c;从该节点到后代节点的简单路径&#xff0c;都包含相同的黑色&#xff0…...

RIP路由协议的更新(电子科技大学TCP/IP第二次实验)

一&#xff0e;实验目的 1、掌握 RIP 协议在路由更新时的发送信息和发送方式 2、掌握 RIP 协议的路由更新算法 二&#xff0e;预备知识 1、静态路由选择和动态路由选择 2、内部网关协议和外部网关协议 3、距离向量路由选择 三&#xff0e;实验原理 RIP 协议&#xff08…...

基于JWT实现用户身份认证

常见场景 账号/密码登录、手机号验证码登录、微信扫码登录 解决方案 基于Session认证方案 什么是session认证方案 服务端生成httpsession认证(内存-sessionId)sessionId写到浏览器cookie浏览器请求的header中自动带sessionId到服务端服务端校验sessionId是否合法 优点 .…...

SaltStack 远程命令执行漏洞(CVE-2020-16846)

目录 (一)漏洞描述 (二)漏洞复现 1、在vulhub上启动docker 2、访问docker靶机 https /ip:8000...

SAP 详细解析成本收集器

成本收集器作为成本对象&#xff0c;主要应用于按期间进行成本核算的情况&#xff0c;在这种情况下会把产品创建为成本收集器&#xff0c;实际成本的收集和差异的结算全部按照成本收集器进行处理&#xff0c;财务的成本分析也针对成本收集器进行。 成本收集器是按期间核算&am…...

Vision Transformer学习了什么-WHAT DO VISION TRANSFORMERS LEARN? A VISUAL EXPLORATION

WHAT DO VISION TRANSFORMERS LEARN? A VISUAL EXPLORATION 文章地址 代码地址 摘要 视觉转换器( Vision Transformers&#xff0c;ViTs )正在迅速成为计算机视觉的事实上的架构&#xff0c;但我们对它们为什么工作和学习什么知之甚少。虽然现有研究对卷积神经网络的机制进…...

一种全新的图像滤波理论的实验(三)

一、前言 2023年02月22日&#xff0c;我发布了滤波后&#xff0c;为针对异常的白色和黑色像素进行处理的实验&#xff0c;本次发布基于上下文处理的方案的实验&#xff0c;目的是通过基于加权概率模型滤波后&#xff0c;在逆滤波时直接修复大量的白色和黑色的异常像素&#xf…...

CV——day79 读论文:基于小目标检测的扩展特征金字塔网络

Extended Feature Pyramid Network for Small Object DetectionI. INTRODUCTIONII. RELATED WORKA. 深层物体探测器B. 跨尺度特征C. 目标检测中的超分辨率III. OUR APPROACHA. 扩展特征金字塔网络B. 特征纹理传输C. 交叉分辨蒸馏IV. EXPERIMENTSA. Experimental Settings1&…...

智能家居项目(五)测试串口功能

目录 一、写一个单独测试串口的demo 二、直接运行上一篇智能家居的代码 一、写一个单独测试串口的demo 1、TTL串口与树莓派的连接方式 &#xff08;1&#xff09;TTL的RXD和TXD针脚连接到树莓的TXD和RXD上&#xff08;T–>R R–>T&#xff09;&#xff0c;交叉连&…...

2023年全国最新道路运输从业人员精选真题及答案7

百分百题库提供道路运输安全员考试试题、道路运输从业人员考试预测题、道路安全员考试真题、道路运输从业人员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 71.根据《中华人民共和国安全生产法》&#xff0c;生产经营单位…...

python的所有知识点(含讲解),不看就亏死了

目录 简介 特点 搭建开发环境 版本 hello world 注释 文件类型 变量 常量 数据类型 运算符和表达式 控制语句 数组相关 函数相关 字符串相关 文件处理 对象和类&#xff0c;注&#xff1a;不是那个对象&#xff01;&#xff01;&#xff01;&#xff01;&…...

【Servlet篇】Response对象详细解读

文章目录Response 继承体系Response 设置响应数据设置响应行数据设置响应头数据设置响应体数据Response 重定向Response 响应字符数据Response 响应字节数据Response 继承体系 前面说到&#xff0c;我们使用 Request 对象来获取请求数据&#xff0c;使用 Response 对象来设置响…...

SAP FICO期初开账存货导入尾差

一、问题 1.AFS物料网格级别库存导入先除再乘有尾差&#xff1a; 旧系统数据迁移自两个系统&#xff1a;一个管理数量账&#xff08;网格级别&#xff09;&#xff0c;一个管理金额账&#xff08;物料级别&#xff09; 2.MB52分工厂与MB5L分工厂统计差异&#xff1a; M…...