2024年k8s最新版本安装教程

news2025/6/19 2:09:08

k8s安装教程

    • 1 k8s介绍
    • 2 环境搭建
      • 2.1 主机准备
      • 2.2 主机初始化
        • 2.2.1 安装wget
        • 2.2.2 更换yum源
        • 2.2.3 常用软件安装
        • 2.2.4 关闭防火墙
        • 2.2.5 关闭selinux
        • 2.2.6 关闭 swap
        • 2.2.7 同步时间
        • 2.2.8 修改Linux内核参数
        • 2.2.9 配置ipvs功能
      • 2.3 容器安装
        • 2.3.1 设置软件yum源
        • 2.3.2 安装docker软件
        • 2.3.3 配置加速器
      • 2.4 cri环境搭建
        • 2.4.1 软件下载
        • 2.4.2 安装配置
      • 2.5 k8s环境安装
        • 2.5.1 指定k8s源
        • 2.5.2 安装kubeadm kubelet kubectl
        • 2.5.3 在master节点检查镜像文件列表
        • 2.5.4 在master节点上获取镜像文件
        • 2.5.5 在master节点初始化
        • 2.5.6 在node节点加入master节点
        • 2.5.7 网络插件安装

1 k8s介绍

kubernetes,k和s直接是8个字母,简称k8s。是采用Go语言开发的。于2014年9月发布第一个版本,2015年7月发布第一个正式版本。

官网:https://kubernetes.io

代码仓库:https://github.com/kubernetes/kubernetes

在这里插入图片描述

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
  • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
  • 存储编排:可以根据容器自身的需求自动创建存储卷

在这里插入图片描述

2 环境搭建

这里配一个一主两从的示意图

2.1 主机准备

序号主机IP配置备注
1192.168.123.92CPU:4核,内存:4G,硬盘:40GBk8s-master
2192.168.123.93CPU:2核,内存:4G,硬盘:40GBk8s-node1
3192.168.123.94CPU:2核,内存:4G,硬盘:40GBk8s-node2
# 序号1主机终端操作,操作完毕断开重连
hostnamectl set-hostname k8s-master

# 序号2主机终端操作,操作完毕断开重连
hostnamectl set-hostname k8s-node1

# 序号3主机终端操作,操作完毕断开重连
hostnamectl set-hostname k8s-node2

# 三台主机都需要操作:hosts解析
# vim /etc/hosts

192.168.123.92 k8s-master
192.168.123.93 k8s-node1
192.168.123.94 k8s-node2

2.2 主机初始化

2.2.1 安装wget
yum -y install wget
2.2.2 更换yum源

这里是CentOS7操作系统,更换成阿里yum源

# 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

# 下载镜像源
wget -c http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo

# 重新生成缓存
yum clean all && yum makecache
2.2.3 常用软件安装
yum -y install vim lrzsz tree
2.2.4 关闭防火墙
systemctl stop firewalld

systemctl disable firewalld
2.2.5 关闭selinux
# 临时生效
setenforce 0
# 永久生效
# vim /etc/selinux/config
# 将SELINUX=的值改成disabled,即:SELINUX=disabled
2.2.6 关闭 swap
# 临时关闭
swapoff -a
# 永久生效
# vim /etc/fstab
# 将 [/dev/mapper/centos-swap swap                    swap    defaults        0 0] 这一行注释掉
2.2.7 同步时间
# 安装
yum -y install chrony

# vim /etc/chrony.conf 注释下面内容
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

# 新增阿里时间服务器
server ntp.aliyun.com iburst

# 保存退出后,设置开机自启,重新加载配置,重启服务
systemctl enable chronyd
systemctl daemon-reload
systemctl restart chronyd

# 验证是否设置成功
# 方式一
chronyc sources
# 方式二
date
2.2.8 修改Linux内核参数
cat >> /etc/sysctl.d/k8s.conf << EOF
# 内核参数调整
vm.swappiness=0
# 配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
 
# 配置生效,加载网桥过滤模块
modprobe br_netfilter
modprobe overlay
 
