【Kubernetes 企业项目实战】01、使用 kubeadm 安装 K8s-v1.23 高可用集群

news2025/1/23 10:39:34

目录

K8s-v1.23 安装环境规划

kubeadm 和二进制安装 k8s 适用场景分析

一、初始化安装 k8s 集群的环境

1.1 初步的环境初始化

1.2 配置主机之间无密码登录

1.3 关闭交换分区 swap 提升性能

1.4  修改机器内核参数

1.5 配置阿里云的 repo 源

1.6 配置安装 k8s 组件需要的阿里云的 repo 源

1.7 配置时间同步

1.8 开启 ipvs

1.9 安装基础软件包

二、安装 docker 服务

2.1 安装 docker-ce 

2.2 配置 docker 镜像加速器和驱动

三、安装初始化 k8s 需要的软件包

四、kubeadm 初始化 k8s 集群

五、扩容 k8s 集群

5.1 添加第一个工作节点

5.2 添加第二个工作节点

六、安装 kubernetes 网络组件 Calico

七、测试在 k8s 创建 pod 是否可以正常访问网络

八、测试 coredns 是否正常


此次安装 k8s-v1.23 所用到的资料下载地址:

链接:https://caiyun.139.com/m/i?0A5CuauVgY8XY
提取码:F86C

K8s-v1.23 安装环境规划

  • 虚拟机操作系统:CentOS 7.6
  • 最低配置: 2Gib 内存/ 2v CPU/ 30G 硬盘
  • 网络:NAT 模式
  • podSubnet( pod 网段):10.244.0.0/16
  • serviceSubnet(service 网段):10.10.0.0/16
K8s 集群角色IP主机名安装的组件
控制节点192.168.78.143k8s-master1apiserver、controller-manager、scheduler、etcd、kube-proxy、docker、calico
工作节点192.168.78.144k8s-node1kubelet、kube-proxy、docker、calico、coredns
工作节点192.168.78.145k8s-node2kubelet、kube-proxy、docker、calico、coredns

kubeadm 和二进制安装 k8s 适用场景分析

        kubeadm 是官方提供的开源工具,是一个开源项目,用于快速搭建 kubernetes 集群,目前是比较方便和推荐使用的。kubeadm init 以及 kubeadm join 这两个命令可以快速创建 kubernetes 集群。Kubeadm 初始化 k8s,所有的组件都是以 pod 形式运行的,具备故障自恢复能力。

        kubeadm 是工具,可以快速搭建集群,也就是相当于用程序脚本帮我们装好了集群,属于自动部署,简化部署操作,证书、组件资源清单文件都是自动创建的,自动部署屏蔽了很多细节,使得对各个模块感知很少,如果对 k8s 架构组件理解不深的话,遇到问题比较难排查。

kubeadm 适合需要经常部署 k8s,或者对自动化要求比较高的场景下使用。

二进制:在官网下载相关组件的二进制包,如果手动安装,对 kubernetes 理解也会更全面。

        Kubeadm 和二进制都适合生产环境,在生产环境运行都很稳定,具体如何选择,可以根据实际项目进行评估。

一、初始化安装 k8s 集群的环境

注意:没有特别说明指定虚拟机的,统一三台机器都要执行命令!

1.1 初步的环境初始化

给三台虚机进行初步的环境初始化,可以看我这篇文章:CentOS 7 初始化系统

1.2 配置主机之间无密码登录

#1. 配置 master1 到其他机器免密登录
# 生成秘钥文件
[root@k8s-master1 ~]# ssh-keygen                     # 输入三次回车即可(下面以此类推)

# 把本地生成的密钥文件和私钥文件拷贝到远程主机
[root@k8s-master1 ~]# ssh-copy-id k8s-master1        # 输入 yes 后再输入对应主机的密码(下面以此类推)
[root@k8s-master1 ~]# ssh-copy-id k8s-node1
[root@k8s-master1 ~]# ssh-copy-id k8s-node2

#2. 配置 node1 到其他机器免密登录
[root@k8s-node1 ~]# ssh-keygen 
[root@k8s-node1 ~]# ssh-copy-id k8s-master1
[root@k8s-node1 ~]# ssh-copy-id k8s-node1
[root@k8s-node1 ~]# ssh-copy-id k8s-node2

