Mac OS(10.13.6)使用 vagrant+VirtualBox +centos7搭建k8s集群

Mac OS(10.13.6)使用 vagrant+VirtualBox +centos7搭建k8s集群步骤

环境准备工作

  1. 下载VirtualBox 地址:https://www.virtualbox.org/ 下载最新安装包 6.1 ,安装环境很简单,根据步骤下一步即可
  2. 下载vagrant 地址:https://www.vagrantup.com/ 下载最新安装包 Vagrant 2.2.9 ,安装环境很简单,根据步骤下一步即可
  3. 下载centos7 box https://download.csdn.net/download/xia296/12740338 使用命令vagrant box add centos7 box文件路径,增加本地box
  4. 安装 kubeadm,使用 kubeadm 开启k8s集群,需要环境如下:
    1. 一台或多台运行着下列系统的机器:(CentOS 7);
    2. 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响您应用的运行内存);
    3. 2 CPU 核或更多;
    4. 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以);
    5. 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里 了解更多详细信息。
    6. 开启机器上的某些端口。请参见这里 了解更多详细信息。
    7. 禁用交换分区。为了保证 kubelet 正常工作,您 必须 禁用交换分区。
  5. docker-ce安装
  6. kubelet和kubectl

使用vagrant 创建3个centos7 虚拟机网络配置及其他配置基础

  1. 新增vagrant 本地box,以防止远程下载操作系统;

    1#创建本地box 2vagrant box add centos7 /Users/summer/Downloads/centos-7.0-x86_64.box 3#查询本地box 4vagrant box list
  2. 新建一个vagrant 配置文件Vagrantfile 批量创建3个虚拟机

    Vagrant.configure("2") do |config| (1..3).each do |i| config.vm.define "k8s-node#{i}" do |node| # 设置虚拟机的Box node.vm.box = "centos7"

    1 # 设置虚拟机的主机名 2 node.vm.hostname="k8s-node#{i}" 3 4 # 设置虚拟机的IP 5 node.vm.network "private_network", ip: "192.168.56.#{99+i}", netmask: "255.255.255.0" 6 7 # 设置主机与虚拟机的共享目录 8 # node.vm.synced_folder "~/Documents/vagrant/share", "/home/vagrant/share" 9 10 # VirtaulBox相关配置 11 node.vm.provider "virtualbox" do |v| 12 # 设置虚拟机的名称 13 v.name = "k8s-node#{i}" 14 # 设置虚拟机的内存大小 15 v.memory = 2048 16 # 设置虚拟机的CPU个数 17 v.cpus = 2 18 end 19 end

    end end

  3. 运行vagrant up命令,运行后会帮我们自动创建k8s-node1、k8s-node2、k8s-node3 虚拟机

    vagrant up

屏幕快照 2020-08-23 下午3.10.08

设置自定义nat网络,防止公用一个IP;

image-20200823155200192

image-20200823155527299

image-20200823160026783

  1. 由于vagrant 帮我们创建的只能通过ssh访问,我们需要开启账号密码访问权限,以便可以使用其他客户端工具访问,这里以k8s-node1为例,其他虚拟机类似(非必须,测试我的版本默认已经开启了yes);

    1#进入k8s-node1 2vagrant ssh k8s-node1 3#切换root访问权限,密码默认为vagrant 4su root 5#修改sshd_config,找到 PasswordAuthentication no 改为yes即可,最新版本创建的时候可以忽略,默认则是yes 6vi /etc/ssh/sshd_config 7#重启sshd服务 8service sshd restart
  2. 设置Linux环境(三个虚拟机都要执行)

    1. 为了测试方便,关闭所有虚拟机的防火墙

      1systemctl stop firewalld 2systemctl disable firewalld
    2. 关闭selinux 安全策略(此处可以省略,我测试默认是关闭的)

      1#查看selinux 2cat /etc/selinux/config 3#SELINUX=disabled 4SELINUX=disabled 5#如没有禁止,可以使用如下命令快速禁止 6sed -i 's/enforcing/disabled' /etc/selinux/config 7#全局禁止配置 8setenforce 0
    3. 关闭swap

      1#查看是否禁止了swap 2cat /etc/fstab 3#可以查看到是开启的,如需要禁止注释掉此行即可 4/dev/mapper/centos-swap swap swap defaults 0 0 5#临时的禁止 6swapoff -a 7#执行此命令,可以注释掉分区交换行 8sed -ri 's/.*swap.*/#&/' /etc/fstab 9#验证,swap必须为0 10free -g
    4. 添加主机名与IP对于关系

      1#通过hostname查看主机名,我这里使用vagrant创建时就指定了,如果你没使用vagrant,则可以使用hostnamectl set-hostname<newhostname> 指定新的hostname; 2hostname 3#添加本地主机映射 4vim /etc/hosts 510.0.2.15 k8s-node1 610.0.2.4 k8s-node2 710.0.2.5 k8s-node3
    5. 将桥接的IPv4流量传递到iptables的链(防止统计流量指标不准确)

      1cat > /etc/sysctl.d/k8s.conf << EOF 2net.bridge.bridge-nf-call-ip6tables = 1 3net.bridge.bridge-nf-call-iptables = 1 4net.ipv4.ip_forward = 1 5EOF 6 7sysctl --system

