首页 > 其他分享 >Calico 入门教程

Calico 入门教程

时间:2024-05-20 10:19:42浏览次数:28  
标签:kubectl calicoctl Kubernetes -- 入门教程 API Calico

什么是Calico ?

Calico 是一种网络和安全解决方案,使 Kubernetes 工作负载和非 Kubernetes/遗留工作负载能够无缝、安全地通信。

组件和功能

在 Kubernetes 中,进出 pod 的网络流量默认为 default-allow。如果您不使用网络策略锁定网络连接,则所有 Pod 都可以与其他 Pod 自由通信。
Calico 由用于保护网络通信的网络和用于大规模保护云原生微服务/应用程序的高级网络策略组成,详见下图:

Calico 部署选项

Calico 网络和网络策略一起使用时最强大,但它们都是单独提供的,以便跨平台最广泛采用。以下是常见的 Calico 部署。

主要功能

下表总结了 Calico 的主要功能。要搜索特定功能,请参阅产品比较。

K8s上安装calico

通过此快速入门,您可以在大约 15 分钟内获得带有 Calico 的单主机 Kubernetes 集群。
使用此快速入门可以快速轻松地尝试 Calico 功能。要部署适合生产的集群,请参阅 Calico on Kubernetes

前置要求

  • A Linux host that meets the following requirements:
    • x86-64, arm64, ppc64le, or s390x processor
    • 2CPU
    • 2GB RAM
    • 10GB free disk space
    • RedHat Enterprise Linux 7.x+, CentOS 7.x+, Ubuntu 18.04+, or Debian 9.x+
  • Calico can manage cali and tunl interfaces on the host
  • If NetworkManager is present on the host, see Configure NetworkManager.

基于operator的安装

本快速入门指南使用 Tigera operator来安装 Calico。 Operator 为通过定义为自定义资源定义的 Kubernetes API 公开的 Calico 提供生命周期管理。

也可以直接使用 Kubernetes 清单在没有operator的情况下安装 Calico。对于不使用 Tigera operator的平台和指南,您可能会注意到与本指南中提 供的步骤和 Kubernetes 资源相比存在一些差异。

原理

Policy Calico

Kubernetes 网络策略是通过网络插件而不是 Kubernetes 本身来实现的。简单地创建网络策略资源而不使用网络插件来实现它,不会对网络流量产生影响。
Calico 插件实现了全套 Kubernetes 网络策略功能。此外,Calico 支持 Calico 网络策略,提供 Kubernetes 网络策略之外的附加特性和功能。 Kubernetes 和 Calico 网络策略无缝协作,因此您可以选择最适合您的策略,并根据需要进行混合和匹配。

IPAM Calico

Kubernetes 如何为 Pod 分配 IP 地址由所使用的 IPAM(IP 地址管理)插件决定。
Calico IPAM 插件根据需要动态地将小块 IP 地址分配给节点,以有效地整体利用可用的 IP 地址空间。此外,Calico IPAM 支持高级功能,例如多个 IP 池、指定命名空间或 Pod 应使用的特定 IP 地址范围的能力,甚至是 Pod 应使用的特定 IP 地址。

CNI Calico

Kubernetes 使用的 CNI(容器网络接口)插件决定了 Pod 如何连接到底层网络的详细信息。 Calico CNI 插件使用 L3 路由将 Pod 连接到主机网络,而不需要 L2 桥接器。这简单易懂,并且比 kubenet 或 flannel 等其他常见替代方案更高效。

Overlay VXLAN

覆盖网络允许 Pod 在节点之间进行通信,而底层网络不知道 Pod 或 Pod IP 地址。
不同节点上的 Pod 之间的数据包使用 VXLAN 进行封装,将每个原始数据包包装在使用节点 IP 的外部数据包中,并隐藏内部数据包的 Pod IP。
Linux 内核可以非常有效地完成此操作,但它仍然会产生很小的开销,如果运行特别网络密集型工作负载,您可能希望避免这种情况。 相反,为了完整性,不使用覆盖的操作可提供最高性能的网络。离开 Pod 的数据包是通过网络传输的数据包。

Routing Calico

Calico 路由使用其数据存储来分配和编程节点之间 pod 流量的路由,而无需 BGP。 Calico 路由支持单个子网内的未封装流量,以及跨多个子网的集群的选择性 VXLAN 封装。