#3. 配置 node2 到其他机器免密登录
[root@k8s-node2 ~]# ssh-keygen 
[root@k8s-node2 ~]# ssh-copy-id k8s-master1
[root@k8s-node2 ~]# ssh-copy-id k8s-node1
[root@k8s-node2 ~]# ssh-copy-id k8s-node2

1.3 关闭交换分区 swap 提升性能

# 临时关闭
swapoff -a

# 永久关闭:注释 swap 挂载,给 swap 这行开头加一下 "#" 注释
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 查看效果
free -m

为什么要关闭 swap 交换分区?
        Swap 交换分区,如果机器内存不够,会使用 swap 分区,但是 swap 分区的性能较低,k8s 设计的时候为了能提升性能,默认是不允许使用交换分区的。Kubeadm 初始化的时候会检测 swap 是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装k8s 的时候可以指定 --ignore-preflight-errors=Swap 来解决。

1.4  修改机器内核参数

modprobe br_netfilter

echo "modprobe br_netfilter" >> /etc/profile

cat > /etc/sysctl.d/k8s.conf <<EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> EOF

sysctl -p /etc/sysctl.d/k8s.conf

问题 1 :sysctl 是做什么的?
        在运行时配置内核参数 -p 从指定的文件加载系统参数,如不指定即从 /etc/sysctl.conf 中加载。

问题 2 :为什么要执行 modprobe br_netfilter ?
修改 /etc/sysctl.d/k8s.conf 文件,增加如下三行参数:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

sysctl -p /etc/sysctl.d/k8s.conf 出现报错:
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory 

解决方法:
modprobe br_netfilter

问题 3 :为什么开启 net.bridge.bridge-nf-call-iptables 内核参数?
在 centos 下安装 docker,执行 docker info 出现如下警告:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
解决办法:
vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

问题 4 :为什么要开启 net.ipv4.ip_forward = 1 参数?
kubeadm 初始化 k8s 如果报错:

就表示没有开启 ip_forward,需要开启。

net.ipv4.ip_forward 是数据包转发:
        出于安全考虑,Linux 系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的 ip 地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
        要让 Linux 系统具有路由转发功能,需要配置一个 Linux 的内核参数net.ipv4.ip_forward。这个参数指定了 Linux 系统当前对路由转发功能的支持情况;其值为 0时表示禁止进行 IP 转发;如果是 1,则说明 IP 转发功能已经打开。

1.5 配置阿里云的 repo 源

配置国内安装 docker 和 containerd 的阿里云的 repo 源

yum install yum-utils -y

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.6 配置安装 k8s 组件需要的阿里云的 repo 源

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
EOF

1.7 配置时间同步

# 安装 ntpdate 命令
yum install ntpdate -y

# 跟网络时间做同步
ntpdate cn.pool.ntp.org

# 把时间同步做成计划任务
crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org

1.8 开启 ipvs

# 编写 ipvs 脚本
vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do
 /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
 if [ 0 -eq 0 ]; then
 /sbin/modprobe ${kernel_module}
 fi
done

# 执行脚本
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

问题 1 :ipvs 是什么?

        ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是我们常说的 4 层 LAN交换,作为 Linux 内核的一部分。ipvs 运行在主机上,在真实服务器集群前充当负载均衡器。ipvs 可以将基于 TCP 和 UDP 的服务请求转发到真实服务器上,并使真实服务器的服务在单个 IP 地址上显示为虚拟服务。

问题 2 :ipvs 和 iptable 对比分析

        kube-proxy 支持 iptables 和 ipvs 两种模式, 在 kubernetes v1.8 中引入了 ipvs 模式,在 v1.9 中处于 beta 阶段,在 v1.11 中已经正式可用了。iptables 模式在 v1.1 中就添加支持了,从 v1.2 版本开始 iptables 就是 kube-proxy 默认的操作模式,ipvs 和 iptables 都是基于netfilter 的,但是 ipvs 采用的是 hash 表,因此当 service 数量达到一定规模时,hash 查表的速度优势就会显现出来,从而提高 service 的服务性能。那么 ipvs 模式和 iptables 模式之间有哪些差异呢?

  • ipvs 为大型集群提供了更好的可扩展性和性能
  • ipvs 支持比 iptables 更复杂的复制均衡算法(最小负载、最少连接、加权等等)
  • ipvs 支持服务器健康检查和连接重试等功能

