kubernetes-helm程序包管理器

helm概述

Helm是Kubernetes的包管理器,Helm 让我们能够像 yum 管理 rpm 包那样安装、部署、升级和删除容器化应用。

Helm的核心术语:
  • Chart:一个helm程序包,是创建一个应用的信息集合,包含各种Kubernetes对象的配置模板、参数定义、依赖关系、文档说明等。可以将Chart比喻为yum中的软件安装包;
  • Repository:Charts仓库,用于集中存储和分发Charts;
  • Config:应用程序实例化安装运行时所需要的配置信息;
  • Release:特定的Chart部署于目标集群上的一个实例,代表这一个正在运行的应用。当chart被安装到Kubernetes集群,就会生成一个release,chart可以多次安装到同一个集群,每次安装都是一个release。
Helm的程序架构:

Helm主要由Helm客户端、Tiller服务器和Charts仓库组成:

  • helm:客户端,GO语言编写,实现管理本地的Chart仓库,可管理Chart,与Tiller服务进行交互,用于发送Chart,实例安装、查询、卸载等操作。
  • Tiller:服务端,通常运行在K8S集群之上。用于接收helm发来的Charts和Conifg,合并生成release,完成部署。

简单的说:Helm 客户端负责管理 chart;Tiller 服务器负责管理 release。

helm部署

部署文档:https://helm.sh/docs/using_helm/#quickstart-guide

下载:https://github.com/helm/helm/releases

[[email protected] ~]# wget https://get.helm.sh/helm-v2.14.1-linux-amd64.tar.gz
[[email protected] ~]# tar xf helm-v2.14.1-linux-amd64.tar.gz
[[email protected]-master ~]# mv linux-amd64/helm /usr/local/bin/

[[email protected]-master ~]# cat helm-service-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
[[email protected]-master ~]# kubectl apply -f helm-service-account.yaml
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller created

[[email protected]-master ~]# helm init --tiller-image gcr.azk8s.cn/kubernetes-helm/tiller:v2.14.1 --skip-refresh --service-account tiller
[[email protected]-master ~]# kubectl get pod -n kube-system |grep tiller
tiller-deploy-6b6bcb8f7c-pbnnc       1/1     Running   0          49s

[[email protected] ~]# helm versionClient: &version.Version{SemVer:"v2.14.1", GitCommit:"5270352a09c7e8b6e8c9593002a73535276507c0", GitTreeState:"clean"}Server: &version.Version{SemVer:"v2.14.1", GitCommit:"5270352a09c7e8b6e8c9593002a73535276507c0", GitTreeState:"clean"}
helm的使用
helm常用命令:
- helm search:    搜索charts
- helm fetch:     下载charts到本地目录
- helm install:   安装charts
- helm list:      列出charts的所有版本

用法:
  helm [command]

命令可用选项:
  completion  为指定的shell生成自动补全脚本(bash或zsh)
  create      创建一个新的charts
  delete      删除指定版本的release
  dependency  管理charts的依赖
  fetch       下载charts并解压到本地目录
  get         下载一个release
  history     release历史信息
  home        显示helm的家目录
  init        在客户端和服务端初始化helm
  inspect     查看charts的详细信息
  install     安装charts
  lint        检测包的存在问题
  list        列出release
  package     将chart目录进行打包
  plugin      add(增加), list(列出), or remove(移除) Helm 插件
  repo        add(增加), list(列出), remove(移除), update(更新), and index(索引) chart仓库
  reset       卸载tiller
  rollback    release版本回滚
  search      关键字搜索chart
  serve       启动一个本地的http server
  status      查看release状态信息
  template    本地模板
  test        release测试
  upgrade     release更新
  verify      验证chart的签名和有效期
  version     打印客户端和服务端的版本信息
Charts

官方可用的Chart列表:https://hub.kubeapps.com