# 重新加载
sysctl -p /etc/sysctl.d/k8s.conf
# 终端输出如下
# vm.swappiness = 0
# net.bridge.bridge-nf-call-ip6tables = 1
# net.bridge.bridge-nf-call-iptables = 1
# net.ipv4.ip_forward = 1
2.2.9 配置ipvs功能
# 安装ipset和ipvsadm
yum install ipset ipvsadm -y
 
# 添加需要加载的模块写入脚本文件
cat >> /etc/sysconfig/modules/ipvs.modules << EOF 
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
 
# 为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
 
# 执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules
 
# 查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
# 终端输出如下
# ip_vs_sh               12688  0 
# ip_vs_wrr              12697  0 
# ip_vs_rr               12600  0 
# ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
# nf_conntrack          139264  1 ip_vs
# libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

2.3 容器安装

2.3.1 设置软件yum源
# yum-config-manager命令能用,需要安装的依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 新增docker阿里镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3.2 安装docker软件
# 这里不指定版本,安装的是最新版docker
yum install -y docker-ce
2.3.3 配置加速器
cat >> /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
    "https://afnsj47q.mirror.aliyuncs.com"
 ], 
 # 私有仓配置
 # "insecure-registries": ["域名或ip"],
 "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

[root@k8s-master ~]# cat /etc/docker/daemon.json 
{
"registry-mirrors": [
	# 个人阿里云加速器配置
    "https://afnsj47q.mirror.aliyuncs.com"
 ], 
 # 私有仓配置
 # "insecure-registries": ["域名或ip"],
 "exec-opts": ["native.cgroupdriver=systemd"]
}
# 重启加载配置,设置开机自启并开启docker服务
systemctl daemon-reload
systemctl enable docker
systemctl start docker

2.4 cri环境搭建

2.4.1 软件下载

软件地址:https://github.com/Mirantis/cri-dockerd/releases

# 这里下载的是cri最新版本
wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8.amd64.tgz
2.4.2 安装配置
# 解压下载文件
tar -xvf cri-dockerd-0.3.8.amd64.tgz -C /usr/local
mv /usr/local/cri-dockerd/cri-dockerd /usr/local/bin
cri-dockerd --version
# cri-dockerd交给systemd管理的配置文件
cat > /etc/systemd/system/cri-dockerd.service<<-EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
 
[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --docker-endpoint=unix:///var/run/docker.sock --
cri-dockerd-root-directory=/var/lib/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
 
cat > /etc/systemd/system/cri-dockerd.socket <<-EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
# 加载配置,设置开启自启并启动服务
systemctl daemon-reload
systemctl enable cri-dockerd
systemctl start cri-dockerd

2.5 k8s环境安装

2.5.1 指定k8s源

这里使用阿里的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
2.5.2 安装kubeadm kubelet kubectl
# 安装kubeadm kubelet kubectl
yum -y install kubeadm kubelet kubectl

# 设置kubelet开机自启和启动
systemctl enable kubelet && systemctl restart kubelet
2.5.3 在master节点检查镜像文件列表
[root@k8s-master ~]# kubeadm config images list
I1220 18:09:30.152344   26378 version.go:256] remote version is much newer: v1.29.0; falling back to: stable-1.28
registry.k8s.io/kube-apiserver:v1.28.4
registry.k8s.io/kube-controller-manager:v1.28.4
registry.k8s.io/kube-scheduler:v1.28.4
registry.k8s.io/kube-proxy:v1.28.4
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.9-0
registry.k8s.io/coredns/coredns:v1.10.1
2.5.4 在master节点上获取镜像文件
# cat images.sh 
#!/usr/bin/env bash
images=$(kubeadm config images list --kubernetes-version=1.28.4 | awk -F'/' '{print $NF}')
for i in ${images}
do
  docker pull registry.aliyuncs.com/google_containers/$i
  docker tag registry.aliyuncs.com/google_containers/$i registry.k8s.io/$i
  docker rmi registry.aliyuncs.com/google_containers/$i
done

下载后一个不满足,需要再手动修改下

docker tag registry.k8s.io/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1
docker rmi registry.k8s.io/coredns:v1.10.1

