Kubernetes的几种主流部署方式01-minikube部署

2023-05-16

综述

Kubernetes集群的组件众多,要部署一套符合生产环境的集群不是一件容易的事。好在随着社区的快速发展,特别是在它成为事实上的容器编排标准以后,基本所有的主流云平台都完全支持Kubernetes,或把它作为核心的云解决方案。同时,本地部署也出现了各类成熟的主动化解决方案,特别是Kubeadm,在最新的1.13版本已经官方GA了,也就是完全可以用在生产环境中了。这些云服务或自动化工具都大大减少了Kubernetes的部署难度,让运维力量不足的小型公司也能快速的搭建出可用的Kubernetes生产环境。

Kubernetes部署方案对比

Kubernetes官方文档中,总共列出了5大类,不下30种的Kubernetes安装方式。不说别的,单从数量来说,就可以看出当前Kubernetes生态的包容性和目前其他各类平台对它的技术支持有多强。文档中把部署方案分为以下几类:

  • Local-machine Solutions
    可以理解为单机版的Kubernetes,非常适合入门Kubernetes学习或测试使用。代表的解决方案为Minikube。
  • Hosted Solutions
  • Turnkey – Cloud Solutions
  • Turnkey – On-Premises Solutions
    这三种方式可以放在一块说,他们都是基于云服务商提供的解决方案,区别如下:

Hosted方式是指云服务商搭建的一套公共的Kubernetes,用户直接使用就好了,集群的搭建、管理、运维等操作全部都由云服务商提供,用户只要专注于自己的应用开发,不用关注集群的运维。这种解决方案特别适合小开发团队或小型公司,不仅省去了自有硬件的维护成本,连系统运维人员都可以不用了。

Turnkey–Cloud Solutions指云服务商帮忙搭建了Kubernetes Master节点,并负责维护其可用性,用户可以自定义Node节点加入集群,可以根据具体需求灵活并只用关注Node节点的维护

Turnkey–On-Premises Solutions方案是指包括Master节点和Node节点都由用户配置及维护,灵活性最高,但资源成本和运维成本也最高。
但不管上述哪种方式,云服务商都已经把Kubernetes做了一层包装,用户可以用简单的几个命令就可以部署Kubernetes集群,不需要从头开始一步步安装。

这三种不同的解决方案,阿里云的文档容器服务Kubernetes集群三种形态对比介绍的很清楚,可以对比着理解:

在这里插入图片描述

其中,Serverless对应Hosted Solution,托管版对应Turnkey – Cloud Solution,专有版对应Turnkey – On-Premises Solution。

  • Custom Solutions
    Custom安装方式顾名思义,是完全由用户自己安装维护Kubernetes,集群服务器和部署、配置、运维都由用户自己完成。这种方案灵活度最高,相对的,付出的硬件成本和部署、维护成本也最高。这里的服务器可以是类似EC2、ECS这种云主机,也可以是本地服务器、虚拟机等,甚至基于ARM的嵌入式硬件目前也能运行Kubernetes。Custom方式也是一般大公司在生产环境使用Kubernetes的最佳选择,一方面,大公司运维、开发团队人员完善,可以独立部署和运维Kubernetes集群,并且还可以根据自己的需求进行二开,整合Kubernetes容器部署、日志、监控等,打造出适合公司业务的容器平台。另一方面,很多公司考虑容器化业务的出发点之一就是可以优化公司现有的硬件资源,把原来跑物理服务器或虚拟机的业务迁移到容器平台上来,以提高自有硬件资源利用率及节省成本。现阶段,Custom部署方式除了一步步编译并部署、配置各组件,还可以通过Kubeadmin简单快速的部署出生产可用的集群。

虽然官网列出的Kubernetes部署方式很多,但也不用被这么多种部署方式搞糊涂了。所有Kubernetes集群,都少不了关键的基础组件。(参考Kubernetes概念与术语中的组件部分),不同的部署方式,无非是这些组件由云服务商部署好了,用户只要使用集群就好(Host 或 Turnkey方案),或着被做成容器运行以方便快速部署和管理(Minicube、Kubeadm等)。

Minikube 部署

简介

Minikube是由Kubernetes社区维护的单机版的Kubernetes集群,支持macOS, Linux, and Windows等多种操作系统平台,使用最新的官方stable版本,并支持Kubernetes的大部分功能,从基础的容器编排管理,到高级特性如负载均衡、Ingress,权限控制等。非常适合作为Kubernetes入门,或开发测试环境使用。Minikube实际是跑在本地的虚拟机中的,所以,需要先安装一套Hypervisor。这里以VirtualBox为例。

部署步骤

环境

  • OS:macOS Mojave
  • Hypervisor:VirtualBox 6.0

Minikube的诞生的初衷就是为了能快速部署一个单机Kubernetes集群,所以,整个部署非常简单,就2条命令搞定:

brew cask install minikube
minikube start

brew cask install直接从官方下载了minikube程序,并加入环境变量。minikube start虽然只是一条命令,但其实执行了很多步骤,命令执行后输出如下:

$ minikube start
o   minikube v0.35.0 on darwin (amd64)
>   Creating virtualbox VM (CPUs=2, Memory=2048MB, Disk=20000MB) ...
-   "minikube" IP address is 192.168.99.100
-   Configuring Docker as the container runtime ...
-   Preparing Kubernetes environment ...
@   Downloading kubeadm v1.13.4
@   Downloading kubelet v1.13.4
-   Pulling images required by Kubernetes v1.13.4 ...
-   Launching Kubernetes v1.13.4 using kubeadm ... 
:   Waiting for pods: apiserver proxy etcd scheduler controller addon-manager dns
-   Configuring cluster permissions ...
-   Verifying component health .....
+   kubectl is now configured to use "minikube"
=   Done! Thank you for using minikube!

可以看到,minikube start主要做了这些事:

  1. 创建了名为minikube的虚拟机,并在虚拟机中安装了Docker容器运行时。(实际就是Docker-machine)
  2. 下载了Kubeadm与Kubelet工具
  3. 通过Kubeadm部署Kubernetes集群
  4. 进行各组件间访问授权、健康检查等工作
  5. 在用户操作系统安装并配置kubectl
    所以,minikube实际上是基于Kubeadm工具来部署Kubernetes的,我们通过minikube ssh命令可以进入部署的虚拟机中,看下里面在跑的容器:

在这里插入图片描述

有木有看到很多熟悉的身影,有Master节点的组件kube-apiserver、kube-scheduler、kube-controller、etcd 容器,以及Node节点的kube-proxy容器,还有些附加的组件比如Coredns等。没错,Kubeadm实际就是把Kubernetes各个组件都容器化了(除了kubelet),而minikube再用虚拟机把它们都跑在一起。关于Kubeadm,下一篇文章会详细再介绍。

集群测试

Minikube成功运行以后,就已经在用户操作系统中安装了kubectl,并将运行的集群变量设置为了minkube,可以通过*kubectl config view *命令查看当前的配置:

在这里插入图片描述
kubectl的作用集群已经被指定为minikube的虚拟机了。执行kubectl get node -o wide确认Kubernetes集群节点信息。

在这里插入图片描述
集群名称为minikube,只有一个master节点。

下面我们部署一个简单的goweb服务,该容器运行时会暴露8000端口,同时访问/info路径会显示容器的主机名。服务由3个容器实例构成,并且通过Nodeport方式暴露给用户。

// 创建一个名为goweb的Deployment,使用lingtony/goweb镜像,暴露8000端口,副本pod数为3
$ kubectl run goweb --image=lingtony/goweb  --port=8000 --replicas=3
// 查看创建的对象,可以看到已经有3个pod在运行了
$ kubectl get deployment 
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
goweb   3/3     3            3           2m59s
$ kubectl get po        
NAME                     READY   STATUS    RESTARTS   AGE
goweb-8559474b8c-rphcs   1/1     Running   0          3m2s
goweb-8559474b8c-wzvsl   1/1     Running   0          3m2s
goweb-8559474b8c-xxtlz   1/1     Running   0          3m2s
// 创建svc,通过Nodeport方式暴露服务
$ kubectl expose deployment goweb --name=gowebsvc --port=80  --target-port=8000  --type=NodePort
service/gowebsvc exposed
// 查看svc,可以看到NodePort随机分配的端口为31543
$ kubectl get svc            
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
gowebsvc     NodePort    10.108.29.53   <none>        80:31534/TCP   3s
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        7h58m

接下来,在用户操作系统就可以通过minikube虚拟机的ip地址:31543来访问这个gowebsvc了,gowebsvc会把80口的请求再负载均衡到实际的goweb pod上。更方便的,可以使用minikube server命令直接获取到svc的访问地址:

// 通过minikube server命令获取svc地址
$ minikube service gowebsvc  --url
http://192.168.99.100:31534
// 测试访问一下

在这里插入图片描述

可以看到,每次的访问请求是都进入不同的pod,与kubectl get po命令所示的pod一致。

开启Kubernetes dashboard

可以通过minikube dashboard命令直接开启dashboard

在这里插入图片描述
macOS会自动在你的默认浏览器打开,可以通过web查看和管理集群了。

在这里插入图片描述

小结

本文介绍了Kubernetes不同部署方式的区别,同时详细说明了minikube这个单节点Kubernetes工具的部署步骤、以及对部署后的集群做了简单测试。通过上面的部署分析可以看出,minikube的核心实际还是依靠kubeadm这个工具来部署集群的,后面的文章会介绍如何用Kubeadm部署一个多节点集群。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes的几种主流部署方式01-minikube部署 的相关文章

  • Python爬虫设置代理

    在Python中使用代理进行爬虫操作可以有效地隐藏用户的真实IP地址 xff0c 防止被封禁或者限制访问 下面是设置代理的示例代码 xff1a span class token keyword import span requests pr
  • Golang 网络爬虫框架gocolly

    Golang 是一门非常适合编写网络爬虫的语言 xff0c 它有着高效的并发处理能力和丰富的网络编程库 下面是一个简单的 Golang 网络爬虫示例 xff1a package main span class token keyword i
  • Python中txt中内容解析到json文件

    在instant ngp中通过调用scripts colmap2nerf py可以自动生成transforms json文件 xff0c 即相机参数 xff0c 但有时会从相机本身获取到这些参数 xff0c 为了将每个相机参数信息即txt内
  • 代理ip在爬虫中的应用

    代理IP在爬虫中的应用主要是为了解决以下两个问题 xff1a IP封禁问题 很多网站为了防止爬虫 xff0c 会对频繁访问的IP进行封禁 xff0c 这样就会导致爬虫无法继续访问 此时 xff0c 使用代理IP可以隐藏真实IP xff0c
  • 使用VNC远程服务器

    通常我们控制服务器都是通过ssh远程命令行 但是这次由于特殊需求需要进入服务器的图形界面进行操作 xff08 这台服务器安装的时候就是安装的gnome图形界面 xff0c 但是由于没有事先在服务器上安装向日葵等远程软件 xff0c 所以无法
  • 安卓adb命令大全

    安卓官方文档 xff1a https developer android google cn studio command line adb hl 61 zh cn ADB xff0c 即 Android Debug Bridge xff0
  • Python运维自动化psutil 模块详解(超级详细)

    psutil 模块 参考官方文档 xff1a https pypi org project psutil 一 psutil简介 psutil是一个开源且跨平台 xff08 http code google com p psutil xff0
  • 2021最强Python学习教程,从零基础入门到精通

    关于本套Python自学视频教程 xff1a B站链接 xff1a 戳我直达 千锤百炼 xff0c 只为大作 xff1b 精益求精 xff0c 处处斟酌 xff1b 这种教程 xff0c 看一眼就倾心 你准备好了吗 文章目录 你准备好了吗
  • 进程池(multiprocess.Pool)

    进程池 multiprocess Pool 一 进程池概念 1 什么是进程池 x1f449 进程池是资源进程 管理进程组成的技术的应用 2 为什么要有进程池 x1f62e 忙时会有成千上万的任务需要被执行 xff0c 闲时可能只有零星任务
  • 使用pip安装第三方模块报错,WARNING: You are using pip version 20.2.1; however, version 21.0.1 is available. You

    问题 xff1a 使用pip安装第三方模块报错 xff0c WARNING You are using pip version 20 2 1 however version 21 0 1 is available You should co
  • python小数据池,代码块的深入剖析

    python小数据池 xff0c 代码块的深入剖析 文章目录 python小数据池 xff0c 代码块的深入剖析一 id xff0c is xff0c 61 61 二 代码块三 代码块的缓存机制四 小数据池五 小结 一 id xff0c i
  • docker 之Dockerfile

    Docker 镜像构建之 Dockerfile 在 Docker 中构建镜像最常用的方式 xff0c 就是使用 Dockerfile Dockerfile 是一个用来构建镜像的文本文件 xff0c 文本内容包含了一条条构建镜像所需的指令和说
  • 项目开发的完整流程(详解版)

    项目开发的完整流程 前言 一般情况下 xff0c 企业开发软件时会按照基线和定制两块并行方式执行项目开发工作 无论什么公司 xff0c 都需要遵从一套成熟的产品研发过程体系 xff0c 才能做出质量较好的产品 因此 xff0c 如果出现项目
  • nerfstudio介绍及在windows上的配置、使用

    nerfstudio提供了一个简单的API xff0c 可以简化创建 训练和可视化NeRF的端到端过程 该库通过模块化每个组件来支持可解释的NeRF实现 nerfstudio源码地址 https github com nerfstudio
  • pip源

    02 pip源更换 前面已经介绍过pip软件包管理工具基本使用及换源 链接 一 国内常用镜像源 清华大学 xff1a https pypi tuna tsinghua edu cn simple 阿里云 xff1a http mirrors
  • mysql启动失败,报错:Job for mysqld.service failed

    无论安装多少次mysql xff0c 仍然会出现各种各样的错误 xff0c 无可奈何 xff0c 只能和mysql硬刚了 xff01 所以最好的解决方案是查看错误日志 xff0c 去解决懵逼的代码错误 错误如图所示 xff1a 百度了好久
  • linux 安装SQL Server 2019

    可以直接参考官方文档 xff1a https docs microsoft com zh cn sql linux quickstart install connect red hat view 61 sql server ver15 一
  • Go 数组与切片

    Go 数组与切片 一 数组 1 1 数组定义与基本语法 数组 是一个由 固定长度 的特定类型元素组成的序列 xff0c 一个数组可以由零个或多个元素组成 在Go语言中 xff0c 数组从声明时就确定 xff0c 使用时可以修改数组成员 xf
  • linux安装chrome以及驱动

    一 安装chrome 下载安装脚本 span class token function wget span https intoli com install google chrome sh 然后授予可执行权限 span class tok
  • ardupilot编译过程,通过makefile的形式编译,分析make px4-v2指令

    ardupilot编译过程 xff0c 通过makefile的形式编译 xff0c 分析make px4 v2指令 我们都知道平时用的编译命令是make px4 v2 但是为什么是这个呢 xff0c 这个命令是怎样执行的呢 xff0c 挑干