Charts是Helm的程序包,它们都存在在Charts仓库当中。Kubernetes官方的仓库保存了一系列的Charts,仓库默认的名称为stable。安装Charts到集群时,Helm首先会到官方仓库获取相关的Charts,并创建release。可执行 helm search 查看当前可安装的 chart 。

[[email protected] ~]# helm search
NAME                                     CHART VERSION    APP VERSION                     DESCRIPTION
stable/acs-engine-autoscaler             2.2.2            2.1.1                           DEPRECATED Scales worker nodes within agent pools
stable/aerospike                         0.2.8            v4.5.0.5                        A Helm chart for Aerospike in Kubernetes
stable/airflow                           3.0.2            1.10.3                          Airflow is a platform to programmatically author, schedul...
helm仓库

Helm 安装时已经默认配置好了两个仓库:stablelocalstable 是官方仓库,local 是用户存放自己开发的chart的本地仓库。可以通过helm repo list进行查看。

由于网络原因,国内无法更新仓库源,这里更改为阿里云的仓库源。

[[email protected] ~]# helm repo list
NAME      URL
stable    https://kubernetes-charts.storage.googleapis.com
local     http://127.0.0.1:8879/charts
[[email protected] ~]# helm repo remove stable
"stable" has been removed from your repositories
[[email protected]-master ~]# helm repo list
NAME     URL
local    http://127.0.0.1:8879/charts
[[email protected] ~]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"stable" has been added to your repositories
[[email protected]-master ~]# helm repo list
NAME      URL
local     http://127.0.0.1:8879/charts
stable    https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[[email protected] ~]# helm repo updateHang tight while we grab the latest from your chart repositories......Skip local chart repository...Successfully got an update from the "stable" chart repositoryUpdate Complete.
安装mysql chart
[[email protected] ~]# helm search mysql
NAME                             CHART VERSION    APP VERSION    DESCRIPTION
stable/mysql                     0.3.5                           Fast, reliable, scalable, and easy to use open-source rel...
stable/percona                   0.3.0                           free, fully compatible, enhanced, open source drop-in rep...
stable/percona-xtradb-cluster    0.0.2            5.7.19         free, fully compatible, enhanced, open source drop-in rep...
stable/gcloud-sqlproxy           0.2.3                           Google Cloud SQL Proxy
stable/mariadb                   2.1.6            10.1.31        Fast, reliable, scalable, and easy to use open-source rel...

[[email protected] ~]# helm install stable/mysql
NAME:   vigilant-clownfish
LAST DEPLOYED: Thu Jun 27 14:21:37 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/PersistentVolumeClaim
NAME                      STATUS   VOLUME  CAPACITY  ACCESS MODES  STORAGECLASS  AGE
vigilant-clownfish-mysql  Pending  7s

==> v1/Pod(related)
NAME                                       READY  STATUS   RESTARTS  AGE
vigilant-clownfish-mysql-757ff9c4fd-2jh58  0/1    Pending  0         4s

==> v1/Secret
NAME                      TYPE    DATA  AGE
vigilant-clownfish-mysql  Opaque  2     7s

==> v1/Service
NAME                      TYPE       CLUSTER-IP  EXTERNAL-IP  PORT(S)   AGE
vigilant-clownfish-mysql  ClusterIP  10.0.0.26   <none>       3306/TCP  5s

==> v1beta1/Deployment
NAME                      READY  UP-TO-DATE  AVAILABLE  AGE
vigilant-clownfish-mysql  0/1    1           0          5s

NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
vigilant-clownfish-mysql.default.svc.cluster.local

To get your root password run:

    MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default vigilant-clownfish-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)

To connect to your database:

1. Run an Ubuntu pod that you can use as a client:

    kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il

2. Install the mysql client:

    $ apt-get update && apt-get install mysql-client -y

3. Connect using the mysql cli, then provide your password:
    $ mysql -h vigilant-clownfish-mysql -p

To connect to your database directly from outside the K8s cluster:
    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306

    # Execute the following commands to route the connection:
    export POD_NAME=$(kubectl get pods --namespace default -l "app=vigilant-clownfish-mysql" -o jsonpath="{.items[0].metadata.name}")
    kubectl port-forward $POD_NAME 3306:3306

    mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}