# kubeadm config images list 和 docker images保持一致了
[root@centos ~]# kubeadm config images list
I1215 08:55:02.856427   14692 version.go:256] remote version is much newer: v1.29.0; falling back to: stable-1.28
registry.k8s.io/kube-apiserver:v1.28.4
registry.k8s.io/kube-controller-manager:v1.28.4
registry.k8s.io/kube-scheduler:v1.28.4
registry.k8s.io/kube-proxy:v1.28.4
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.9-0
registry.k8s.io/coredns/coredns:v1.10.1
[root@centos ~]# docker images
REPOSITORY                                TAG       IMAGE ID       CREATED         SIZE
registry.k8s.io/kube-apiserver            v1.28.4   7fe0e6f37db3   4 weeks ago     126MB
registry.k8s.io/kube-controller-manager   v1.28.4   d058aa5ab969   4 weeks ago     122MB
registry.k8s.io/kube-scheduler            v1.28.4   e3db313c6dbc   4 weeks ago     60.1MB
registry.k8s.io/kube-proxy                v1.28.4   83f6cc407eed   4 weeks ago     73.2MB
registry.k8s.io/etcd                      3.5.9-0   73deb9a3f702   7 months ago    294MB
registry.k8s.io/coredns/coredns           v1.10.1   ead0a4a53df8   10 months ago   53.6MB
registry.k8s.io/pause                     3.9       e6f181688397   14 months ago   744kB
2.5.5 在master节点初始化
# 直接初始化
kubeadm init --kubernetes-version=1.28.4 \
--node-name=k8s-master \
--apiserver-advertise-address=192.168.123.92 \
--image-repository registry.k8s.io \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock
# 重置并初始化
kubeadm reset -f --cri-socket=unix:///var/run/cri-dockerd.sock && kubeadm init --kubernetes-version=1.28.4 \
--node-name=k8s-master \
--apiserver-advertise-address=192.168.123.92 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock

master节点初始化成功,终端显示

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.123.92:6443 --token jy6fvz.3zf24v9sb5f4dto2 \
	--discovery-token-ca-cert-hash sha256:d0d61ece9c05b8ffcc4b246dfedf139dab7a701618e11621934575844216aee4

跟进终端提示,主节点操作

mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && chown $(id -u):$(id -g) $HOME/.kube/config
2.5.6 在node节点加入master节点

node节点加入主节点,在其node节点运行

# 直接加入
kubeadm join 192.168.123.92:6443 --token jy6fvz.3zf24v9sb5f4dto2 \
	--discovery-token-ca-cert-hash sha256:d0d61ece9c05b8ffcc4b246dfedf139dab7a701618e11621934575844216aee4 \
	--cri-socket=unix:///var/run/cri-dockerd.sock
# 重置并加入
kubeadm reset -f --cri-socket=unix:///var/run/cri-dockerd.sock && kubeadm join 192.168.123.92:6443 --token jy6fvz.3zf24v9sb5f4dto2 \
	--discovery-token-ca-cert-hash sha256:d0d61ece9c05b8ffcc4b246dfedf139dab7a701618e11621934575844216aee4 \
	--cri-socket=unix:///var/run/cri-dockerd.sock

重新生成加入节点token

kubeadm token create --print-join-command

设置kubectl命令可以在node节点操作

scp -r $HOME/.kube 192.168.123.93:$HOME/

至此kubeadm命令工作完成,kubectl命令开始工作

2.5.7 网络插件安装

只在master节点操作即可

安装网络插件kube-flannel

# 打开https://site.ip138.com/网站查询raw.githubusercontent.com网址的域名解析,然后配置到/etc/hosts
# 521github.com

# 用wget命令下载kube-flannel.yml文件
wget --no-check-certificat https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 主节点执行
kubectl apply -f kube-flannel.yml

安装网络插件calico

官方网址:https://docs.tigera.io/

# 打开https://site.ip138.com/网站查询raw.githubusercontent.com网址的域名解析,然后配置到/etc/hosts
# 下载calico.yaml
# https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises
wget --no-check-certificat https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml

# 官方提供的yaml文件中,ip识别策略(IPDETECTMETHOD)没有配置,即默认为first-found,这会导致一个网络异常的ip作为nodeIP被注册,从而影响node-to-nodemesh。

# 解决方法
vim calico.yaml

:/CLUSTER_TYPE

# 在下添加:

- name: IP_AUTODETECTION_METHOD
  value: "interface=ens192"   # 192为Linux执行ip a或ifconfig的名称
  
# 验证
kubectl get po -n kube-system

至此,k8s最新版集群环境搭建完毕

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

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

相关文章

C# OpenVINO Yolov8-OBB 旋转目标检测

目录 效果 模型 项目 代码 下载 C# OpenVINO Yolov8-OBB 旋转目标检测 效果 模型 Model Properties ------------------------- date&#xff1a;2024-02-26T08:38:44.171849 description&#xff1a;Ultralytics YOLOv8s-obb model trained on runs/DOTAv1.0-ms.yaml …

论文的引用书写方法

前置操作 1、全选文献 2、在开始选项卡 段落功能区 选择编号功能 3、设置编号格式 [1] 论文的引用 1、光标放在需要引用论文的地方 2、选择引用选项卡 点击交叉引用 3、引用类型为编号项 引用内容为段落编号 选择需要的第几条参考文献

Linux第74步_“设备树”下的LED驱动

使用新字符设备驱动的一般模板&#xff0c;以及设备树&#xff0c;驱动LED。 1、添加“stm32mp1_led”节点 打开虚拟机上“VSCode”&#xff0c;点击“文件”&#xff0c;点击“打开文件夹”&#xff0c;点击“zgq”&#xff0c;点击“linux”&#xff0c;点击“atk-mp1”&am…

数据库的筛选条件

【一】筛选过滤条件 【1】完整的查询语句 -- 查询当前表中的全部数据select * from 表名 where 筛选条件;​-- 查询当前表中的指定字段的数据select 字段名,字段名 from 表名 where 筛选条件;# 执行顺序from where select ​select 你选择的列1, 你选择的列2, ... from 查询的…

UVA191 Intersection 题解

UVA191 Intersection 题解 水紫&#xff0c;建议降蓝。 解法 求线段相交裸题&#xff0c;考虑使用向量解决。 我们把矩形的 4 4 4 个点两两相连&#xff0c;得到 6 6 6 条线段&#xff0c;如果先输入的线段和这 6 6 6 条线段都没有交点&#xff0c;则认为线段和矩形不相…

高度塌陷问题及解决

什么情况下产生 (when 父盒子没有定义高度&#xff0c;但是子元素有高度&#xff0c;希望用子盒子撑起父盒子的高度&#xff0c;但是子盒子添加了浮动属性之后&#xff0c;父盒子高度为0 <template><div class"father"><div class"son"&…

基于命名实体链接的事件抽取与知识图谱在电商领域的应用

开源项目推荐 多模态AI能力引擎平台: 免费的自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别、语音识别接口&#xff0c;功能强大&#xff0c;欢迎体验。 多模态AI能力引擎平台: 免费的自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别、语音识别接口…

代码还原之 函数

指令堆里逆向出来的代码有歧义&#xff0c;有三处返回&#xff0c;有嵌套IF语句&#xff0c;故推断出是个函数&#xff1b; #if 0/*27ec: 48 8d 3d 58 39 00 00 lea 0x3958(%rip),%rdi # 614b <_IO_stdin_usedBase0x14b> // rdi"COLUMNS"27f3: e8 e…

Express学习(三)

Express中间件 中间件的概念 什么是中间件 中间件&#xff0c;特指业务流程的中间处理环节。Express中间件的调用流程 当一个请求到达Express的服务器之后&#xff0c;可以连续调用多个中间件&#xff0c;从而对这次请求进行预处理。类似于下图所示 Express中间件的格式 Expr…

安卓SDK dx工具生成dex文件命令

目录 前言一、添加到环境变量二、命令示例 前言 在Android SDK 工具中&#xff0c;dx命令用于将Java字节码文件转换为Dalvik Executable&#xff08;dex&#xff09;文件&#xff0c;以便在Android设备上运行。 一、添加到环境变量 找到想要使用的SDK版本&#xff0c;将dx.b…

C++11 新特性 增加数据类型

一.C11 新增加数据类型介绍 在C11中&#xff0c;新增了long long、unsigned long long、char16_t和char32_t等数据类型&#xff0c;它们可以支持更宽的整型和字符表示。 long long&#xff1a;long long是一种整数类型&#xff0c;它至少可以存储64位&#xff08;8字节&#x…

Offer必备算法12_链表_五道力扣题详解(由易到难)

目录 ①力扣2. 两数相加 解析代码 ②力扣24. 两两交换链表中的节点 解析代码 ③力扣143. 重排链表 解析代码 ④力扣23. 合并 K 个升序链表 解析代码1&#xff08;小根堆优化&#xff09; 解析代码2&#xff08;递归_归并&#xff09; ⑤力扣25. K 个一组翻转链表 解…

【从部署服务器到安装autodock vina】

注意&#xff1a;服务器 linux系统选用ubuntu 登录系统&#xff0c;如果没有图形化见面可以先安装图形化界面 可以参考该视频 --> linux安装图形化界面 非阿里云ubuntu 依次执行以下命令 sudo apt-get update sudo apt-get install gnome sudo reboot阿里云ubuntu 需多执…

Glip模型

Yolos 完全使用Transformer做目标检测 Detr 先使用CNN提取特征然后再使用transformerDetr和Yolos共同的缺点:需要事先知道所有的类别 Glip Zero-shot, 目标检测的类别可以不在训练类别中目标框进行视觉编码,然后和文本进行匹配文本和视觉特征是通过Clip模型提取的,所以视觉向…

从功能测试进阶自动化测试全套进阶指南,亲身经验分享

因为我最近在分享自动化测试技术&#xff0c;经常被问到&#xff1a; 功能测试想转自动化&#xff0c;请问应该怎么入手&#xff1f;有没有好的资源推荐&#xff1f; 那么&#xff0c;接下来我就结合自己的经历聊一聊我是如何在工作中做自动化测试的。&#xff08;学习路线放…

蓝桥杯python常用内置函数

一、 abs() #返回数字的绝对值 例&#xff1a; 二、 all() #判断给定的可迭代参数中的所有元素是否都为True&#xff0c;若是则返回True&#xff0c;反之返回False 例&#xff1a; 三、 any() #判断给定的可迭代参数是否都为False&#xff0c;全为False则返回False&am…

光明网发布稿件多少钱?新闻投稿低价渠道推荐,附光明网价格明细表

想要在光明网发稿&#xff1f;不知道费用是多少&#xff1f;媒介多多告诉你答案&#xff01; 在当今数字化时代&#xff0c;媒体平台的重要性日益突出&#xff0c;而光明网作为国内知名的新闻门户网站&#xff0c;吸引了大量的目标受众。许多企业和个人都希望能够在光明网上投…

Dubbo-记录

1.概念 Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力&#xff0c; 利用 Dubbo 提供的丰富服务治理…

【SQL】550. 游戏玩法分析 IV (关键点:确定连续两次登录)

前述 常见函数用法示例&#xff1a; DATEDIFF(col1, col2) 1DATE_ADD(MIN(col), INTERVAL 1 DAY)ROUND(3.1415926,3) > 四舍五入得到 3.142 题目描述 leetcode原题&#xff1a;550. 游戏玩法分析 IV 思路 确定连续两次登录统计&#xff0c;保留两位小数 写法一 关键…

FME快速批量提取图斑四至点,提取四至坐标,并输出shapefile数据的实现方法

目录 一、实现效果 二、实现过程 1.读取图斑 2.提取图斑坐标极值 3.提取图斑坐标 4.提取四至方位的坐标 5.创建四至点 6.输出成果 7.模板的使用 三、总结 在遇到需要提取图斑四至点的工作时&#xff0c;要如何进行方便快速的批量提取&#xff0c;方法有很多。今天…