欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

本文由编程男孩 发表于云+社区专栏

介绍

Kubernetes(常简称为K8s)是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。Google设计并捐赠给Linux基金会来使用的。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包括Docker等。

Kubeadm是 Kubernetes 官方推出的部署工具 ,例如API服务器,Controller Manager和Kube DNS,该工具实作类似Docker swarm 一样的部署方式,透过初始化Master 节点来提供给Node快速加入。但是,它的缺点也很明显,它不会创建用户或处理操作系统级依赖关系及其配置的安装。对于这些步骤,可以使用AnsibleSaltStack等配置管理工具。使用这些工具可以更轻松地更改其他集群或重新创建现有集群。

在本教程中,您将使用Ansible和Kubeadm从头开始设置Kubernetes集群,然后给它部署一个容器化的Nginx程序。

目标

您的群集将包含以下物理资源:

  • 一个主节点

主节点(Kubernetes中的节点指的是服务器)负责管理集群的状态。我们将用它运行Etcd,该服务器目的是将工作负载调度到工作节点的组件之间存储集群数据。

  • 两个工作节点

工作节点是运行工作负载(即容器化应用程序和服务)的服务器。一旦工作节点分配了工作负载,工作节点将继续运行您的工作负载,即使计划在调度完成后停止工作也是如此。通过添加工作节点可以增加群集的容量。

完成本教程后,您将拥有一个可以运行容器化应用程序的集群,前提是集群中的服务器具有足够的CPU和RAM资源供应用程序使用。几乎任何传统的Unix应用程序(包括Web应用程序,数据库,守护程序和命令行工具)都可以进行容器化,并在集群上运行。群集本身将在每个节点上消耗大约300-500MB的内存和10%的CPU。

设置群集后,您将部署Web服务器Nginx以确保它正确运行。

准备

  • 本地Linux / macOS /BSD计算机上的SSH密钥对。如果您之前没有使用过SSH密钥,同时使用的是腾讯云的服务器的话,请参考创建 SSH 密钥文档。如果您使用的不是腾讯云的服务器,请自行搜索,本文暂不涉及。本教程的本地计算机是Linux操作系统,请勿使用Windows进行试验。
  • 运行CentOS 7的三台服务器,内存至少为1GB。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。您应该能够以SSH密钥对的root用户身份SSH到每个服务器。请务必将您的公钥添加到主节点上的centos用户帐户。如果您需要有关向特定用户帐户添加SSH密钥的指导,请参阅密钥绑定/解绑服务器文档。
  • Ansible需要安装在您的本地计算机上。有关安装说明,请按照Ansible官方安装文档
  • 了解如何从Docker镜像启动容器。如果需要复习,请参阅如何安装使用Docker的“第5步 - 运行Docker容器” 。

第1步 - 设置工作区目录和Ansible配置

在本节中,您将在本地计算机上创建一个用作工作区的目录。您还将在本地配置Ansible,以便它可以与远程服务器上的命令进行通信。为此,您将创建一个hosts文件包,其包含例如服务器的IP地址和每个服务器所属的组等信息。

在三台服务器中,一台服务器将作为主服务器master_ip。另外两台服务器则是是工作节点,并拥有IPworker_1_ipworker_2_ip

在本地计算机的主目录中创建一个名为~/kube-cluster/hosts的目录并进入其中:

mkdir ~/kube-cluster
cd ~/kube-cluster

该目录将是本教程的工作区,包含所有Ansible设置。它也将是您运行所有本地命令的目录。

使用vi命令创建一个名为~/kube-cluster/hosts的文件或用您最喜欢的文本编辑器:

vi ~/kube-cluster/hosts

i将以下文本插入到文件中,该文件将指定有关群集逻辑结构的信息:

[masters]
master ansible_host=master_ip ansible_user=root [workers]
worker1 ansible_host=worker_1_ip ansible_user=root
worker2 ansible_host=worker_2_ip ansible_user=root

完成后,按,ESC然后输入:wq将更改写入文件并退出。

您可能还记得在Ansible中用于指定服务器信息的库存文件,例如IP地址,远程用户和服务器分组,以作为执行命令的单个单元进行目标。~/kube-cluster/hosts将是您的库存文件,并且您已向其添加了两个Ansible组(主服务器工作服务器),用于指定集群的逻辑结构。