安装 chart,Helm 支持四种安装方法:

  1. 安装仓库中的 chart,例如:helm install stable/nginx
  2. 通过 tar 包安装,例如:helm install ./nginx-1.2.3.tgz
  3. 通过 chart 本地目录安装,例如:helm install ./nginx
  4. 通过 URL 安装,例如:helm install https://example.com/charts/nginx-1.2.3.tgz
删除
[[email protected] ~]# helm list
NAME                  REVISION    UPDATED                     STATUS      CHART          APP VERSION    NAMESPACE
vigilant-clownfish    1           Thu Jun 27 14:21:37 2019    DEPLOYED    mysql-0.3.5                   default
[[email protected] ~]# helm delete vigilant-clownfish
release "vigilant-clownfish" deleted
chart 目录结构

chart 是 Helm 的应用打包格式。chart 由一系列文件组成,这些文件描述了 Kubernetes 部署应用时所需要的资源,比如 Service、Deployment、PersistentVolumeClaim、Secret、ConfigMap 等。

单个的 chart 可以非常简单,只用于部署一个服务,比如 Memcached;chart 也可以很复杂,部署整个应用,比如包含 HTTP Servers、 Database、消息中间件、cache 等。

chart 将这些文件放置在预定义的目录结构中,通常整个 chart 被打成 tar 包,而且标注上版本信息,便于 Helm 部署。

以前面 MySQL chart 为例。一旦安装了某个 chart,我们就可以在 ~/.helm/cache/archive 中找到 chart 的 tar 包。

[[email protected] ~]# cd .helm/cache/archive/
[[email protected] archive]# ll
total 8
-rw-r--r-- 1 root root 5536 Jun 27 14:21 mysql-0.3.5.tgz
[[email protected] archive]# tar xf mysql-0.3.5.tgz
[[email protected] archive]# tree mysql
mysql
├── Chart.yaml
├── README.md
├── templates
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── NOTES.txt
│   ├── pvc.yaml
│   ├── secrets.yaml
│   └── svc.yaml
└── values.yaml
  • Chart.yaml:YAML 文件,描述 chart 的概要信息。
  • README.md:Markdown 格式的 README 文件,相当于 chart 的使用文档,此文件为可选。
  • LICENSE:文本文件,描述 chart 的许可信息,此文件为可选。
  • requirements.yaml :chart 可能依赖其他的 chart,这些依赖关系可通过 requirements.yaml 指定。
  • values.yaml:chart 支持在安装的时根据参数进行定制化配置,而 values.yaml 则提供了这些配置参数的默认值。
  • templates目录:各类 Kubernetes 资源的配置模板都放置在这里。Helm 会将 values.yaml 中的参数值注入到模板中生成标准的 YAML 配置文件。
  • templates/NOTES.txt:chart 的简易使用文档,chart 安装成功后会显示此文档内容。 与模板一样,可以在 NOTE.txt 中插入配置参数,Helm 会动态注入参数值。
自定义chart

Kubernetes 给我们提供了大量官方 chart,不过要部署微服务应用,还是需要开发自己的 chart

[[email protected] ~]# helm create mychart
Creating mychart
[[email protected] ~]# tree mychart/
mychart/
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

Helm 会帮我们创建目录 mychart,并生成了各类 chart 文件。这样我们就可以在此基础上开发自己的 chart 了。

调试chart

只要是程序就会有 bug,chart 也不例外。Helm 提供了 debug 的工具:helm lint 和 helm install --dry-run --debug

[[email protected] ~]# helm lint mychart
==> Linting mychart
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, no failures

#helm install --dry-run --debug会模拟安装 chart,并输出每个模板生成的 YAML 内容。[[email protected] ~]# helm install --dry-run mychart --debug[debug] Created tunnel using local port: ‘31734‘

[debug] SERVER: "127.0.0.1:31734"