1.9 安装基础软件包

yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm

# 设置 k8s 命令自动补全
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

二、安装 docker 服务

docker 安装可以看我这篇文章更详细:【云原生 | Docker 基础篇】02、CentOS 7 安装 Docker 详细图文教程_Stars.Sky的博客-CSDN博客_centos7安装docker

2.1 安装 docker-ce 

yum install docker-ce -y

systemctl enable docker.service --now

2.2 配置 docker 镜像加速器和驱动

docker 镜像加速器可以看我这篇文章更详细:【云原生 | Docker 基础篇】03、Docker 阿里云镜像加速器_Stars.Sky的博客-CSDN博客_docker 镜像加速

# 修改 docker 文件驱动为 systemd,默认为 cgroupfs,kubelet 默认使用 systemd,两者必须一致才可
vim  /etc/docker/daemon.json
{
 "registry-mirrors":["https://hlfcd01t.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

systemctl daemon-reload  && systemctl restart docker

三、安装初始化 k8s 需要的软件包

yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1

systemctl enable kubelet.service

注:每个软件包的作用

  • Kubeadm:  kubeadm 是一个工具,用来初始化 k8s 集群的;
  • kubelet:   安装在集群所有节点上,用于启动 Pod 的;
  • kubectl:   通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。

四、kubeadm 初始化 k8s 集群

把初始化 k8s 集群需要的离线镜像包 k8s-images-v1.23.1.tar.gz 上传到三台机器上,手动解压:

docker load -i k8s-images-v1.23.1.tar.gz

# 在 master 节点使用 kubeadm 初始化 k8s 集群
[root@k8s-master1 ~]# kubeadm init --kubernetes-version=1.23.1  --apiserver-advertise-address=192.168.78.143  --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification

# 注:--image-repository registry.aliyuncs.com/google_containers:手动指定仓库地址为registry.aliyuncs.com/google_containers。kubeadm 默认从 k8s.grc.io 拉取镜像,但是 k8s.gcr.io访问不到,所以需要指定从 registry.aliyuncs.com/google_containers 仓库拉取镜像。
--apiserver-advertise-address=192.168.78.143 为 master 节点主机 ip

显示如下,说明安装完成:

# 下面命令是把 node 节点加入集群,需要保存下来,每个人的都不一样
kubeadm join 192.168.78.143:6443 --token 3nm4yz.5towz6cx6ybx6ebm \
	--discovery-token-ca-cert-hash sha256:a3a937a1a8971a2a2b7fc73cef528bd0adaf36aa00be7ec88569394838600a17

# 配置 kubectl 的配置文件 config,相当于对 kubectl 进行授权,这样 kubectl 命令可以使用这个证书对k8s 集群进行管理
[root@k8s-master1 ~]# mkdir -p $HOME/.kube
[root@k8s-master1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 查看集群状态
[root@k8s-master1 ~]# kubectl get nodes
NAME          STATUS     ROLES                  AGE     VERSION
k8s-master1   NotReady   control-plane,master   4m23s   v1.23.1
# 此时集群状态还是 NotReady 状态,因为没有安装网络插件。

五、扩容 k8s 集群

5.1 添加第一个工作节点

# 在 master1 上查看加入节点的命令
[root@k8s-master1 ~]# kubeadm token create --print-join-command
kubeadm join 192.168.78.143:6443 --token 5zacv3.o4qmxknq2yx57pez --discovery-token-ca-cert-hash sha256:a3a937a1a8971a2a2b7fc73cef528bd0adaf36aa00be7ec88569394838600a17

# 把 node1 加入 k8s 集群
[root@k8s-node1 ~]# kubeadm join 192.168.78.143:6443 --token 5zacv3.o4qmxknq2yx57pez --discovery-token-ca-cert-hash sha256:a3a937a1a8971a2a2b7fc73cef528bd0adaf36aa00be7ec88569394838600a17

# 在 master1 上查看集群节点状况
[root@k8s-master1 ~]# kubectl get nodes
NAME          STATUS     ROLES                  AGE     VERSION
k8s-master1   NotReady   control-plane,master   9m36s   v1.23.1
k8s-node1     NotReady   <none>                 79s     v1.23.1

5.2 添加第二个工作节点

# 在 master1 上查看加入节点的命令。每添加一个工作节点都要执行一次此命令
[root@k8s-master1 ~]# kubeadm token create --print-join-command
kubeadm join 192.168.78.143:6443 --token rmoezg.0d5olntu2ynlyu74 --discovery-token-ca-cert-hash sha256:a3a937a1a8971a2a2b7fc73cef528bd0adaf36aa00be7ec88569394838600a17

# 把 node2 加入 k8s 集群
[root@k8s-node2 ~]# kubeadm join 192.168.78.143:6443 --token rmoezg.0d5olntu2ynlyu74 --discovery-token-ca-cert-hash sha256:a3a937a1a8971a2a2b7fc73cef528bd0adaf36aa00be7ec88569394838600a17

# 在 master1 上查看集群节点状况
[root@k8s-master1 ~]# kubectl get nodes
NAME          STATUS     ROLES                  AGE     VERSION
k8s-master1   NotReady   control-plane,master   11m     v1.23.1
k8s-node1     NotReady   <none>                 3m27s   v1.23.1
k8s-node2     NotReady   <none>                 52s     v1.23.1

        可以看到 node1、 node2 的 ROLES 角色为空,<none> 就表示这个节点是工作节点。可以把 node1 和 node2 的 ROLES 变成 work,按照如下方法给节点打上标签:

[root@k8s-master1 ~]# kubectl label nodes k8s-node1 node-role.kubernetes.io/worker=worker

[root@k8s-master1 ~]# kubectl label nodes k8s-node2 node-role.kubernetes.io/worker=worker

[root@k8s-master1 ~]# kubectl get nodes
NAME          STATUS     ROLES                  AGE     VERSION
k8s-master1   NotReady   control-plane,master   14m     v1.23.1
k8s-node1     NotReady   worker                 5m49s   v1.23.1
k8s-node2     NotReady   worker                 3m14s   v1.23.1

六、安装 kubernetes 网络组件 Calico

  • calicao 官网:About Calico
  • 查看支持的 k8s 版本:System requirements

上传 calico.yaml 到 master1 上,使用 yaml 文件安装 calico 网络插件:

[root@k8s-master1 ~]# kubectl apply -f calico.yaml

# 查看 pod 状态
[root@k8s-master1 ~]# kubectl get pods -n kube-system 
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-677cd97c8d-6rwbh   1/1     Running   0          3m21s
calico-node-4j6wl                          1/1     Running   0          3m21s
calico-node-655v6                          1/1     Running   0          3m21s
calico-node-8zsrg                          1/1     Running   0          3m21s
coredns-6d8c4cb4d-jrhss                    1/1     Running   0          20m
coredns-6d8c4cb4d-mln79                    1/1     Running   0          20m
etcd-k8s-master1                           1/1     Running   0          20m
kube-apiserver-k8s-master1                 1/1     Running   0          20m
kube-controller-manager-k8s-master1        1/1     Running   0          20m
kube-proxy-4x6nq                           1/1     Running   0          20m
kube-proxy-cg5rt                           1/1     Running   0          9m38s
kube-proxy-pl6hz                           1/1     Running   0          12m
kube-scheduler-k8s-master1                 1/1     Running   0          20m

# 查看集群状态
[root@k8s-master1 ~]# kubectl get nodes
NAME          STATUS   ROLES                  AGE    VERSION
k8s-master1   Ready    control-plane,master   20m    v1.23.1
k8s-node1     Ready    worker                 11m    v1.23.1
k8s-node2     Ready    worker                 9m9s   v1.23.1

七、测试在 k8s 创建 pod 是否可以正常访问网络

把 busybox-1-28.tar.gz 上传到 node1、node2 节点,手动解压:

[root@k8s-node1 ~]# docker load -i busybox-1-28.tar.gz
[root@k8s-node2 ~]# docker load -i busybox-1-28.tar.gz

[root@k8s-master1 ~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
If you don't see a command prompt, try pressing enter.
/ # ping www.baidu.com
PING www.baidu.com (180.97.34.94): 56 data bytes
64 bytes from 180.97.34.94: seq=0 ttl=127 time=19.765 ms
64 bytes from 180.97.34.94: seq=1 ttl=127 time=18.713 ms
64 bytes from 180.97.34.94: seq=2 ttl=127 time=18.166 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 18.166/18.881/19.765 ms

通过上面可以看到能访问网络,说明 calico 网络插件已经被正常安装了。

八、测试 coredns 是否正常

[root@k8s-master1 ~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
If you don't see a command prompt, try pressing enter.
/ # nslookup kubernetes.default.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local

        10.96.0.10 就是我们 coreDNS 的 clusterIP,说明 coreDNS 配置好了。解析内部 Service 的名称,是通过 coreDNS 去解析的。

注意:busybox 要用指定的 1.28 版本,不能用最新版本,最新版本,nslookup 会解析不到 dns 和ip。

至此,k8s-v1.23 安装完成!!!

上一篇文章:【云原生 | Kubernetes 实战】01、K8s-v1.25集群搭建和部署基于网页的 K8s 用户界面 Dashboard_Stars.Sky的博客-CSDN博客_k8s1.25安装dashboard

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

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

相关文章

python调试器 ipdb

文章目录1. 介绍1.1 常用调试方式1.2 安装 ipdb2. 用法3. 命令3.1、查看源代码3.2、添加断点3.3 添加临时断点3.4 清除断点3.5、打印变量值3.6、逐行调试命令3.7、非逐行调试命令3.8 跳出函数&#xff0c;跳入函数3.9、查看当前函数所有参数3.10 打印变量的值3.11、打印变量类型…

11. 盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。 示例…

【openGauss】在openEuler(ARM架构)上安装openGauss(单机版)

一、系统版本介绍 当前案例中的openGauss安装&#xff0c;底层操作系统为openEuler-20.03-LTS版本&#xff0c;当前openGauss对Python版本兼容性最好的是Python 3.6版本与Python 3.7版本&#xff0c;该实验使用的openEuler版本自带Python 3.7.4&#xff0c;不需要再自行安装 二…

光电探测器怎么选

想要挑选光电探测器&#xff0c;首先应该理解探测器的重要的几个指标。 实际看一个光电探测器吧 输入输出接口三个部分&#xff0c;光纤输入&#xff0c;射频输出&#xff0c;电源供电 数据手册 捡几个难理解的说说&#xff0c;详细推导解释这里不赘述了&#xff0c;难理解的…

【二】Netty 搭建简单的http服务

Netty 搭建简单的http服务Netty 简介代码展示netty 依赖NettyServer netty 服务端启动类MyChannelInitializer 设置编码解码器&#xff0c;并添加自己的业务方法MyClientHandler 实现自己的业务方法。主要方法 是读取到数据后处理效果展示服务端打印截图采用Postman 测试 截图N…

JDBC 实现增删改查的实际操作,很简单

大家好&#xff0c;今天给大家分享一下JDBC 实现增删改查的实际操作 我们还是使用的Maven的方式&#xff0c; 首先要创建一个干净的Maven webapps项目 看这个就可以了 要导入相关的依赖 <dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connec…

如何使用 HTML5 Web 连接到 VMware vSphere Hypervisor

本文将向你展示如何在计算机上连接 VMware vSphere Hypervisor 7.0.3,VMware vSphere Hypervisor 7.0.3 也称为 ESXi 7.0.3。 连接 ESXi 7.0.3 下载工具以管理 ESXi 主机服务器连接 ESXi 7.0.3 服务器下载工具以管理 ESXi 主机服务器 现在不需要任何工具来管理 ESXi 7.0.3,从…

1.8周报

SourceURL:file:///home/mrl/文档/1.8周报.docx 周报 代码行数&#xff1a; 周一 611 周二 672 周三 524 周四 528 周五 450 周六 545 周日 564 遇到的问题&#xff1a; 系统配置问题&#xff1a; 在升级安装python3时&#xff0c;由于操作失误&#xff0c;导…

数据脱敏实战经验

1. 创建隐私数据类型枚举&#xff1a;PrivacyTypeEnum2. 创建自定义隐私注解&#xff1a;PrivacyEncrypt3. 创建自定义序列化器&#xff1a;PrivacySerializer4. 隐私数据隐藏工具类&#xff1a;PrivacyUtil5. 注解使用这两天在整改等保测出的问题&#xff0c;里面有一个“用户…

如何将.md文件转换为pdf

目录 1.step1&#xff1a; 安装Visual Studio Code&#xff08;简称VScode&#xff09; 2.step2&#xff1a; 安装定制化插件 3.step3&#xff1a; 进入预览窗口模式 4.step4&#xff1a; 进行格式转换 1.step1&#xff1a; 安装Visual Studio Code&#xff08;简称VScode&a…

【实战篇】39 # 如何实现世界地图的新冠肺炎疫情可视化?

说明 【跟月影学可视化】学习笔记。 世界地图新冠肺炎疫情可视化 下面将实现世界地图新冠肺炎疫情可视化。数据用的是从 2020 年 1 月 22 日到 3 月 19 日这些天的新冠肺炎疫情进展。效果类似下图&#xff1a;https://covid19.who.int/ 步骤一&#xff1a;准备世界地图可视化…

[ 数据结构 ] 迪杰斯特拉算法(最短路径问题)

0 最短路径问题 战争时期&#xff0c;胜利乡有 7 个村庄(A, B, C, D, E, F, G) &#xff0c;现在有六个邮差&#xff0c;从 G 点出发&#xff0c;需要分别把邮件分别送到 A, B, C , D, E, F 六个村庄各个村庄的距离用边线表示(权) &#xff0c;比如 A – B 距离 5 公里问&#…

不透明度和填充的区别

提纲 1、不透明度和填充的相同之处 2、不透明度和填充的不同之处 3、从字面意思理解不透明度和填充 1、不透明度和填充的相同之处 在初学PS时&#xff0c;一定对“不透明度”和“填充”非常迷惑&#xff0c;它们在图层面板的这个位置 这篇就来详细聊聊这两个滑块&#xff0…

SSR是什么?Vue中怎么实现?

一、是什么 Server-Side Rendering 称其为SSR&#xff0c;意为服务端渲染 指由服务侧完成页面的 HTML 结构拼接的页面处理技术&#xff0c;发送到浏览器&#xff0c;然后为其绑定状态与事件&#xff0c;成为完全可交互页面的过程 先来看看Web3个阶段的发展史&#xff1a; 传…

Dart基础

一、dart概述 Dart简介 Dart 是谷歌开发的&#xff0c;类型安全的&#xff0c;面向对象的编程语言&#xff0c;被应用于Web、服务器、移动应用和物联网等领域。Dart 诞生于 2011 年 10 月 10 日Dart简单易学(类似TypeScript, 是强类型的语言)运行方式 原生虚拟机(Dart 代码可…

从执行者到管理者的角色转变

前言 在职场中因为岗位职责的差异&#xff0c;我们通过被分为两种角色&#xff0c;即执行者和管理者&#xff1b;大部分管理者也是从执行者晋升来的。 因为思维的惯性&#xff0c;导致我们会很容易带着执行者的意识去做管理&#xff0c;遇到问题就会想着自己动手去做&#xff0…

智慧防雷+智能防雷的综合应用方案

随着物联网时代的到来&#xff0c;信息共享成为社会运转的动力&#xff0c;伴随着现代建筑、交通、医疗以及工业制造等行业的智能化&#xff0c;大量微电子网络、自动化设备、计算机等投入使用&#xff0c;其集成度高、工作电压小、工作电流低、绝缘强度低、耐过电压和过电流能…

HDMI接口电路设计

HDMI是一个能传输高清视频和多声道音频的接口&#xff0c;常用的有TYPE A&#xff0c;TYPEC&#xff0c;和TYPE D的HDMI&#xff0c;最常用的是这种TYPE A的HDMI接口&#xff0c;这个是母座HDMI TYPE A插座的引脚信号定义大家可以看下&#xff0c;总共包含19个引脚。其中TMDS d…

Hudi的核心概念 —— 索引(Index)

文章目录原理索引选项全局索引与非全局索引索引的选择策略原理 Hudi 通过索引机制提供高效的 upserts&#xff0c;具体是将给定的 hoodie key(record key&#xff08;记录键&#xff09; partition path)与文件 id&#xff08;文件组&#xff09;建立唯一映射。这种映射关系&…

Axure原型模板大全(100多款超高清高保真原型),APP+WEB精美版,绝对大神出品

LIB012 - Axure交互设计常用素材组件包(界面模型、流程图素材)LIB001 - Axure交互原型Web元件库完整版LIB001v2 - Axure WEB前后端交互原型通用元件库 v2LIB003 - Axure交互原型移动端元件库完整版LIB005 - Axure手机移动端交互原型通用元件库 v2LIB006 - Axure IPAD移动端交互…