所有虚拟机安装docker、kubeadm、kubelet和kubectl

配置yum源(可选)

1#1、配置yum源base repo为阿里云的yum源 2cd /etc/yum.repos.d 3mv CentOS-Base.repo CentOS-Base.repo.bak 4mv epel.repo epel.repo.bak 5curl https://mirrors.aliyun.com/repo/Centos-7.repo -o CentOS-Base.repo 6sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/CentOS-Base.repo 7curl https://mirrors.aliyun.com/repo/epel-7.repo -o epel.repo 8 9#2、配置kubernetes源为阿里的yum源 10cat <<EOF > /etc/yum.repos.d/kubernetes.repo 11[kubernetes] 12name=Kubernetes 13baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 14enabled=1 15gpgcheck=1 16repo_gpgcheck=1 17gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 18EOF 19 20#配置yum说明 21#baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 Kubernetes源设为阿里 22#gpgcheck=0:表示对从这个源下载的rpm包不进行校验 23#repo_gpgcheck=0:某些安全性配置文件会在 /etc/yum.conf 内全面启用 repo_gpgcheck,以便能检验软件库的中继数据的加密签署 24#如果gpgcheck设为1,会进行校验,就会报错如下,所以这里设为0 25 26#3、update cache 更新缓存 27yum clean all && yum makecache && yum repolist

docker 安装

  1. 安装docker之前,清理系统之前的docker

    1sudo yum remove docker \ 2 docker-client \ 3 docker-client-latest \ 4 docker-common \ 5 docker-latest \ 6 docker-latest-logrotate \ 7 docker-logrotate \ 8 docker-engine
  2. 安装docker-ce 之前需安装所需的包。yum-utils提供了yum-config-manager 效用,并device-mapper-persistent-data和lvm2由需要 devicemapper存储驱动程序。

    1sudo yum install -y yum-utils \ 2device-mapper-persistent-data \ 3lvm2
  3. 设置稳定的存储库。

    1#官方库有点慢,我们可以使用国内镜像库 2sudo yum-config-manager \ 3--add-repo \ 4https://download.docker.com/linux/centos/docker-ce.repo 5 6#设置阿里云库 7sudo yum-config-manager \ 8--add-repo \ 9http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. 安装docker及配置docker加速

    国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:

    当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。

    阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了,更多阿里云服务器docker一键部署见帮助手册

    1#安装docker-ce cli 2sudo yum install -y docker-ce docker-ce-cli containerd.io 3#复制以下配置加速 4sudo mkdir -p /etc/docker 5sudo tee /etc/docker/daemon.json <<-'EOF' 6{ 7 "registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"] 8} 9EOF 10sudo systemctl daemon-reload 11sudo systemctl restart docker
  5. 设置docker开机自启动

    sudo systemctl enable docker
    

安装kubeadm、kubelet和kubectl

Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。

Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。

Kubectl是Kubernetes集群管理工具。

1#配置kubernetes源为阿里的yum源 2cat <<EOF > /etc/yum.repos.d/kubernetes.repo 3[kubernetes] 4name=Kubernetes 5baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 6enabled=1 7gpgcheck=1 8repo_gpgcheck=1 9gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 10EOF 11 12# 将 SELinux 设置为 permissive 模式(相当于将其禁用),这里我上面已经设置过了,所以不需要设置; 13setenforce 0 14sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config 15#开始安装 16yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes 17#设置开机自启动kubelet 18systemctl enable --now kubelet 19#查看k8s版本 20kubeadm version

请注意:

  • 通过运行命令 setenforce 0sed ... 将 SELinux 设置为 permissive 模式可以有效的将其禁用。 这是允许容器访问主机文件系统所必须的,例如正常使用 pod 网络。 您必须这么做,直到 kubelet 做出升级支持 SELinux 为止。

  • 一些 RHEL/CentOS 7 的用户曾经遇到过问题:由于 iptables 被绕过而导致流量无法正确路由的问题。您应该确保 在 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 被设置为 1。

    1cat <<EOF > /etc/sysctl.d/k8s.conf 2net.bridge.bridge-nf-call-ip6tables = 1 3net.bridge.bridge-nf-call-iptables = 1 4EOF 5sysctl --system
  • 确保在此步骤之前已加载了 br_netfilter 模块。这可以通过运行 lsmod | grep br_netfilter 来完成。要显示加载它,请调用 modprobe br_netfilter

kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。

在控制平面节点上配置 kubelet 使用的 cgroup 驱动程序

使用 docker 时,kubeadm 会自动为其检测 cgroup 驱动并在运行时对 /var/lib/kubelet/kubeadm-flags.env 文件进行配置。

如果您使用不同的 CRI,您需要使用 cgroup-driver 值修改 /etc/default/kubelet 文件(对于 CentOS、RHEL、Fedora,修改 /etc/sysconfig/kubelet 文件),像这样:

KUBELET_EXTRA_ARGS=--cgroup-driver=<value>

这个文件将由 kubeadm initkubeadm join 使用以获取额外的用户自定义的 kubelet 参数。

请注意,您只需要在您的 cgroup 驱动程序不是 cgroupfs 时这么做,因为它已经是 kubelet 中的默认值。

需要重新启动 kubelet:

1systemctl daemon-reload 2systemctl restart kubelet

自动检测其他容器运行时的 cgroup 驱动,例如在进程中工作的 CRI-O 和 containerd。

查看kubernetes 镜像并初始化 (master node都要执行)

开始初始化集群之前可以使用kubeadm config images list查看一下初始化需要哪些镜像,可以先通过kubeadm config images pull手动在各个节点上拉取所k8s需要的docker镜像,master节点初始化或者node节点加入集群时,会用到这些镜像

如果不先执行kubeadm config images pull拉取镜像,其实在master节点执行kubeadm init 或者node节点执行 kubeadm join命令时,也会先拉取镜像。