[debug] Original chart version: ""[debug] CHART PATH: /root/mychart

NAME:   invited-joeyREVISION: 1RELEASED: Thu Jun 27 14:53:04 2019CHART: mychart-0.1.0USER-SUPPLIED VALUES:{}

COMPUTED VALUES:affinity: {}fullnameOverride: ""image:  pullPolicy: IfNotPresent  repository: nginx  tag: stableimagePullSecrets: []ingress:  annotations: {}  enabled: false  hosts:  - host: chart-example.local    paths: []  tls: []nameOverride: ""nodeSelector: {}replicaCount: 1resources: {}service:  port: 80  type: ClusterIPtolerations: []

HOOKS:---# invited-joey-mychart-test-connectionapiVersion: v1kind: Podmetadata:  name: "invited-joey-mychart-test-connection"  labels:    app.kubernetes.io/name: mychart    helm.sh/chart: mychart-0.1.0    app.kubernetes.io/instance: invited-joey    app.kubernetes.io/version: "1.0"    app.kubernetes.io/managed-by: Tiller  annotations:    "helm.sh/hook": test-successspec:  containers:    - name: wget      image: busybox      command: [‘wget‘]      args:  [‘invited-joey-mychart:80‘]  restartPolicy: NeverMANIFEST:

---# Source: mychart/templates/service.yamlapiVersion: v1kind: Servicemetadata:  name: invited-joey-mychart  labels:    app.kubernetes.io/name: mychart    helm.sh/chart: mychart-0.1.0    app.kubernetes.io/instance: invited-joey    app.kubernetes.io/version: "1.0"    app.kubernetes.io/managed-by: Tillerspec:  type: ClusterIP  ports:    - port: 80      targetPort: http      protocol: TCP      name: http  selector:    app.kubernetes.io/name: mychart    app.kubernetes.io/instance: invited-joey---# Source: mychart/templates/deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:  name: invited-joey-mychart  labels:    app.kubernetes.io/name: mychart    helm.sh/chart: mychart-0.1.0    app.kubernetes.io/instance: invited-joey    app.kubernetes.io/version: "1.0"    app.kubernetes.io/managed-by: Tillerspec:  replicas: 1  selector:    matchLabels:      app.kubernetes.io/name: mychart      app.kubernetes.io/instance: invited-joey  template:    metadata:      labels:        app.kubernetes.io/name: mychart        app.kubernetes.io/instance: invited-joey    spec:      containers:        - name: mychart          image: "nginx:stable"          imagePullPolicy: IfNotPresent          ports:            - name: http              containerPort: 80              protocol: TCP          livenessProbe:            httpGet:              path: /              port: http          readinessProbe:            httpGet:              path: /              port: http          resources:            {
打包

打包形成一个tgz文件,估计是每个项目一个chart,对应一个tgz

[[email protected] ~]# helm package mychart
Successfully packaged chart and saved it to: /root/mychart-0.1.0.tgz

Chart Package的集中管理和存放

上面我们是从本地的目录结构中的chart去进行部署,如果要集中管理chart,就需要涉及到repository的问题,因为helm repository都是指到外面的地址,接下来我们可以通过minio建立一个企业私有的存放仓库。

Minio提供对象存储服务。它的应用场景被设定在了非结构化的数据的存储之上了。众所周知,非结构化对象诸如图像/音频/视频/log文件/系统备份/镜像文件…等等保存起来管理总是不那么方便,size变化很大,类型很多,再有云端的结合会使得情况更加复杂,minio就是解决此种场景的一个解决方案。Minio号称其能很好的适应非结构化的数据,支持AWS的S3,非结构化的文件从数KB到5TB都能很好的支持。

Minio的使用比较简单,只有两个文件,服务端minio,客户访问端mc,比较简单。

在项目中,我们可以直接找一台虚拟机作为Minio Server,提供服务,当然minio也支持作为Pod部署。

安装配置Minio