服务器组中,有一个名为“master”的服务器,其中列出了主节点的IP(master_ip),并指定Ansible应以根用户身份运行远程命令。

同样,在workers组中,有两个工作服务器(worker_1_ipworker_2_ip),它们也需要指定ansible_user为root用户。

在设置服务器清单之后,让我们继续安装操作系统级依赖关系并创建配置设置。

第2步 - 安装Kubernetes的依赖项

在本节中,您将使用CentOS的yum软件包管理器安装Kubernetes所需的软件包。这些包是:

  • Docker - 容器运行时。这是运行容器的组件。Kubernetes正在积极开发对rkt等其他运行容器服务的支持。
  • kubeadm - CLI工具,以标准方式安装和配置群集的各个组件。
  • kubelet - 在所有节点上运行并处理节点级操作的系统服务/程序。
  • kubectl- 通过其API服务器向集群发出命令的CLI工具。

创建工作空间中指定的文件vi ~/kube-cluster/kube-dependencies.yml

vi ~/kube-cluster/kube-dependencies.yml

将下面的内容插到文件内:

- hosts: all
become: yes
tasks:
- name: install Docker
yum:
name: docker
state: present
update_cache: true - name: start Docker
service:
name: docker
state: started - name: disable SELinux
command: setenforce 0 - name: disable SELinux on reboot
selinux:
state: disabled - name: ensure net.bridge.bridge-nf-call-ip6tables is set to 1
sysctl:
name: net.bridge.bridge-nf-call-ip6tables
value: 1
state: present - name: ensure net.bridge.bridge-nf-call-iptables is set to 1
sysctl:
name: net.bridge.bridge-nf-call-iptables
value: 1
state: present - name: add Kubernetes' YUM repository
yum_repository:
name: Kubernetes
description: Kubernetes YUM repository
baseurl: https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
gpgkey: https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
gpgcheck: yes - name: install kubelet
yum:
name: kubelet
state: present
update_cache: true - name: install kubeadm
yum:
name: kubeadm
state: present - name: start kubelet
service:
name: kubelet
enabled: yes
state: started - hosts: master
become: yes
tasks:
- name: install kubectl
yum:
name: kubectl
state: present

文件中的的第一部分内容如下:

  • 容器运行时,安装Docker。
  • 启动Docker服务。
  • 请禁用SELinux,因为Kubernetes尚未完全支持它。
  • 设置网络所需的一些与netfilter相关的sysctl值。这将允许Kubernetes设置iptables规则,以便在节点上接收桥接的IPv4和IPv6网络流量。
  • 将Kubernetes YUM存储库添加到远程服务器的存储库列表中。
  • 安装kubeletkubeadm

第二部分意思是在主节点上设置一下kubectl的任务。

完成后保存并关闭文件。

接下来,执行playbook

ansible-playbook -i hosts ~/kube-cluster/kube-dependencies.yml

完成后,您将看到类似于以下内容的输出:

PLAY [all] ****