1kubeadm config images list 2W0823 16:09:49.820989 7970 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io] 3#以下是所需要的镜像 4k8s.gcr.io/kube-apiserver:v1.18.8 5k8s.gcr.io/kube-controller-manager:v1.18.8 6k8s.gcr.io/kube-scheduler:v1.18.8 7k8s.gcr.io/kube-proxy:v1.18.8 8k8s.gcr.io/pause:3.2 9k8s.gcr.io/etcd:3.4.3-0 10k8s.gcr.io/coredns:1.6.7
  1. 初始化kubeadm与之对应的命令为kubeadm reset(1.18.8版本忽略这一步)

    1kubeadm init --kubernetes-version v1.18.8 \ 2--apiserver-advertise-address=10.0.2.15 \ 3--service-cidr=10.1.0.0/16 \ 4--pod-network-cidr=10.244.0.0/16 5--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \

    参数说明:

    –kubernetes-version: 用于指定k8s版本; –apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是 master本机IP地址。 –pod-network-cidr:用于指定Pod的网络范围,它的值取决于你在下一步选择的哪个网络插件,比如我在本文中使用的是Calico网络,需要指定为192.168.0.0/16 –service-cidr:用于指定SVC的网络范围; –image-repository: 指定阿里云镜像仓库地址,这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址,注意在发文的时候阿里云仓库中最新版本为1.17,所以通过这个镜像地址无法拉取1.18.8版本;

  2. 手动下载docker镜像,编写master_images.sh(master节点所需镜像下载)、node_images.sh(node节点所需镜像下载)

    master_images.sh 脚本内容如下:

    1#!/bin/bash 2 3images=( 4 kube-apiserver:v1.18.8 5 kube-proxy:v1.18.8 6 kube-controller-manager:v1.18.8 7 kube-scheduler:v1.18.8 8 coredns:1.6.7 9 etcd:3.4.3-0 10 pause:3.2 11) 12 13for imageName in ${images[@]} ; do 14 docker pull gotok8s/$imageName 15 docker tag gotok8s/$imageName k8s.gcr.io/$imageName 16 docker rmi gotok8s/$imageName 17done

    node_images.sh 脚本内容如下:

    1#!/bin/bash 2 3images=( 4 kube-proxy:v1.18.8 5 pause:3.2 6) 7 8for imageName in ${images[@]} ; do 9 docker pull gotok8s/$imageName 10 docker tag gotok8s/$imageName k8s.gcr.io/$imageName 11 docker rmi gotok8s/$imageName 12 #docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 13# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName 14done 15

    初始化配置文件

    1#初始化配置文件 2kubeadm config print init-defaults > kubeadm.yaml 3#编辑配置文件 4vim kubeadm.yaml 5apiVersion: kubeadm.k8s.io/v1beta2 6bootstrapTokens: 7- groups: 8 - system:bootstrappers:kubeadm:default-node-token 9 token: abcdef.0123456789abcdef 10 ttl: 24h0m0s 11 usages: 12 - signing 13 - authentication 14kind: InitConfiguration 15localAPIEndpoint: 16 advertiseAddress: 10.0.2.15 # 修改为本机ip地址,多块网卡可以指定具体ip 17 bindPort: 6443 18nodeRegistration: 19 criSocket: /var/run/dockershim.sock 20 name: master1 21 taints: 22 - effect: NoSchedule 23 key: node-role.kubernetes.io/master 24--- 25apiServer: 26 timeoutForControlPlane: 4m0s 27apiVersion: kubeadm.k8s.io/v1beta2 28certificatesDir: /etc/kubernetes/pki 29clusterName: kubernetes 30controllerManager: {} 31dns: 32 type: CoreDNS 33etcd: 34 local: 35 dataDir: /var/lib/etcd 36imageRepository: k8s.gcr.io 37kind: ClusterConfiguration 38kubernetesVersion: v1.18.8 # 修改为最新版本 39networking: 40 dnsDomain: cluster.local 41 serviceSubnet: 10.1.0.0/16 # service网段 42 podSubnet: 10.244.0.0/16 # pod网段,需与网络插件网段一致 43scheduler: {} 44--- 45apiVersion: kubeproxy.config.k8s.io/v1alpha1 46kind: KubeProxyConfiguration 47mode: ipvs # 开启ipvs 48 49 50#指定初始化配置文件执行 51kubeadm init --config=kubeadm.yaml 52#看到如下信息代表初始化成功,然后根据提示操作即可 53Your Kubernetes control-plane has initialized successfully! 54#要开始使用群集,您需要以常规用户身份运行以下操作: 55To start using your cluster, you need to run the following as a regular user: 56 57 mkdir -p $HOME/.kube 58 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 59 sudo chown $(id -u):$(id -g) $HOME/.kube/config 60#现在应该将pod网络部署到集群。 61You should now deploy a pod network to the cluster. 62Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: 63 https://kubernetes.io/docs/concepts/cluster-administration/addons/ 64#待网络配置好后,在子节点执行如下命令,子节点则加入到集群中; 65Then you can join any number of worker nodes by running the following on each as root: 66 67kubeadm join 10.0.2.15:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:763142fb1596ffa79b631210b801e0b0764c23666a01f37f5224a853c8777a93