在https://dl.minio.io/client/mc/release/linux-amd64/ 下载客户端程序mc和服务端程序minio

启动minio服务
[[email protected] ~]# minio server ./repository

 针对使用得客户端加入security和token信息
[[email protected] ~]# ./mc config host add myminio http://192.168.0.225:9000 HF42ZU340MX6DPWZ426P YVkjGIEALDI8ZcaLyJYq5oNVWdkVwTUN0w3pYQB+

创建一个bucket同时设置权限
[[email protected] ~]# ./mc mb myminio/minio-helm-repo
Bucket created successfully `myminio/minio-helm-repo`.
[[email protected] ~]# ./mc policy download myminio/minio-helm-repo
Access permission for `myminio/minio-helm-repo` is set to `download`

将之前的tgz package上传minio
[[email protected] ~]# ./mc cp mychart-0.1.0.tgz myminio/minio-helm-repo

#index.yaml为了让helm对里面的包进行索引,找到各种entry,每个entry是一个项目,每个项目对应一个chart Package[[email protected] ~]# cat index.yaml apiVersion: v1entries:  hello-svc:  - apiVersion: v1    description: Distributed object storage server built for cloud applications and  devops.    digest: 8440f6f064ed91a75194e77d4b2be99c491c1cb04fb34bca4a36a5be67e1ef2c    name: mychart    urls:    - http://192.168.0.225:9000/minio-helm-repo/mychart-0.1.0.tgz    version: 0.1.0[[email protected] ~]# ./mc cp ./index.yaml myminio/minio-helm-rep

浏览器访问minio的界面

在helm中加入repository
[[email protected] ~]# helm repo add myrepo http://192.168.0.225:9000/minio-helm-repo
"myrepo" has been added to your repositories
[[email protected] ~]# helm repo list
NAME      URL
local     http://127.0.0.1:8879/charts
stable    https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
myrepo    http://192.168.0.225:9000/minio-helm-repo
[[email protected] ~]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "myrepo" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete.

原文地址:https://www.cnblogs.com/yuezhimi/p/11096234.html

时间: 2024-09-30 04:54:13

kubernetes-helm程序包管理器的相关文章

rpm程序包管理器详解

1. 程序包管理器的功能 我们知道,由程序员编写并提供的程序源代码要转换成目标二进制格式才能在计算机上运行起来,但用户要在平台上使用时需要手动编译安装后才能使用,对于普通用户来说有一定难度.因此为了降低普通用户对应用程序的使用难度,程序员可在提供源代码的同时提供已在特定环境下编译好的程序文件,只要用户的平台环境和程序员的平台环境相同,就可以通过解压程序员提供的二进制格式文件即可使用,而无需自己手动编译安装. 一个已编译好的程序由二进制程序.库文件.配置文件和帮助手册等组成,而程序包管理器的功能就

程序包管理器(上)

一个编译好的二进制程序应用文件的组成部分有二进制文件.库文件.配置文件.帮助文件,用户在安装时设置繁琐,而且在用户升级.卸载等操作时更为麻烦.为了提升使用效率及自动简化操作,这就迫在眉睫的需要有一款程序包管理器.. 程序包管理器的主要功能它到底有哪些呢?它的主要功能是将编译好的应用程序的各组成文件打包一个或多个程序包文件,从而方便快捷地实现程序包的安装.卸载.查询.升级和校验等管理操作.而现在主要有四种主流的程序包管理器:(1)Debian开发的程序包管理器,程序包管理器叫做dpt程序包管理器,

善用 NuGet 程序包管理器控制台

每种集成开发环境都会提供扩展包的下载与安装,VS (微软可视化集成开发环境) 下的叫程序包管理控制台,我们把他叫做<牛干 程序包管理控制台>. 在 工具=>NuGet 程序包管理器=> 程序包管理控制台,打开命令窗口. 这两条命令必学必会 PM> Install-Package 包 [-参数]PM> UnInstall-Package 包 [-参数] 参数可选(指定版本号或项目名) PM> Install-Package Microsoft.AspNet.Mvc