随机推荐

  • AVT工业相机Windows、Opencv开发——驱动相机(超详细)

    一 概述 1 1使用Vimba控制相机需要经历以下几个步骤 1 打开Vimba 2 查找相机列表 3 打开特定相机 4 配置参数 xff08 可选 xff09 5 采集 xff1a 采集过程共分为5步 xff0c 具体见1 2 6 关闭相机
  • python-opencv尺寸测量

    首先 xff0c 利用机器视觉来测定零件尺寸 xff0c 我们能够直接得到的是图片的像素 xff0c 要想获得尺寸大小 xff0c 我们必须找到像素和实际尺寸间的关系 我们在这里定义一个比例概念 xff1a 每度量比的像素 xff08 pi
  • Bounding box(bbox) 预测

    在出现Bounding box预测之前 xff0c 一般都是通过滑动窗口进行目标检测 本文前两部分介绍滑动窗口算法 xff0c 这样是为了更好介绍 bounding box如何引出 为了解决什么问题而引出的 也可直接跳跃到第三部分看有关bo
  • YOLOv3网络结构分析以及工作流程

    注意 xff1a 本文章有很多图 xff0c 但是都是YOLOv3的结构图 xff0c 只是每张图表达出的信息都各有特色 xff0c 可将这些结构图结合起来 xff0c 能更好的理解 1 Darknet 53 模型结构 在论文中虽然有给网络
  • Qt中QDebug的使用

    QDebug类为调试信息 debugging information 提供输出流 它的声明在 lt QDebug gt 中 xff0c 实现在Core模块中 将调试或跟踪信息 debugging or tracing information
  • Ubuntu18.04安装教程——超详细的图文教程

    电脑配置 xff1a 名称 xff1a Lenovo 拯救者Y7000P 处理器 xff1a i7 10750H 内存 xff1a 32G 固态 xff1a 1TB 显卡 xff1a RTX2060 6G 一 准备工作 本文以 Ubuntu
  • Ubuntu18.04启动后无法进入桌面修复方法(图文)

    引言 xff08 吐槽可略过 xff09 xff1a Ubuntu是应用广泛的Linux操作系统 xff0c 特别是在机器学习应用中 xff0c 通过调用NVIDIA显卡的GPU进行计算和研究的主要平台之一 但是由于NV显卡的存在 xff0
  • VINS-Course代码解析——run_euroc前端数据处理

    vins mono总框架如下 xff1a 主要分为三大块 xff1a 我们先从主函数 main 入手 xff1a 主函数中有三个线程 xff0c 读取完数据集和配置文件的路径后就会进入这三个线程 xff0c 如下图 xff1a thd Ba
  • Gazebo11的更新与安装

    Melodic自带的Gazebo版本过低 xff0c 建议升级 Gazebo安装见gazebo官网 需注意以下四点 删除gazebo9以及相关插件选用Alternative installation step by step的安装方式 xf
  • XTDrone目标检测

    编译Darkent ROS 方法一 xff1a xff08 推荐 xff09 直接clone xff0c 记得加 recurse submodules xff0c 防止文件缺失 cd span class token operator sp
  • C++求解N个数的最大公约数、最小公倍数

    一 2个数的最大公约数 span class token comment 辗转相除法 span span class token keyword int span span class token function gcd span spa
  • 子序列个数——动态规划

    题目 xff1a 统计一个字符串中全部不同的子序列的个数 思路 xff1a 动态规划求解 令 f i 61 前 i 个元素中包含的全部子序列的个数 那么状态转移方程分为下面两种情况 xff1a 当第 i 个元素在前面 i 1 个字符中没有出
  • 字符串中特定子序列出现的次数(动态规划)

    题目 xff1a 给定一个字符串 xff0c 求子序列 cwbc 出现的次数 思路 xff1a 动态规划 令 dp i j 表示前 i 个字符中匹配了字符串 cwbc 中前 j 位 xff08 j 61 1 2 3 4 xff09 的个数
  • VMware ubuntu虚拟机无法上网的解决办法(笔记本连接WIFI情况)

    文章目录 一 虚拟机网络配置 一 虚拟机网络配置 1 设置Ubuntu网络适配器的网络连接方式为NAT模式 2 还原虚拟机网络配置 还原一下默认设置 3 window网络适配器设置适配器允许网络共享 4 Ubuntu启用联网 xff0c 连
  • ubuntu在树梅派上之VNC

    启动vncserver vncserver span class token operator span geometry 1600x900 杀死第一个桌面 vncserver span class token operator span
  • Sourcetree介绍及使用

    Sourcetree是一个操作简单但功能强大的免费Git客户端管理工具 xff0c 可应用在Windows和Mac平台 Sourcetree的安装 xff1a 1 从Sourcetree Free Git GUI for Mac and W
  • javascript创建一个基于数组的栈结构

    栈是一种遵从后进先出 xff08 LIFO xff09 原则的有序集合 新添加或待删除的元素都保存在栈的同 一端 xff0c 称作栈顶 xff0c 另一端就叫栈底 在栈里 xff0c 新元素都靠近栈顶 xff0c 旧元素都接近栈底 栈拥有以
  • Ubuntu16.04+RealsenseT265跑通VINS-Fusion

    一 提前条件 系统版本 xff1a ubuntu16 04 43 ROS xff08 kinetic xff09 默认已经掌握了ubuntu系统下的基本命令以及ROS的基本操作 二 realsenseT265的SDK测试 官方网站https
  • Why Kubernetes ,我对Kubernetes的理解

    去年换工作后 xff0c 开始真正在生产环境中接触容器与Kubernetes 边恶补相关知识的同时 xff0c 也想把学到的内容和自己的理解整理出来 学习的途径包括k8s官方文档 书籍 极客时间专栏及网上各种博文 所涉及一些摘抄或描述 xf
  • Kubernetes的几种主流部署方式01-minikube部署

    综述 Kubernetes集群的组件众多 xff0c 要部署一套符合生产环境的集群不是一件容易的事 好在随着社区的快速发展 xff0c 特别是在它成为事实上的容器编排标准以后 xff0c 基本所有的主流云平台都完全支持Kubernetes