至此我们master节点已经初步完成,执行命令kubectl get nodes 查看集群节点状态可以发现master状态是NotReady,因为此时还没有安装网络组件,下面我们来安装网络组件;

  1. 安装pod网络组件(flannel网络组件为例)

    1#下载flannel网络组件配置文件 2wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 3#安装网络组件 4kubectl apply -f kube-flannel.yml 5#卸载网络组件 6kubectl delete -f kube-flannel.yml
  2. 命令查看有多少pods

    1#查看默认名称空间下的pods 2kubectl get pods 3#查看名称空间 4kubectl get ns 5#查看所有名称空间下的pods 6kubectl get pods --all-namespaces 7#查看运行节点 8[root@k8s-node1 k8s]# kubectl get nodes 9NAME STATUS ROLES AGE VERSION 10k8s-node1 Ready master 3h59m v1.18.8 #主节点运行正常 11k8s-node2 Ready <none> 4m25s v1.18.8 #从节点运行正常,如果为NotReady,我们耐心等待加载即可; 12k8s-node3 Ready <none> 4m23s v1.18.8 #从节点运行正常

常见问题

  1. 如启动vagrant up 出现如下错误,不要慌,这个是你的虚拟网卡驱动没初始化好

There was an error while executing VBoxManage, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.

Command: ["hostonlyif", "create"]

Stderr: 0%... Progress state: NS_ERROR_FAILURE VBoxManage: error: Failed to create the host-only adapter VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterfaceWrap, interface IHostNetworkInterface VBoxManage: error: Context: "RTEXITCODE handleCreate(HandlerArg *)" at line 95 of file VBoxManageHostonly.cpp

执行以下命令即可

sudo "/Library/Application Support/VirtualBox/LaunchDaemons/VirtualBoxStartup.sh" restart

注意:执行命令可能一些会不成功,你需要进入设置->安全和隐私->常规,并在“允许应用程序...”下批准Oracle,Inc.的请求。

  1. 修改Docker Cgroup Driver为systemd,如果不修改则在后续添加Worker节点时可能会遇到“detected cgroupfs as ths Docker driver.xx”的报错信息,并配置Docker本地镜像库;

    [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/"

    1cat > /etc/docker/daemon.json <<EOF 2{ 3 "exec-opts": ["native.cgroupdriver=systemd"], 4 "registry-mirrors":[ 5 "https://1nj0zren.mirror.aliyuncs.com", 6 "https://kfwkfulq.mirror.aliyuncs.com", 7 "https://2lqq34jg.mirror.aliyuncs.com", 8 "https://pee6w651.mirror.aliyuncs.com", 9 "http://hub-mirror.c.163.com", 10 "https://docker.mirrors.ustc.edu.cn", 11 "http://f1361db2.m.daocloud.io", 12 "https://registry.docker-cn.com" 13 ] 14} 15EOF 16 17#以下为常用命令 18#重新加载daemon.json配置 19systemctl daemon-reload 20#重启docker服务 或start docker 21systemctl restart docker 22#设置Kubelet开启开机自启动 23systemctl enable kubelet 24#启动Kubelet服务 25systemctl start kubelet 26#重启kubelet服务 27systemctl restart kubelet 28#查看kubectl健康状态 29kubectl get cs
  2. 发现controller-manager和scheduler状态是不健康

    如果节点都处于Ready后,实际上该状态是不影响的。因为kubeadm v1.18.6及以后的版本,是默认不开启controller-manager的10252和scheduler的10251端口的,一般10251和10252是监听在http上面,不需要证书认证,属于不安全的端口。

    可以将/etc/kubernetes/manifests/kube-controller-manager.yaml、/etc/kubernetes/manifests/kube-scheduler.yaml中–port=0注释掉,再次kubect get cs组件状态,这时都是ok了。

    1[root@k8s-node1 k8s]# kubectl get cs 2NAME STATUS MESSAGE ERROR 3controller-manager Healthy ok 4scheduler Healthy ok 5etcd-0 Healthy {"health":"true"}
  3. worker节点加入集群后,一直处于NotReady状态,我们通过监控pod进度查看

    1#监控pod状态 2watch kubectl get pods -n kube-system -o wide 3#指定pod查看详细信息 4kubectl describe pod coredns-66bff467f8-8pksf --namespace=kube-system #coredns-66bff467f8-8pksf是你的pod name
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )