k3d中安装nginx并通过宿主机访问服务

k3d可以在docker中快速建立一个k3s集群,用于本地学习或开发k3s都非常方便,结合kubecm,我们就可以在开发环境和生产环境中快速切换。本文的前提是您已经安装好docker和k3d,并能正常的建立k3s集群。

1、通过以下命令建立一个名为k3s-dev的集群,并做端口映射。

k3d create -n k3s-dev -w 3 --publish 8081:80 --api-port 8443 -i rancher/k3s:v1.18.8-k3s1 -v /Users/kevinmeng/k3d/k3s-airgap-images-amd64-v1.18.8-k3s1/:/var/lib/rancher/k3s/agent/images/

注意这里我用的是本地镜像,如果不用本地镜像,没有梯子的话集群建立的时候有可能会一直出于CreateContainer状态。

2、建好集群后看看集群中的pod是否都能正常运行

kevinmeng@MacBook-Pro k8dash % kubectl get pod -A
NAMESPACE     NAME                                     READY   STATUS      RESTARTS   AGE
kube-system   coredns-7944c66d8d-gxnst                 1/1     Running     0          52m
kube-system   metrics-server-7566d596c8-k9x8l          1/1     Running     0          52m
kube-system   local-path-provisioner-6d59f47c7-kkgbp   1/1     Running     0          52m
kube-system   helm-install-traefik-l549b               0/1     Completed   0          52m
kube-system   svclb-traefik-frm27                      2/2     Running     0          40m
kube-system   svclb-traefik-bwfnp                      2/2     Running     0          40m
kube-system   svclb-traefik-qbgxk                      2/2     Running     0          40m
kube-system   svclb-traefik-kwmvg                      2/2     Running     0          40m
kube-system   traefik-758cd5fc85-779vj                 1/1     Running     0          40m

3、部署nginx

kubectl create deployment nginx --image=nginx

4、创建service

kubectl create service clusterip nginx --tcp=80:80

5、创建一个ingress.yaml文件,内容如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 80

 

应用一下kubectl apply -f ingress.yaml

6、浏览器中输入http://localhost:8081即可访问nginx了。

<think>好的,用户现在问的是k3d是什么。之前他们问过如何在Docker中模拟K8s环境,我之前介绍了Kind、Minikube和k3d这几个工具。现在用户可能对k3d产生了兴趣,想深入了解。 首先,我需要回忆之前提到的k3d的信息,之前提到k3d是基于k3s的,适合快速搭建多节点环境,专为边缘计算优化。用户可能是在比较不同的工具后,想确认k3d的具体用途和优势。 接下来,我需要确定用户的使用场景。他们可能是在寻找一个轻量级的K8s环境,用于本地开发或测试,特别是需要快速启动和销毁集群的情况。也有可能用户对边缘计算或IoT项目感兴趣,因为k3s本身是为资源有限的环境设计的。 用户可能没有明确说明,但潜在的需求可能包括如何快速上手k3d,或者它与其他工具如Kind的区别。需要详细说明k3d的特点,比如基于k3s、轻量级、多节点管理等,同时提供实际的操作步骤,方便用户尝试。 还要注意用户可能遇到的问题,比如安装步骤中的常见错误,或者如何管理集群的配置。需要涵盖安装、基本使用、优缺点以及适用场景,帮助用户全面了解k3d是否适合他们的需求。 另外,需要对比k3d和之前提到的Kind,指出各自的适用场景,比如Kind更适合本地CI/CD,而k3d适合边缘计算和多节点测试。这样用户可以根据自己的项目需求做出选择。 最后,要确保回答结构清晰,分点说明,包括定义、原理、安装步骤、使用示例、优缺点和适用场景,让用户能够一步步理解和应用k3d。同时,保持语言简洁,避免技术术语过多,必要时提供代码示例和命令,方便用户实际操作。</think>以下是关于 **k3d** 的详细介绍: --- ### 一、k3d 是什么? **k3d** 是一个基于轻量级 Kubernetes 发行版 **[k3s](https://k3s.io/)** 的工具,用于在 **Docker 容器中快速创建和管理 Kubernetes 集群**。其核心目标是简化本地开发、测试环境的搭建,特别适合需要模拟多节点场景或边缘计算(Edge Computing)的场景。 --- ### 二、核心原理 1. **底层依赖** - 基于 **k3s**(Rancher 开发的轻量级 Kubernetes,去除了非必需组件如传统 Docker、alpha 功能等)。 - 使用 **Docker 容器** 虚拟化 Kubernetes 节点(每个节点对应一个容器)。 2. **轻量化设计** - k3s 本身仅需 **40MB 内存**即可运行,k3d 进一步通过容器化实现秒级集群创建。 - 默认使用 **containerd** 替代完整 Docker,减少资源消耗。 3. **网络与存储** - 自动创建 Docker 网络,确保节点间互联。 - 支持通过卷挂载(Volume)实现持久化存储。 --- ### 三、核心功能 | 功能 | 说明 | |-----------------------|----------------------------------------------------------------------| | **快速创建集群** | 单命令启动多节点集群(支持 Master/Worker 节点自定义) | | **镜像预加载** | 无需拉取远程镜像,可直接将本地 Docker 镜像加载到集群 | | **端口映射** | 自动暴露 Service 端口到宿主机,方便本地访问 | | **集群配置管理** | 支持自定义 k3s 参数、Ingress 控制器、网络插件等 | | **与 kubectl 集成** | 自动生成 `kubeconfig` 文件,无缝对接 Kubernetes 命令行工具 | --- ### 四、安装与使用 #### 步骤 1:安装 k3d ```bash # Linux/macOS curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash # Windows(通过 Chocolatey) choco install k3d # 验证安装 k3d --version ``` #### 步骤 2:创建集群 ```bash # 创建单节点集群(默认名称:k3s-default) k3d cluster create # 创建多节点集群(1 Master + 2 Worker) k3d cluster create my-cluster --servers 1 --agents 2 # 查看集群列表 k3d cluster list ``` #### 步骤 3:部署应用 ```bash # 部署 Nginx kubectl create deployment nginx --image=nginx:alpine kubectl expose deployment nginx --port=80 # 查看节点和 Pod kubectl get nodes kubectl get pods -o wide ``` #### 步骤 4:访问服务 ```bash # 自动映射 Service 端口到宿主机 kubectl port-forward svc/nginx 8080:80 # 浏览器访问 http://localhost:8080 ``` --- ### 五、进阶操作 #### 1. 自定义集群配置 通过 YAML 文件定义集群参数(例如:`k3d-config.yaml`): ```yaml apiVersion: k3d.io/v1alpha4 kind: Simple name: custom-cluster servers: 1 agents: 2 ports: - port: 8080:80 # 宿主机端口:容器端口 nodeFilters: - loadbalancer options: k3s: extraArgs: # 传递参数给 k3s - arg: --disable=traefik nodeFilters: - server:* ``` 启动集群: ```bash k3d cluster create --config k3d-config.yaml ``` #### 2. 镜像预加载 ```bash # 将本地 Docker 镜像直接加载到集群 docker pull nginx:latest k3d image import nginx:latest -c my-cluster ``` #### 3. 持久化存储 ```bash # 启动集群时挂载宿主机目录 k3d cluster create my-vol-cluster --volume /宿主机目录:/容器目录 ``` --- ### 六、优缺点分析 #### **优点**: - **极速启动**:3 秒内启动一个集群。 - **资源占用低**:单节点仅需 100MB 内存。 - **多节点支持**:轻松模拟生产级多节点拓扑。 - **边缘计算友好**:基于 k3s,天然适配 IoT/边缘场景。 #### **缺点**: - **非标准 Kubernetes**:部分原生 k8s 功能在 k3s 中被简化。 - **网络限制**:复杂网络策略需手动配置。 - **存储依赖宿主机**:持久化卷需绑定宿主机目录。 --- ### 七、适用场景 1. **本地开发测试**:快速验证 Deployment、Service 等配置。 2. **CI/CD 流水线**:集成到 GitLab CI、Jenkins 等工具中运行自动化测试。 3. **边缘计算实验**:模拟低资源环境下的 Kubernetes 行为。 4. **教育培训**:低成本演示多节点集群操作。 --- ### 八、与其他工具对比 | 工具 | 启动速度 | 资源消耗 | 多节点支持 | 适用场景 | |--------|----------|----------|------------|------------------------| | k3d | ⚡️ 极快 | ⚖️ 极低 | ✅ 完善 | 边缘计算、快速测试 | | Kind | ⚡️ 快 | ⚖️ 低 | ✅ 支持 | 本地开发、CI/CD | | Minikube| 🐢 较慢 | ⚖️ 高 | ❌ 单节点 | 学习入门 | --- 通过 k3d,开发者可以快速获得一个 **轻量、功能完整、低成本** 的 Kubernetes 沙盒环境,尤其适合需要频繁创建/销毁集群的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值