TASK [Gathering Facts] ****
ok: [worker1]
ok: [worker2]
ok: [master] TASK [install Docker] ****
changed: [master]
changed: [worker1]
changed: [worker2] TASK [disable SELinux] ****
changed: [master]
changed: [worker1]
changed: [worker2] TASK [disable SELinux on reboot] ****
changed: [master]
changed: [worker1]
changed: [worker2] TASK [ensure net.bridge.bridge-nf-call-ip6tables is set to 1] ****
changed: [master]
changed: [worker1]
changed: [worker2] TASK [ensure net.bridge.bridge-nf-call-iptables is set to 1] ****
changed: [master]
changed: [worker1]
changed: [worker2] TASK [start Docker] ****
changed: [master]
changed: [worker1]
changed: [worker2] TASK [add Kubernetes' YUM repository] *****
changed: [master]
changed: [worker1]
changed: [worker2] TASK [install kubelet] *****
changed: [master]
changed: [worker1]
changed: [worker2] TASK [install kubeadm] *****
changed: [master]
changed: [worker1]
changed: [worker2] TASK [start kubelet] ****
changed: [master]
changed: [worker1]
changed: [worker2] PLAY [master] ***** TASK [Gathering Facts] *****
ok: [master] TASK [install kubectl] ******
ok: [master] PLAY RECAP ****
master : ok=9 changed=5 unreachable=0 failed=0
worker1 : ok=7 changed=5 unreachable=0 failed=0
worker2 : ok=7 changed=5 unreachable=0 failed=0

执行后,Docker,kubeadmkubelet将安装在所有远程服务。kubectl不是必需组件,仅用于执行集群命令。但是我们建议您还是安装它,因为您将仅从主节点运行kubectl命令。

现在安装了所有系统依赖项。让我们设置主节点并初始化集群。

第3步 - 设置主节点

在本节中,您将设置主节点。然而在创建配置之前,我们需要熟悉几个概念,如PodsPod 网络插件

Kubernetes的基本调度单元称为“pods”。它可以把更高级别的抽象内容增加到容器化组件。一个pod一般包含一个或多个容器,这样可以保证它们一直位于主机上,并且可以共享资源。Kubernetes中的每个pod都被分配一个唯一的(在集群内的)IP地址这样就可以允许应用程序使用端口,而不会有冲突的风险。Pod可以定义一个卷,例如本地磁盘目录或网络磁盘,并将其暴露在pod中的一个容器之中。pod可以通过Kubernetes API手动管理,也可以委托给控制器来管理。

每个pod都有自己的IP地址,一个节点上的pod应该能够使用pod的IP访问另一个节点上的pod。单个节点上的容器可以通过本地接口轻松进行通信。然而,pod之间的通信更复杂,并且需要单独的网络组件,该组件可以透明地将流量从一个节点上的pod传送到另一个节点上的pod。此功能由pod网络插件提供。对于这个群集,建议您将使用Flannel选项

在本地计算机上创建一个命名为master.yml的Ansible playbook :

vi ~/kube-cluster/master.yml

将以下内容添加到文件中以初始化集群并安装Flannel:

- hosts: master
become: yes
tasks:
- name: initialize the cluster
shell: kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt
args:
chdir: $HOME
creates: cluster_initialized.txt - name: create .kube directory
become: yes
become_user: centos
file:
path: $HOME/.kube
state: directory
mode: 0755 - name: copy admin.conf to user's kube config
copy:
src: /etc/kubernetes/admin.conf
dest: /home/centos/.kube/config
remote_src: yes
owner: centos - name: install Pod network
become: yes
become_user: centos
shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml >> pod_network_setup.txt
args:
chdir: $HOME
creates: pod_network_setup.txt

这是上面内容的详解:

  • 第一个任务通过运行kubeadm init初始化集群。传递--pod-network-cidr=10.244.0.0/16参数指定将从中分配pod IP的私有子网。Flannel默认使用上述子网,我们告诉kubeadm使用相同的子网。
  • 第二个任务创建一个.kube目录在/home/centos。此目录将保存配置信息,例如连接到群集所需的管理密钥文件以及群集的API地址。
  • 第三个任务将/etc/kubernetes/admin.conf生成的文件复制kubeadm initcentos用户的主目录。这将允许您用kubectl访问新创建的群集。
  • 最后一个任务运行kubectl apply安装Flannelkubectl apply -f descriptor.[yml|json]是告诉kubectl创建descriptor.[yml|json]文件中描述的对象的语法。kube-flannel.yml文件包含Flannel在群集中设置所需的对象的说明。

完成后保存并关闭文件。执行配置:

ansible-playbook -i hosts ~/kube-cluster/master.yml

完成后,您将看到类似于以下内容的输出:

PLAY [master] ****

TASK [Gathering Facts] ****
ok: [master] TASK [initialize the cluster] ****
changed: [master] TASK [create .kube directory] ****
changed: [master] TASK [copy admin.conf to user's kube config] *****
changed: [master] TASK [install Pod network] *****
changed: [master] PLAY RECAP ****
master : ok=5 changed=4 unreachable=0 failed=0

要检查主节点的状态,请使用以下命令通过SSH连接到该节点:

ssh centos@master_ip

进入主节点后,执行:

kubectl get nodes

您现在将看到以下输出:

NAME      STATUS    ROLES     AGE       VERSION
master Ready master 1d v1.10.1

输出表明master节点已完成所有初始化任务,并且处于Ready可以开始接受工作节点并执行发送到API服务器的任务的状态。您现在可以从本地计算机添加工作程序。

第4步 - 设置工作节点

将工作程序添加到集群涉及在每个集群上执行单个命令。此命令包括必要的群集信息,例如主服务器API服务器的IP地址和端口以及安全令牌。只有传入安全令牌的节点才能加入群集。

f反回您的工作区并创建一个名为workers.yml的配置:

vi ~/kube-cluster/workers.yml

将以下文本添加到文件中:

- hosts: master
become: yes
gather_facts: false
tasks:
- name: get join command
shell: kubeadm token create --print-join-command
register: join_command_raw - name: set join command
set_fact:
join_command: "{{ join_command_raw.stdout_lines[0] }}" - hosts: workers
become: yes
tasks:
- name: join cluster
shell: "{{ hostvars['master'].join_command }} >> node_joined.txt"
args:
chdir: $HOME
creates: node_joined.txt

以下是配置的作用:

  • 第一个配置获取join命令,以便在worker节点上运行。该命令将采用以下格式:kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>一旦它获得具有的令牌哈希值的命令,该任务就将其设置为可用,以便下一个配置能够访问该信息。
  • 第二个配置有一个任务,它在所有工作节点上运行join命令。完成此任务后,两个工作节点将成为群集的一部分。

完成后保存并关闭文件。执行配置:

ansible-playbook -i hosts ~/kube-cluster/workers.yml

完成后,您将看到类似于以下内容的输出:

PLAY [master] ****

TASK [get join command] ****
changed: [master] TASK [set join command] *****
ok: [master] PLAY [workers] ***** TASK [Gathering Facts] *****
ok: [worker1]
ok: [worker2] TASK [join cluster] *****
changed: [worker1]
changed: [worker2] PLAY RECAP *****
master : ok=2 changed=1 unreachable=0 failed=0
worker1 : ok=2 changed=1 unreachable=0 failed=0
worker2 : ok=2 changed=1 unreachable=0 failed=0

通过添加工作节点,您的群集现在已完全设置并正常运行,工作节点可以随时运行工作负载。让我们验证群集是否按预期工作。

第5步 - 验证群集

集群有时可能在安装过程中失败,因为节点已关闭或主服务器与工作服务器之间的网络连接无法正常工作。让我们验证集群并确保节点正常运行。

您需要从主节点检查群集的当前状态,以确保节点已准备就绪。如果从主节点断开连接,则可以使用以下命令通过SSH将其重新连接到主节点:

ssh centos@master_ip

然后执行以下命令以获取集群的状态:

kubectl get nodes

您将看到类似于以下内容的输出:

NAME      STATUS    ROLES     AGE       VERSION
master Ready master 1d v1.10.1
worker1 Ready <none> 1d v1.10.1
worker2 Ready <none> 1d v1.10.1

如果所有的节点都具有ReadySTATUS(状态),这意味着它们是集群的一部分,并准备运行工作负载。

但是,如果几个节点拥有NotReadySTATUS(状态),它可能意味着工作节点还没有完成自己的设置。等待大约五到十分钟再重新运行kubectl get node并检查新输出。如果一些节点仍具有NotReady状态,则需要验证并重新运行前面步骤中的命令。

现在您的集群已成功验证,让我们在集群上部署一个示例Nginx应用程序。

第6步 - 在群集上运行应用程序

您现在可以将任何容器化应用程序部署到您的群集。让我们使用部署和服务部署Nginx,以了解如何将此应用程序部署到集群。如果更改Docker镜像名称和任何相关标志(例如portsvolumes),您也可以使用以下命令用于其他容器化应用程序。

在主节点内,执行以下命令以创建名为nginx的部署:

kubectl run nginx --image=nginx --port 80

部署是一种Kubernetes对象,可确保始终根据已定义的模板运行指定数量的pod,即使pod在群集生命周期内崩溃也是如此。上面的部署将使用Docker镜像库的Nginx Docker Image创建一个包含一个容器的pod 。

接下来,运行以下命令以创建名为nginx将公开公共应用程序的服务。它将通过NodePort实现,该方案将通过在群集的每个节点上打开的任意端口访问pod:

kubectl expose deploy nginx --port 80 --target-port 80 --type NodePort

服务是另一种类型的Kubernetes对象,它向内部和外部客户端公开集群内部服务。它们还能够对多个pod进行负载均衡请求,并且是Kubernetes中不可或缺的组件,经常与其他组件交互。

运行以下命令:

kubectl get services

这将输出类似于以下内容的文本:

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP           PORT(S)        AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d
nginx NodePort 10.109.228.209 <none> 80:nginx_port/TCP 40m

从上面输出的第三行,您可以检索运行Nginx的端口。Kubernetes将分配一个大于30000自动的随机端口,同时确保该端口尚未受到其他服务的约束。

要测试一切正常,请访问或通过本地计算机上的浏览器。您将看到Nginx熟悉的欢迎页面。http://worker_1_ip:nginx_port或者http://worker_2_ip:nginx_port

如果要删除Nginx应用程序,请先nginx从主节点删除该服务:

kubectl delete service nginx

运行以下命令以确保已删除该服务:

kubectl get services

您将看到以下输出:

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP           PORT(S)        AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d

然后删除部署:

kubectl delete deployment nginx

运行以下命令以确认这是否有效:

kubectl get deployments
No resources found.

结论

在本教程中,您已使用Kubeadm和Ansible成功在CentOS 7上设置Kubernetes集群以实现自动化。

如果您想知道要在集群设置的情况下如何处理集群,那么下一步就是将自己的应用程序和服务部署到集群上。这是一个链接列表,其中包含可以指导您完成此过程的更多信息:

  • Dockerizing应用程序 - 列出了详细说明如何使用Docker对应用程序进行容器化的示例。
  • Pod概述 - 详细描述了Pod如何工作以及它们与其他Kubernetes对象的关系。Pods在Kubernetes中无处不在,因此了解它们将有助于您的工作。
  • 部署概述 - 这提供了部署的概述。了解部署之类的控制器如何有效地工作,因为它们经常在无状态应用程序中用于扩展和不健康应用程序的自动修复。
  • 服务概述 - 这包括服务,Kubernetes集群中另一个常用对象。了解服务类型及其选项对于运行无状态和有状态应用程序至关重要。

其他重要概念是VolumesIngressesSecrets,所有这些在部署生产应用程序时都派上用场。Kubernetes提供了许多功能和特性。Kubernetes官方文档是了解概念,查找特定于任务的教程以及查找各种对象的API参考的最佳位置。更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献: 《How To Create a Kubernetes 1.10 Cluster Using Kubeadm on CentOS 7》 《只要用 kubeadm 小朋友都能部署 Kubernetes》

问答

如何使用Kubernetes?

相关阅读

安全报告 | 2018上半年互联网恶意爬虫分析:从全景视角看爬虫与反爬虫

安全报告 | SSH 暴力破解趋势:从云平台向物联网设备迁移

给你的CVM安装一个面板吧!

此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1177930?fromSource=waitui

欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

海量技术实践经验,尽在云加社区

如何在CentOS上创建Kubernetes集群的更多相关文章

  1. CentOS上部署Kubernetes集群

    1.开始前系统环境准备 # 1.设置基本环境 yum install -y net-tools conntrack-tools wget vim ntpdate libseccomp libtool- ...

  2. 使用Gardener在Google Cloud Platform上创建Kubernetes集群

    Gardener是一个开源项目,github地址: https://github.com/gardener/gardener/ 使用Gardener,我们可以在几分钟之内在GCP, AWS, Azur ...

  3. 手把手教你在CentOS上搭建Kubernetes集群

    作者:ChamPly 安装CentOS 1.安装net-tools [root@localhost ~]# yum install -y net-tools 2.关闭firewalld [root@l ...

  4. 如何使用Rancher在OpenStack上创建K8S集群

    不可否认的是,OpenStack仍然是可行的云操作系统,并且被全世界许多互联服务提供商使用.而Rancher是业界最为广泛使用的Kubernetes管理平台,通过简洁直观的GUI集中管理企业IT中的多 ...

  5. 在CentOS上安装ZooKeeper集群

    一共准备3个CentOS虚拟机 172.16.9.194 172.16.9.195 172.16.9.196 上传zookeeper-3.3.6.tar.gz到服务器并解压,3台服务器的目录结构如下 ...

  6. 在CentOS7上部署Kubernetes集群

    在CentOS7上部署Kubernetes集群 文/FCBusquest 2015-12-22 18:36:00 简介 Kubernetes(k8s)是Google开源的大规模容器集群管理系统, 本文 ...

  7. Centos7上安装Kubernetes集群部署docker

    一.安装前准备1.操作系统详情需要三台主机,都最小化安装 centos7.3,并update到最新 [root@master ~]# (Core) 角色 主机名 IPMaster master 192 ...

  8. rancher v2.2.4创建kubernetes集群出现[etcd] Failed to bring up Etcd Plane: [etcd] Etcd Cluster is not healthy

    主机:rancher(172.16.2.17),master(172.16.2.95),node01(172.16.2.234),node02(172.16.2.67) 问题:开始是用的rancher ...

  9. 在 Azure 上部署 Kubernetes 集群

    在实验.演示的时候,或者是生产过程中,我经常会需要运行一些 Docker 负载.虽然这在本地计算机上十分容易,但是当你要在云端运行的时候就有点困难了.相比于本地运行,在云端运行真的太复杂了.我尝试了几 ...

随机推荐

  1. 解决150%DPI下Photoshop不能显示成合适大小的问题

    Adobe官方这里一直不给力,只能靠自己动手了. 和解决CHM高分屏显示的步骤差不多: Ctril+R,输入regedit编辑注册表. 进入到 HKEY_LOCAL_MACHINE > SOFT ...

  2. Java多线程:synchronized的可重入性

    从Java多线程:线程间通信之volatile与sychronized这篇文章中我们了解了synchronized的基本特性,知道了一旦有一个线程访问某个对象的synchronized修饰的方法或代码 ...

  3. 【热身】github的使用

    GitHub 可以托管各种Git版本库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性.为一个 ...

  4. 洛谷 P1879 解题报告

    P1879 [USACO06NOV]玉米田Corn Fields 题目描述 农场主\(John\)新买了一块长方形的新牧场,这块牧场被划分成\(M\)行\(N\)列\((1 ≤ M ≤ 12; 1 ≤ ...

  5. JSON Patch

    1.前言 可以这么说的是,任何一种非强制性约束同时也没有"标杆"工具支持的开发风格或协议(仅靠文档是远远不够的),最终的实现上都会被程序员冠上"务实"的名头,而 ...

  6. eclipse maven 构建简单springmvc项目

    环境:eclipse Version: Oxygen.3a Release (4.7.3a) 创建maven Project项目,目录结构 修改工程的相关编译属性 修改pop.xml,引入spring ...

  7. Netty中如何序列化数据

    JDK提供了ObjectOutputStream和ObjectInputStream,用于通过网络对POJO的基本数据类型和图进行序列化和反序列化.该API并不复杂,而且可以被应用于任何实现了java ...

  8. java.util.BitSet 详细分析 学习笔记

    1,BitSet类    大小可动态改变, 取值为true或false的位集合.用于表示一组布尔标志.   此类实现了一个按需增长的位向量.位 set 的每个组件都有一个 boolean 值.用非负的 ...

  9. (细节)My SQL中主键为0和主键自排约束的关系

    开始不设置主键 表的设计如下: 如果id的位置有好几个0的话:设置主键并且自动排序时,0会从1开始递增: Insert 进去 id = 0的数据,数据会从实际的行数开始增加,和从0变化不一样: 现在主 ...

  10. Composer基本安装步骤

    Composer是 PHP 世界里用于管理项目依赖的工具. 1,确保安装PHP,检查方法命令行窗口执行php -v,查看是否正常输出版本 php -v 2,下载安装脚本composer-setup.p ...