linux程序包管理之rpm程序包管理器与yum前端工具

这里主要讲以CentOS为例,rpm程序包管理器的相关内容: CentOS的程序包管理器:   1) 程序包的命名规则:        源代码包:            software_name-VERSION.tar.gz            VERSION:major.minor.release                major:主版本号,通常代表重大功能改进的版本分支:                minor:次版本号,通常代表在某个版本的分支中的某个功能发生变化:     

linux之程序包管理器(rpm)

linux下的程序包可支持多种工具编写的,如C.C++.PERL等. 但是这种高级语言编写出来的代码是我们人能看懂的,但是计算机是看不懂的,那么计算机怎么执行,怎么了解人要它做什么呢? 这就需要我们做一些转换了,把人能读懂的语言让机器也能识别,这个过程就是由编译器完成的,通常是吧代码语言转换成二进制语言. 过程:预处理.编译.汇编.链接 一个程序的运行大部分时间是离不开库的. 什么是库呢?库也是一种程序,只不过与其他程序不同,库没有执行入口,不能独立运行,只能被其他独立运行的程序调用的时候才能执

程序包管理的前端工具yum、程序包管理器编译安装、sed命令

下面介绍的是程序包管理的前端工具yum.程序包管理器编译安装.sed命令. 一.Linux程序包管理:程序包管理的[前端工具] 1.yum软件包仓库简介 CentOS系的管理工具有yum和dnf.yum是一款发行版的Linux,其使用的默认程序包管理工具为rpm. URL是yum定位软件包仓库和仓库中程序文件的主要标识方式,表示如下: 例如:schema://[[email protected]]hostname/PATH/TO/DOCUMENT[paramers][methord] (例子中的

CentOS程序包管理器rpm、yum以及程序包编译安装详解

一.程序包管理器RPM和Yum简介 程序包管理器:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,可以更方便地实现程序包的安装.升级.卸载和查询等管理操作. rpm软件包管理器(RPM Package Manager):rpm包存在依赖关系,依赖关系复杂,安装时间很长,虽然可以忽略依赖关系,但是可能会导致程序包安装后无法正常使用. yum程序包管理器( Yellow dog Updater, Modified):yum是基于RPM包管理,自动解决程序包间的依赖关系.根据配置文件的资源地

Linux的程序包管理器(上)——rpm详解

在使用Linux操作系统的过程中,我们需要的一些服务(例如Nginx)并没有提供,需要用户自行安装相应的程序包,才能使用相应的服务.本文以CentOS6.6为例,分三小节为读者朋友们尽可能详细的讲解rpm.yum以及程序包的编译安装三种程序包的管理方法. rpm rpm包管理工具是Red Hat公司贡献的一款rpm程序包管理器,在RHEL.CentOS.Fedora.SUSE等主流发行版本中,被广泛使用. rpm包管理工具可用于安装,升级,卸载,重新安装程序:也可以用于查询当前系统上安装了哪些程

RHEL系统程序包管理器【rpm、yum】

程序包管理器 将编译好的文件打包成一个或有限的几个文件,可用于实现便捷的安装.卸载.升级.查询,校验等程序管理. centos常用的程序管理器有rpm和yum rpm: redhat package manager, RPM is Package Manager rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装.查询.卸载.升级等工作.但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时. RPM包的命名 例如,bash-4.3.2-1.ce

VS2013中Nuget程序包管理器控制台使用入门(一)-准备环境

准备环境: 1.打开VS2013IDE集成开发环境. 2.新建一个Asp.net Mvc的项目,比如命名为:MvcApplication1 3.打开 菜单"工具"->"库程序包管理器"->"程序包管理器控制台",然后在VS工作区域的右下方会出现一个”程序包管理器控制台“命令操作台. 4.在命令行状态下,出现命令提示符:PM>,在这里,你就可以输入Cmllet命令来安装,卸载类库啦 敬请期待下期 nuget 官方帮助文档http: