当前位置: 首页 > article >正文

在现有 Docker Desktop 环境下安装与配置独立 Kubernetes环境(Mac)

在现有 Docker Desktop 环境下安装与配置独立 Kubernetes 集群环境

目标

  1. 在已安装Docker Desktop自带Kubernetes的情况下,搭建一个独立 Kubernetes 集群环境。
  2. 配置独立的 kubectl 工具,使其默认管理独立的 Kubernetes 集群。
  3. 保留 Docker Desktop 的 Kubernetes 环境,确保与独立环境互不干扰。
  4. 实现多个 Kubernetes 环境之间的灵活切换。

一、前提条件

在开始之前,请确保满足以下条件:

  1. 已安装 Docker Desktop,并启用了 Docker Desktop 的 Kubernetes 功能(如果需要)。

  2. 操作系统为 macOS,并已安装 Homebrew(包管理工具)。

  3. 系统工具检查

    • 确保 curlbrew 可用:
      curl --version
      brew --version
      
  4. 注意 Docker Desktop 的 kubectl 工具
    默认情况下,Docker Desktop 自带的 kubectl 工具位于 /usr/local/bin,并通过软链接指向 Docker Desktop 安装目录。如果希望安装独立的 kubectl 工具并避免冲突,可以通过重命名 Docker 的 kubectl 来解决。


二、重命名 Docker 的 kubectl

为了让独立安装的 kubectl 成为默认管理工具,同时保留 Docker Desktop 的 Kubernetes 功能,我们需要将 Docker 自带的 kubectl 软链接重命名为 kubectl-docker

步骤

  1. 重命名 Docker 的 kubectl

    sudo mv /usr/local/bin/kubectl /usr/local/bin/kubectl-docker
    

    此操作不会删除 Docker Desktop 的 kubectl,而是将其重命名,以便后续使用。

  2. 验证重命名是否成功:

    ls -l /usr/local/bin/kubectl-docker
    

    输出应类似如下:

    lrwxr-xr-x  1 root  wheel  55B 12  9  2021 /usr/local/bin/kubectl-docker -> /Applications/Docker.app/Contents/Resources/bin/kubectl
    

至此,我们已经完成了重命名 Docker 的 kubectl,避免其与独立安装的 kubectl 工具产生冲突。


三、安装独立的 kubectl 工具

kubectl 是 Kubernetes 的核心命令行工具,用于管理 Kubernetes 集群。
安装命令
在 macOS 系统上安装和设置 kubectl


四、安装 Kubernetes 集群

根据需求选择以下几种常用的 Kubernetes 本地集群工具之一:

方案 1:使用 Minikube

Minikube 是一个轻量级工具,用于在本地快速启动单节点 Kubernetes 集群,适合开发和测试用途。
Minikube使用

安装步骤
  1. 安装 Minikube:

    brew install minikube
    
  2. 启动 Minikube 集群:

    minikube start
    

    默认情况下,Minikube 使用 Docker 作为容器运行时。如果需要其他运行时(如 containerdCRI-O),可以通过以下方式启动:

    minikube start --container-runtime=containerd
    
  3. 验证 Minikube 集群是否成功启动:

    kubectl config get-contexts
    

    输出应包含 minikube 的上下文:

    CURRENT   NAME       CLUSTER    AUTHINFO    NAMESPACE
              minikube   minikube   minikube
    
  4. 设置 kubectl 使用 Minikube 的上下文:

    kubectl config use-context minikube
    
  5. 验证 Kubernetes 节点状态:

    kubectl get nodes
    

    应看到 Minikube 的节点状态为 Ready


方案 2:使用 Kind

Kind(Kubernetes IN Docker)是一种使用 Docker 容器构建 Kubernetes 集群的工具,非常适合多节点集群的模拟。
kind使用

安装步骤
  1. 安装 Kind:

    brew install kind
    
  2. 创建 Kind 集群:

    kind create cluster
    

    如果需要多节点集群,可以使用以下配置文件创建集群:

    cat <<EOF > kind-config.yaml
    kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    nodes:
      - role: control-plane
      - role: worker
      - role: worker
    EOF
    kind create cluster --config kind-config.yaml
    
  3. 验证 Kind 集群是否成功启动:

    kubectl cluster-info --context kind-kind
    

    输出应显示集群的控制平面和服务地址。

  4. 切换到 Kind 集群的上下文:

    kubectl config use-context kind-kind
    
  5. 验证节点状态:

    kubectl get nodes
    

方案 3:使用 kubeadm 安装(适合更接近生产的环境)

kubeadm 是 Kubernetes 官方提供的工具,用于快速部署一个多节点的 Kubernetes 集群。
你可以选择在虚拟机或者裸金属机器上安装 Kubernetes,配置 kubeadm 初始化集群。

<--------- 待更新 --------->


五、在多个 Kubernetes 环境之间切换

Docker Desktop 和独立安装的 Kubernetes 可以共存,你可以灵活切换它们的上下文。

  1. 切换到 Docker Desktop 的上下文:

    kubectl-docker config use-context docker-desktop
    
  2. 切换到 Minikube 的上下文:

    kubectl config use-context minikube
    
  3. 切换到 Kind 的上下文:

    kubectl config use-context kind-kind
    
  4. 查看当前使用的上下文:

    kubectl config current-context
    

六、验证 Kubernetes 环境

为了确保 Kubernetes 工作正常,可以部署一个简单的示例应用。

  1. 部署示例 Deployment:

    kubectl create deployment hello-world --image=nginx
    
  2. 查看 Pod 状态:

    kubectl get pods
    
  3. 暴露服务端口:

    kubectl expose deployment hello-world --type=NodePort --port=80
    
  4. 获取服务的 NodePort:

    kubectl get svc
    
  5. 如果使用 Minikube,可以通过以下命令获取 Minikube 的 IP 地址:

    minikube ip
    

    然后访问 http://<minikube-ip>:<NodePort>,应看到 NGINX 默认页面。


七、总结

本文内容:

  1. 安装独立的 Kubernetes 集群(如 Minikube 或 Kind)。
  2. 配置独立的 kubectl 工具,并避免与 Docker Desktop 冲突。
  3. 实现多个 Kubernetes 环境(如 Minikube、Kind 和 Docker Desktop)之间的自由切换。
  4. 验证 Kubernetes 环境运行正常,并部署了示例应用。

http://www.kler.cn/a/514368.html

相关文章:

  • Swift语言的数据结构
  • PIC单片机设置bootloader程序和app程序地址方法
  • RV1126+FFMPEG推流项目(8)AENC音频编码模块
  • Java-数据结构-二叉树习题(2)
  • 前端 window.print() 打印图片
  • 大模型 | AI驱动的数据分析:利用自然语言实现数据查询到可视化呈现
  • MySQL的备份还原
  • [深度学习]多层神经网络
  • 图片专栏——概念
  • 管道符、重定向与环境变量
  • LeetCode:3097. 或值至少为 K 的最短子数组 II(滑动窗口 Java)
  • element UI的日期选择器固定日期变色
  • GD32F303 GCC 环境搭建
  • 2025展望:“安全计算”平价时代加速到来,数据流通产业兴起
  • 期权懂|你了解场内期权和场外期权的区别吗?
  • Windows 服务程序实现鼠标模拟
  • 【头歌】Scrapy爬虫(二)热门网站数据爬取
  • 【Vim Masterclass 笔记22】S09L40 + L41:同步练习11:Vim 的配置与 vimrc 文件的相关操作(含点评课内容)
  • 【2024 博客之星评选】请继续保持Passion
  • EXCEL+Python搞定数据处理(第一部分:Python入门-第2章:开发环境)
  • C语言程序设计十大排序—冒泡排序
  • vim文本编辑器
  • Leetcode:2239
  • 卸载和安装Git小乌龟、git基本命令
  • npm install 报错:Command failed: git checkout 2.2.0-c
  • 自然语言处理(NLP)领域相关模型概述