Datastore kubernetes

Calico 将集群的操作和配置状态存储在中央数据存储中。如果数据存储不可用,您的 Calico 网络将继续运行,但无法更新(新 Pod 无法联网、无法应用策略更改等)。
Calico 有两个数据存储驱动程序可供选择

  • etcd - 用于直接连接到 etcd 集群
  • Kubernetes - 用于连接到 Kubernetes API 服务器

使用 Kubernetes 作为数据存储的优点是:

  • 它不需要额外的数据存储,因此安装和管理更简单
  • 您可以使用 Kubernetes RBAC 来控制对 Calico 资源的访问
  • 您可以使用 Kubernetes 审核日志记录来生成 Calico 资源更改的审核日志

为了完整起见,使用 etcd 作为数据存储的优点是:

  • 允许您在非 Kubernetes 平台(例如 OpenStack)上运行 Calico
  • 允许分离 Kubernetes 和 Calico 资源之间的关注点,例如允许您独立扩展数据存储
  • 允许您运行包含多个 Kubernetes 集群的 Calico 集群,例如,具有 Calico 主机保护的裸机服务器与 Kubernetes 集群或多个 Kubernetes 集群联动。

创建单主机 Kubernetes 集群

按照 Kubernetes 说明安装 kubeadm
安装kubeadm后,请勿断电或重启主机。相反,直接继续下一步。
作为具有 sudo 权限的普通用户,在安装 kubeadm 的主机上打开一个终端。
使用以下命令初始化控制平面。
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
如果 192.168.0.0/16 已在您的网络中使用,您必须选择不同的 Pod 网络 CIDR,替换上述命令中的 192.168.0.0/16。

安装calico

  1. 安装 Tigera Calico operator 和自定义资源定义。
    kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
    由于 CRD 包较大,kubectl apply 可能会超出请求限制。相反,请使用 kubectl create 或 kubectl replacement。

  2. 通过创建必要的自定义资源来安装 Calico。有关此清单中可用配置选项的更多信息,请参阅安装参考。
    kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/custom-resources.yaml

  3. 使用以下命令确认所有 Pod 都在运行。
    watch kubectl get pods -n calico-system

  4. 删除控制平面上的污点,以便您可以在其上调度 Pod。
    kubectl taint nodes --all node-role.kubernetes.io/control-plane-

  5. 使用以下命令确认集群中现在有一个节点。
    kubectl get nodes -o wide

恭喜!您现在拥有一个带有 Calico 的单主机 Kubernetes 集群。

安装calicoctl

本指南帮助您安装 calicoctl 命令行工具来管理 Calico 资源并执行管理功能。
要使用 Calico 的许多功能,需要 calicoctl 命令行工具。它用于管理 Calico 策略和配置,以及查看详细的集群状态。

概念

API 组

所有 Kubernetes 资源都属于一个 API 组。 API 组由资源的 apiVersion 指示。例如,Calico使用projectcalico.org/v3 API组中的资源进行配置,而operator使用operator.tigera.io/v1 API组中的资源。

calicoctl and kubectl

要管理projectcalico.org/v3 API 组中的Calico API,您应该使用calicoctl。这是因为 calicoctl 为这些资源提供了重要的验证和默认设置,而 kubectl 中不提供这些资源。但是,kubectl 仍应用于管理其他 Kubernetes 资源。
如果您想使用 kubectl 管理projectcalico.org/v3 API 资源,您可以使用 Calico API 服务器。

警告
切勿直接修改 crd.projectcalico.org API 组中的资源。
这些是内部数据表示,直接修改它们可能会导致意外的行为。
除了资源管理之外,calicoctl 还支持其他 Calico 管理任务,例如查看 IP 池利用率和 BGP 状态。

数据存储

Calico 对象存储在两个数据存储之一中:etcd 或 Kubernetes。数据存储的选择是在安装 Calico 时确定的。通常,对于 Kubernetes 安装,Kubernetes 数据存储是默认值。
您可以在任何具有对 Calico 数据存储的网络访问权限的主机上运行 calicoctl 作为二进制文件或容器。有关分步说明,请参阅与您所需的部署相对应的部分。

开始安装

确保您始终安装与集群上运行的 Calico 版本相匹配的 calicoctl 版本。

  • Install calicoctl as a binary on a single host
  • Install calicoctl as a kubectl plugin on a single host
  • Install calicoctl as a container on a single host

Install calicoctl as a binary on a single host

  1. 登录主机,打开终端提示符,然后导航到要安装二进制文件的位置。考虑导航到您的 PATH 中的位置。例如,/usr/local/bin/。
  2. 使用以下命令下载 calicoctl 二进制文件。
    curl -L https://github.com/projectcalico/calico/releases/download/v3.28.0/calicoctl-linux-amd64 -o calicoctl
  3. 将文件设置为可执行。
chmod +x ./calicoctl

Install calicoctl as a kubectl plugin on a single host

  1. 登录主机,打开终端提示符,然后导航到要安装二进制文件的位置。考虑导航到您的 PATH 中的位置。例如,/usr/local/bin/。
  2. 使用以下命令下载 calicoctl 二进制文件。
    curl -L https://github.com/projectcalico/calico/releases/download/v3.28.0/calicoctl-linux-amd64 -o kubectl-calico
  3. 将文件设置为可执行。
    chmod +x kubectl-calico
  4. 验证插件是否有效。
    kubectl calico -h
    您现在可以通过 kubectl calico 运行任何 calicoctl 子命令

Install calicoctl as a container on a single host

要将 calicoctl 作为容器安装在单个主机上,请登录到目标主机并发出以下命令。
docker pull calico/ctl:v3.28.0

配置 calicoctl

了解如何为集群配置 calicoctl CLI 工具,calicoctl CLI 工具提供了与 Calico 集群交互的有用管理命令。

calicoctl 与 kubectl

在以前的版本中,calicoctl 需要管理projectcalico.org/v3 API 组中的Calico API 资源。 calicoctl CLI 工具提供了对这些 API 的重要验证和默认设置。 在较新的版本中,Calico API 服务器在服务器端执行默认设置和验证,公开相同的 API 语义,而不依赖于 calicoctl。因此,我们建议安装 Calico API 服务器并使用 kubectl 而不是 calicoctl 来执行大多数操作。
以下子命令仍然需要 calicoctl:

  • calicoctl node
  • calicoctl ipam
  • calicoctl convert
  • calicoctl version
    对于 OpenStack 等非 Kubernetes 平台,也需要 calicoctl。

默认 calicoctl行为

大多数 calicoctl 命令需要访问 Calico 数据存储。默认情况下,calicoctl 将尝试根据默认的 kubeconfig 读取 Kubernetes API。

使用配置文件配置访问

默认情况下,calicoctl 将在 /etc/calico/calicoctl.cfg 中查找配置文件。您可以使用 --config 选项以及需要数据存储访问的命令来覆盖此设置。该文件可以是 YAML 或 JSON 格式。它必须有效且可由 calicoctl 读取。例如:

apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: "etcdv3"
  etcdEndpoints: "http://etcd1:2379,http://etcd2:2379"
  ...

使用环境变量配置访问如果

calicoctl 无法定位、读取或访问配置文件,它将检查一组特定的环境变量。 请参阅与您的数据存储类型相对应的部分,了解完整的选项和示例。

  • Kubernetes API datastore
  • etcd datastore
    在容器内运行 calicoctl 时,任何环境变量和配置文件都必须传递到容器,以便内部进程可以使用它们。为数据存储配置一个正在运行的容器(处于睡眠状态)是很有用的,然后就可以在容器中执行并拥有一个已配置的环境。
    配置 calicoctl 连接到 etcd 数据存储
    配置文件示例
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  etcdEndpoints: https://etcd1:2379,https://etcd2:2379,https://etcd3:2379
  etcdKeyFile: /etc/calico/key.pem
  etcdCertFile: /etc/calico/cert.pem
  etcdCACertFile: /etc/calico/ca.pem

包含内联 CA 证书、客户端证书和密钥的示例配置文件

apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: etcdv3
  etcdEndpoints: 'https://127.0.0.1:2379'
  etcdCACert: |
    -----BEGIN CERTIFICATE-----
    MIICKzCCAZSgAwIBAgIBAzANBgkqhkiG9w0BAQQFADA3MQswCQYDVQQGEwJVUzER
    MA8GA1UEChMITmV0c2NhcGUxFTATBgNVBAsTDFN1cHJpeWEncyBDQTAeFw05NzEw
    MTgwMTM2MjVaFw05OTEwMTgwMTM2MjVaMEgxCzAJBgNVBAYTAlVTMREwDwYDVQQK
    EwhOZXRzY2FwZTENMAsGA1UECxMEUHViczEXMBUGA==
    -----END CERTIFICATE-----
  etcdCert: |
    -----BEGIN CERTIFICATE-----
    gI6iLXgMsp2EOlD56I6FA1jrCtNb01XQvX3eyFuA6g5T1jWGYBDtvQb0WRVkdUy9
    L/uK+sHQwtloCSuakcQAsWV9bajCQtHX8XGu25Yz56kpJ/OJjcishxT6pc/sthum
    A5PX739JsNUi/p5aG+H/6eNx+ukJP7QaM646YCfS5i8S9DJUvim+/BSlKi2ZiOCd
    0MYH4Xb7lmAOTNmTvSYpKo9J2fZ9erw0MYSBTyjh6F7PRbHBiivgUnJfGQ==
    -----END CERTIFICATE-----
  etcdKey: |
    -----BEGIN RSA PRIVATE KEY-----
    k0dWj16h9P6TvfcNl2iwT4VIwx0uy2faWBED1DrCJcuQCy5nPrts2ZIaAWPi1t3t
    VbDKQvs+KXBEeqh0qYcYkejUXqIF0uKUFLjiQmZssjpL5RHqqWuYKbO87n+Jod1L
    TjGRHdbP0zF2U0LdjM17rc2hpJ3qrmgJ7pOLzbXMcOr+NP1ojRCArXhQ4iLs7D8T
    eHw9QH4luJYtnmk7x03izLMQdLWcKnUbqh/xOVPyazgJHXwRxwNXpMsBVGY=
    -----END RSA PRIVATE KEY-----

使用环境变量的示例
ETCD_ENDPOINTS=http://myhost1:2379 calicoctl get bgppeers
使用 etcd DNS 发现的示例
ETCD_DISCOVERY_SRV=example.com calicoctl get nodes
使用 IPv6 的示例
创建一个监听 IPv6 本地主机 [::1] 的单节点 etcd 集群。
etcd --listen-client-urls=http://[::1]:2379 --advertise-client-urls=http://[::1]:2379
使用etcd IPv6集群:
ETCD_ENDPOINTS=http://[::1]:2379 calicoctl get bgppeers
使用混合 IPv4/IPv6 的示例

etcd --listen-client-urls=http://[::1]:2379,http://127.0.0.1:2379 --advertise-client-urls=http://[::1]:2379

calico/node

需要注意的是,calicoctl 不仅会直接在主机上使用指定的密钥来访问 etcd,它还会传递这些环境变量并将密钥卷挂载到已启动的 calico-node 容器中。 因此,通过正确设置参数运行 calicoctl node run 即可轻松为 etcd 配置 calico/node 。

检查配置

这是一个简单的命令来检查安装和配置是否正确。
calicoctl get nodes
正确的设置将产生已注册节点的列表。如果返回空列表,则您要么指向错误的数据存储,要么没有注册节点。如果返回错误,则尝试更正问题,然后重试。
配置 calicoctl 以连接到 Kubernetes API 数据存储
了解如何为 Kubernetes 集群配置 calicoctl CLI 工具。 calicoctl CLI 工具提供了与 Calico 集群交互的有用管理命令。

默认配置

默认情况下,calicoctl 将尝试使用位于 $(HOME)/.kube/config 的默认 kubeconfig 读取 Kubernetes API。 如果默认的 kubeconfig 不存在,或者您想指定备用 API 访问信息,您可以使用以下配置选项来执行此操作。
Kubernetes 命令行
DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl get nodes
配置文件示例

apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: 'kubernetes'
  kubeconfig: '/path/to/.kube/config'

使用环境变量的示例

export DATASTORE_TYPE=kubernetes
export KUBECONFIG=~/.kube/config
calicoctl get workloadendpoints

并使用 CALICO_ 前缀名称:

export CALICO_DATASTORE_TYPE=kubernetes
export CALICO_KUBECONFIG=~/.kube/config
calicoctl get workloadendpoints

使用多个 kubeconfig 文件:

export DATASTORE_TYPE=kubernetes
export KUBECONFIG=~/.kube/main:~/.kube/auxy
calicoctl get --context main workloadendpoints
calicoctl get --context auxy workloadendpoints

检查配置
这是一个简单的命令来检查安装和配置是否正确。
calicoctl get nodes

calicoctl 用户参考

命令行工具 calicoctl 可以轻松管理 Calico 网络和安全策略以及其他 Calico 配置。 资源定义部分描述了可管理的资源的完整列表,包括每个资源的描述。
calicoctl 命令行界面提供了许多资源管理命令,允许您创建、修改、删除和查看不同的 Calico 资源。本节是 calicoctl 的命令行参考,根据命令层次结构组织。
运行 calicoctl --help 以显示顶级 calicoctl 命令的以下帮助菜单。

Usage:
  calicoctl [options] <command> [<args>...]

    create    Create a resource by file, directory or stdin.
    replace   Replace a resource by file, directory or stdin.
    apply     Apply a resource by file, directory or stdin.  This creates a resource
              if it does not exist, and replaces a resource if it does exists.
    patch     Patch a pre-existing resource in place.
    delete    Delete a resource identified by file, directory, stdin or resource type and
              name.
    get       Get a resource identified by file, directory, stdin or resource type and
              name.
    label     Add or update labels of resources.
    convert   Convert config files between different API versions.
    ipam      IP address management.
    node      Calico node management.
    version   Display the version of calicoctl.

Options:
  -h --help               Show this screen.
  -l --log-level=<level>  Set the log level (one of panic, fatal, error,
                          warn, info, debug) [default: panic]
  --context=<context>       The name of the kubeconfig context to use.
  --allow-version-mismatch  Allow client and cluster versions mismatch.

Description:
  The calicoctl command line tool is used to manage Calico network and security
  policy, to view and manage endpoint configuration, and to manage a Calico
  node instance.

  See 'calicoctl <command> --help' to read about a specific subcommand.

Calico 和 calicoctl 的版本应该相同,如果版本不匹配,对 calicoctl 的调用将失败。如果需要,可以使用 --allow-version-mismatch 参数来覆盖它。
有关 calicoctl 命令的详细信息,请参阅下面按顶级命令组织的链接文档。

  • calicoctl create
  • calicoctl replace
  • calicoctl apply
  • calicoctl patch
  • calicoctl delete
  • calicoctl get
  • calicoctl label
  • calicoctl convert
  • calicoctl ipam
  • calicoctl node
  • calicoctl version

修改低级组件配置

更新低级别 Felix 或 BGP 设置(FelixConfiguration 和 BGPConfiguration 资源类型):

  1. 使用 calicoctl get -o yaml --export > config.yaml 获取适当的资源并将 yaml 输出存储在文件中。
  2. 修改保存的资源文件。 使用 apply 或 Replace 命令更新资源:calicoctl replacement -f config.yaml。

支持的资源定义别名

下表列出了使用 calicoctl 时支持的 Calico 资源别名。请注意,所有别名都不区分大小写。

calicoctl create

本节介绍 calicoctl create 命令,运行 calicoctl create --help 以显示该命令的以下帮助菜单。

示例
  1. 使用 resources.yaml 中的数据创建一组资源(混合类型)。
    calicoctl create -f ./resources.yaml
  2. 创建从标准输入读取的同一组资源。
    cat resources.yaml | calicoctl create -f -

结果表明失败,因为第一个资源(在本例中为配置文件)已存在。
Failed to create any resources: resource already exists: Profile(name=profile1)

选项

-f --filename=<FILENAME>  Filename to use to create the resource.  If set to
                          "-" loads from stdin.
   --skip-exists          Skip over and treat as successful any attempts to
                          create an entry that already exists.
-n --namespace=<NS>       Namespace of the resource.
                          Only applicable to NetworkPolicy and WorkloadEndpoint.
                          Uses the default namespace if not specified.
-c --config=<CONFIG>      Path to the file containing connection
                          configuration in YAML or JSON format.
                          [default: /etc/calico/calicoctl.cfg]    

资源定义

本节介绍可以通过 calicoctl 或 kubectl 管理的有效资源类型集。 虽然资源可能以 YAML 或 JSON 格式提供,但本指南提供了 YAML 格式的示例。
资源结构概览
用于资源管理的 calicoctl 命令(创建、应用、删除、替换、获取)都将资源清单作为输入。 每个清单可以包含单个资源(例如配置文件资源)或多个资源的列表(例如配置文件和两个 hostEndpoint 资源)。 单个资源的总体结构如下:

apiVersion: projectcalico.org/v3
kind: <type of resource>
metadata:
  # Identifying information
  name: <name of resource>
  ...
spec:
  # Specification of the resource
  ...

支持以下资源,详细信息参考官方文档

  • BGPConfiguration
  • BGPPeer
  • FelixConfiguration
  • GlobalNetworkPolicy
  • GlobalNetworkSet
  • HostEndpoint
  • IPPool
  • NetworkPolicy
  • NetworkSet
  • Node
  • Profile
  • WorkloadEndpoint

参考链接

标签:kubectl,calicoctl,Kubernetes,--,入门教程,API,Calico
From: https://www.cnblogs.com/llwhrbust/p/18201322

相关文章

  • k8s安装网络组件calico报错Init:ImagePullBackOff
    问题:安装网络组件calico报错Init:ImagePullBackOff[root@k8s-master15:33:08~/kubernets]#kubectlgetpods-nkube-systemNAMEREADYSTATUSRESTARTSAGEcalico-kube-controllers......
  • MinIO入门教程
    是什么?MinIO是一种高性能、S3兼容的对象存储。它是为大规模AI/ML、数据湖和数据库工作负载。它是软件定义的并在任何云或本地基础设施上运行。MinIO具有双重许可根据开源GNUAGPLv3和商业企业许可证特点简单简单性是百亿亿次数据基础设施的基础——无论是技术上......
  • PyTorch深度学习快速入门教程
    PyTorch深度学习快速入门教程一、基础知识1.1Python学习中的两大法宝1.2pycharm以及jupyter使用及对比将环境写入Notebook的kernel中:python-mipykernelinstall--user--name环境名称--display-name"Python(环境名称)"打开Jupyternotebook,新建Python文件,这时候......
  • Python入门教程(三)
    数据类型str(字符串)Python中最常用的数据类型就是字符串,其用途也很多,我们可以使用单引号‘’或者双引号“”来创建字符串。字符串是不可修改的。关于字符我们从创建、索引、切片、长度、遍历、删除、分割、清除空白、大小写转换、判断以等方面对字符串进行介绍。 Int(数字......
  • Android Studio简单入门教程
    1.建立项目首先点击new——newproject新建项目选择想要创建的Android的模板,建议选择emptyactivity(空模板),然后nextName:给你的项目起一个名字APIlevel:选择Android虚拟机的版本,版本越低运行起来越快剩下的就按默认的就行,点击finish(由于版本不一样,步骤2和步骤3的顺序......
  • React Hooks 入门教程【阮一峰】
    组件类的缺点React的核心是组件。早前版本,组件的标准写法是类。//一个简单的组件类importReact,{Component}from"react";exportdefaultclassButtonextendsComponent{constructor(){super();this.state={buttonText:"Clickme,please"};......
  • calico配置报错 kubelet.go:2855] "Container runtime network not ready"
    前言配置calico网络插件时,kubectlgetnode报错:NoReadykubectldescribenodenodeName:nodeRoles:<none>Labels:beta.kubernetes.io/arch=amd64beta.kubernetes.io/os=linuxkub......
  • CMake 入门教程
    什么是CMake你或许听过好几种Make工具,例如 GNUMake ,QT的 qmake ,微软的 MSnmake,BSDMake(pmake),Makepp,等等。这些Make工具遵循着不同的规范和标准,所执行的Makefile格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果......
  • .NET Emit 入门教程:第六部分:IL 指令:8:详解 ILGenerator 指令方法:类型转换指令
    前言:经过前面几篇的学习,我们了解到指令的大概分类,如:参数加载指令,该加载指令以 Ld开头,将参数加载到栈中,以便于后续执行操作命令。参数存储指令,其指令以St开头,将栈中的数据,存储到指定的变量中,以方便后续使用。创建实例指令,其指令以New开头,用于在运行时动态生成并初始化对......
  • .NET Emit 入门教程:第六部分:IL 指令:7:详解 ILGenerator 指令方法:分支条件指令
    前言:经过前面几篇的学习,我们了解到指令的大概分类,如:参数加载指令,该加载指令以 Ld开头,将参数加载到栈中,以便于后续执行操作命令。参数存储指令,其指令以St开头,将栈中的数据,存储到指定的变量中,以方便后续使用。创建实例指令,其指令以New开头,用于在运行时动态生成并初始化对......