【k8s】搭建小巧完备的Kubernetes环境(minikube)

这篇具有很好参考价值的文章主要介绍了【k8s】搭建小巧完备的Kubernetes环境(minikube)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、什么是容器编排?

容器技术的核心概念是容器、镜像、仓库,使用这三大基本要素我们就可以轻松地完成应用的打包、分发工作,实现“一次开发,到处运行”的梦想。

不过,当我们熟练地掌握了容器技术,信心满满地要在服务器集群里大规模实施的时候,却会发现容器技术的创新只是解决了运维部署工作中一个很小的问题。现实生产环境的复杂程度实在是太高了,除了最基本的安装,还会有各式各样的需求,比如服务发现、负载均衡、状态监控、健康检查、扩容缩容、应用迁移、高可用等等。

虽然容器技术开启了云原生时代,但它也只走出了一小步,再继续前进就无能为力了,因为这已经不再是隔离一两个进程的普通问题,而是要隔离数不清的进程,还有它们之间互相通信、互相协作的超级问题,困难程度可以说是指数级别的上升。

这些容器之上的管理、调度工作,就是这些年最流行的词汇:“容器编排”(Container Orchestration)

容器编排这个词听起来好像挺高大上,但如果你理解了之后就会发现其实也并不神秘。像我们在上次课里使用 Docker 部署 WordPress 网站的时候,把 Nginx、WordPress、MariaDB 这三个容器理清次序、配好 IP 地址去运行,就是最初级的一种“容器编排”,只不过这是纯手工操作,比较原始、粗糙。

面对单机上的几个容器,“人肉”编排调度还可以应付,但如果规模上到几百台服务器、成千上万的容器,处理它们之间的复杂联系就必须要依靠计算机了,而目前计算机用来调度管理的“事实标准”,就是我们主角:Kubernetes。

二、什么是 Kubernetes

简单来说,Kubernetes 就是一个生产级别的容器编排平台和集群管理系统,不仅能够创建、调度容器,还能够监控、管理服务器,它凝聚了 Google 等大公司和开源社区的集体智慧,从而让中小型公司也可以具备轻松运维海量计算节点——也就是“云计算”的能力。

三、什么是 minikube

快速搭建Kubernetes 环境的工具(官网) 点我 >_< !

它是一个“迷你”版本的 Kubernetes,自从 2016 年发布以来一直在积极地开发维护,紧跟 Kubernetes 的版本更新,同时也兼容较旧的版本(最多只到之前的 6 个小版本)。minikube 最大特点就是“小而美”,可执行文件仅有不到 100MB,运行镜像也不过 1GB,但就在这么小的空间里却集成了 Kubernetes 的绝大多数功能特性,不仅有核心的容器编排功能,还有丰富的插件,例如 Dashboard、GPU、Ingress、Istio、Kong、Registry 等等,综合来看非常完善。

四、如何搭建 minikube 环境

minikube 支持 Mac、Windows、Linux 这三种主流平台,你可以在它的官网(https://minikube.sigs.k8s.io/docs/start/)找到详细的安装说明,当然在我这里就只用虚拟机里的 Linux 了。

minikube 不包含在系统自带的 apt/yum 软件仓库里,我们只能自己去网上找安装包。不过因为它是用 Go 语言开发的,整体就是一个二进制文件,没有多余的依赖,所以安装过程也非常简单,只需要用 curl 或者 wget 下载就行。
k8s 1.29,# k8s 入门实战,kubernetes,云原生,容器

注意:这里我下载v1.25.2版本的minikube 支持的k8s版本,支持的 Kubernetes 版本是 1.23.3,如果想要安装最新版本可以直接用releases版本 支持1.26版本的k8s

1.下载minikube并安装

# 根据服务器的架构选择对应的二进制包
# Intel x86_64
curl -Lo minikube https://storage.googleapis.com/minikube/v1.25.2/latest/minikube-linux-amd64
sudo install minikube /usr/local/bin/
# 最新版本 
# Intel x86_64
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube /usr/local/bin/

2.检测minikube是否正常安装

安装完成之后,你可以执行命令 minikube version,看看它的版本号,验证是否安装成功:

[root@k8s-minkube ~]# minikube version
minikube version: v1.25.2
commit: 362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7

k8s 1.29,# k8s 入门实战,kubernetes,云原生,容器

3.k8s命令客户端工具-kubectl

minikube 只能够搭建 Kubernetes 环境,要操作 Kubernetes,还需要另一个专门的客户端工具“kubectl”。
kubectl 它是一个命令行工具,作用也比较类似,同样是与 Kubernetes 后台服务通信,把我们的命令转发给 Kubernetes,实现容器和集群的管理功能。

kubectl 是一个与 Kubernetes、minikube 彼此独立的项目,所以不包含在 minikube 里,但 minikube 提供了安装它的简化方式,你只需执行下面的这条命令:

# minikube kubectl

它就会把与当前 Kubernetes 版本匹配的 kubectl 下载下来,存放在内部目录(例如 .minikube/cache/linux/amd64/v1.23.3),然后我们就可以使用它来对 Kubernetes“发号施令”了。

所以,在 minikube 环境里,我们会用到两个客户端:minikube 管理 Kubernetes 集群环境,kubectl 操作实际的 Kubernetes 功能,和 Docker 比起来有点复杂。

我画了一个简单的 minikube 环境示意图,方便理解它们的关系。
k8s 1.29,# k8s 入门实战,kubernetes,云原生,容器

4.实际验证 minikube 环境

前面的工作都做完之后,我们就可以在本机上运行 minikube,创建 Kubernetes 实验环境了。

注意:使用命令 minikube start 会从 Docker Hub 上拉取镜像,以当前最新版本的 Kubernetes 启动集群。不过为了保证实验环境的一致性,我们可以在后面再加上一个参数 --kubernetes-version,明确指定要使用 Kubernetes 版本。

这里我使用“1.23.3”,启动命令就是:
解释:--force 默认不允许用root安装,这个参数的意思是强制用root安装
--image-mirror-country='cn' 切换国内源,默认是拉取国外官方镜像可能会下载不下来,所以切换到国内

[root@k8s-minkube ~]# minikube start  --image-mirror-country='cn'  --kubernetes-version=v1.23.3 --force

如果想安装最新版本,新版本的k8s使用的是containerd作为容器,需要执行以下操作
minikube start --driver=docker --container-runtime=containerd --image-mirror-country='cn' --force
注意的是:新版本依赖的容器版本肯能会很高,版本参考建议,也可以去官网:
docker:23.0.1
minikube:1.29.0
kubectl:1.26.1

我这里已经提前下载过了
k8s 1.29,# k8s 入门实战,kubernetes,云原生,容器

4.1 查看集群状态

# 查看当前节点,因为单机所以只要一个节点
[root@k8s-minkube ~]# minikube node list
minikube	192.168.49.2

# 查看集群组件状态
[root@k8s-minkube ~]# minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

可以看到 Kubernetes 集群里现在只有一个节点,名字就叫“minikube”,类型是“Control Plane”,里面有 host、kubelet、apiserver 三个服务,IP 地址是 192.168.49.2。

你还可以用命令 minikube ssh 登录到这个节点上,虽然它是虚拟的,但用起来和实机也没什么区别:

[root@k8s-minkube ~]# minikube ssh
Last login: Sun Mar 19 12:21:24 2023 from 192.168.49.1
docker@minikube:~$ 

5.操作k8s集群

有了集群,接下来就可以使用 kubectl 来操作一下,初步体会 Kubernetes 这个容器编排系统,最简单的命令当然就是查看版本:

kubectl version

注意: 不过这条命令还不能直接用,因为使用 minikube 自带的 kubectl 有一点形式上的限制,要在前面加上 minikube 的前缀,后面再有个 --,像这样:

minikube kubectl -- version

为了避免这个不大不小的麻烦,我建议你使用 Linux 的“alias”功能,为它创建一个别名,写到当前用户目录下的 .bashrc 里,也就是这样:

echo "alias kubectl='minikube kubectl --'" >> $HOME/.bashrc

加载k8s命令自动补全功能

source <(kubectl completion bash)

操作完后就可以直接使用kubectl 操作了

[root@k8s-minkube ~]# kubectl version --short
Client Version: v1.23.3
Server Version: v1.23.3
[root@k8s-minkube ~]# kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.3", GitCommit:"816c97ab8cff8a1c72eccca1026f7820e93e0d25", GitTreeState:"clean", BuildDate:"2022-01-25T21:25:17Z", GoVersion:"go1.17.6", Compiler:"gc", Platform:"linux/amd64"}

k8s 1.29,# k8s 入门实战,kubernetes,云原生,容器

6.在k8s运行nginx应用

注意:需要用 --image 指定镜像,然后 Kubernetes 会自动拉取并运行

kubectl run ngx --image=nginx:alpine

这里涉及 Kubernetes 里的一个非常重要的概念:Pod,你可以暂时把它理解成是“穿了马甲”的容器,查看 Pod 列表需要使用命令 kubectl get pod,它的效果类似 docker ps:

[root@k8s-minkube ~]# kubectl get pod
NAME                     READY   STATUS      RESTARTS         AGE
ngx                      1/1     Running     0                8s

命令执行之后可以看到,在 Kubernetes 集群里就有了一个名字叫 ngx 的 Pod 正在运行,表示我们的这个单节点 minikube 环境已经搭建成功。

扩展知识:
1.1、如何理解容器编排?
先拆成两个部分,什么是容器?什么是编排?以前,程序运行在物理机或虚拟机中。容器,是现代程序的运行方式。编排就是部署、管理应用程序的系统,能动态地响应变化,例如以下部分功能。

  • 回滚
  • 滚动升级
  • 故障自愈
  • 自动扩缩容
    自动完成以上所有任务。需要人工最初进行一些配置,就可以一劳永逸。回顾一下,什么是容器编排,运行容器形式的应用程序,这些应用程序的构建方式,使它们能够实现回滚、滚动升级、故障自愈、自动扩缩容等。

1.2、如何理解 Kubernetes?
举一个例子,寄、收快递的过程。发件人将货物按照快递公司的标准打包,提供基本信息(收货地址等),然后交给快递小哥。其他事情,无需发件人操心了,例如快递用什么交通工具运输、司机走哪条高速等等。快递公司同时提供物流查询、截断快递等服务。重点在于,快递公司仅需要发件人提供基本信息。Kubernetes 也是类似的,将应用程序打包成容器,声明运行方式,交给 Kubernetes 即可,同时它提供了丰富的工具和 API 来控制、观测运行在平台之上的应用程序。

1.3 容器编排应该能够解决什么问题?
屏蔽底层的复杂性。

2、Kubernetes 和 Docker 之间有什么区别?
Docker 应用打包、测试、交付。Kubernetes 基于 Docker 的产物,进行编排、运行。例如现在有 1 个集群,3 个节点。这些节点,都以 Docker 作为容器运行时,Docker 是更偏向底层的技术。Kubernetes 更偏向上层的技术 ,它实现了对容器运行时的抽象,抽象的目的是兼容底层容器运行时(容器进行时技术不仅有 Docker,还有 containerd、kata 等,无论哪种容器运行时,Kubernetes 层面的操作都是一样的)以及解耦,同时还提供了一套容器运行时的标准。抽象的产物是容器运行时接口 CRI。文章来源地址https://www.toymoban.com/news/detail-788483.html

总结

  1. 容器技术只解决了应用的打包、安装问题,面对复杂的生产环境就束手无策了,解决之道就是容器编排,它能够组织管理各个应用容器之间的关系,让它们顺利地协同运行。
  2. Kubernetes 源自 Google 内部的 Borg 系统,也是当前容器编排领域的事实标准。minikube 可以在本机搭建 Kubernetes 环境,功能很完善,适合学习研究。
  3. 操作 Kubernetes 需要使用命令行工具 kubectl,只有通过它才能与 Kubernetes 集群交互。
  4. kubectl 的用法与 docker 类似,也可以拉取镜像运行,但操作的不是简单的容器,而是 Pod。

到了这里,关于【k8s】搭建小巧完备的Kubernetes环境(minikube)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s(Kubernetes)学习(二):k8s集群搭建

    minikube 只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起。 裸机安装 至少需要两台机器(主节点、工作节点个一台),需要自己安装 Kubernetes 组件,配置会稍微麻烦点。 缺点:配置麻烦,缺少生态支持,例如负载均衡器、云存储。 直接用

    2024年02月09日
    浏览(59)
  • Kubernetes(K8s)基本环境部署

    此处只做学习使用,配置单master环境。 1、ip+主机规划(准备五台新机)==修改各个节点的主机名 注意:关闭防火墙与selinux 节点 主机名 ip 身份 joshua1 kubernetes-master.openlab.cn 192.168.134.151 master joshua2 kubernetes-work1.openlab.cn 192.168.134.152 work1 joshua3 kubernetes-work2.openlab.cn 192.168.134.153

    2024年02月10日
    浏览(57)
  • kubeadm搭建kubernetes(k8s)

    节点 IP 安装软件 master(2C/4G,cpu核心数要求大于2) 192.168.174.15 docker、kubeadm、kubelet、kubectl、flannel node01(2C/2G) 192.168.174.18 docker、kubeadm、kubelet、kubectl、flannel node02(2C/2G) 192.168.174.19 docker、kubeadm、kubelet、kubectl、flannel Harbor节点(hub.exo.com) 192.168.174.16 docker、docker-compose、

    2024年02月09日
    浏览(41)
  • 快速搭建Kubernetes (K8S)平台

    kubernetes是Google 2014年创建并管理,是Google 10多年大规模容器管理技术Borg的开源版本。它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。 通过Kubernetes你可以:     快速部署应用     快速扩展应用     无缝对接新

    2024年02月02日
    浏览(50)
  • Containerd+Kubernetes搭建k8s集群

    视频教程地址:https://space.bilibili.com/3461573834180825/channel/seriesdetail?sid=3316691 之前写了一篇基于docker安装kubernetes的文章,这篇文档我们来使用containerd来安装kubernetes,相较于docker,containerd运行容器的时候效率更高,并且可以兼容docker镜像。基于docker安装kubernetes的文章地址:ht

    2024年02月07日
    浏览(43)
  • kubernetes(K8S)学习(一):K8S集群搭建(1 master 2 worker)

    kubernetes官网 :https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl GitHub :https://github.com/kubernetes/kubeadm 本文 :使用kubeadm搭建一个3台机器组成的k8s集群,1台master节点,2台worker节点。 由于k8s安装较麻烦,为防止出现其他异常,特此

    2024年04月09日
    浏览(64)
  • Kubernetes(K8s)使用 kubeadm 方式搭建多 master 高可用 K8s 集群

    本篇主要针对上篇文章的单 master 节点的 K8s 集群上搭建多 master 节点集群 和 LB 负载均衡服务器。 Kubernetes(K8S)集群搭建基础入门教程 虚拟机 IP 地址: IP 操作系统 主机名称 192.168.2.121 centos7.9 k8s-master01 192.168.2.124 centos7.9 k8s-master02 192.168.2.125 centos7.9 k8s-node01 192.168.2.126 centos

    2023年04月26日
    浏览(48)
  • Kubernetes(k8s)上搭建nacos集群

    你需要准备一个Kubernetes集群,如图我的集群已经准备完毕: nacos可以将配置文件存储到数据库当中,所以我们要先准备一个拥有nacos数据表结构的数据库,这样的数据库镜像我已经准备好了,当然你也可以自己制作这个镜像: 我之前写过一篇Kubernetes上安装数据库的文章:h

    2024年02月03日
    浏览(67)
  • 二进制搭建 Kubernetes与k8s集群搭建(一)

    目录 二进制搭建 Kubernetes v1.20     操作系统初始化配置 部署 docker引擎 部署 etcd 集群 准备签发证书环境 在 master01 节点上操作      生成Etcd证书 在 node01 节点上操作 在 node02 节点上操作 部署 Master 组件 在 master01 节点上操作 部署 Worker Node 组件 在所有 node 节点上操作 在 mas

    2024年02月06日
    浏览(67)
  • k8s实现外部访问minikube集群

    我们现在大家都知道了 minikube集群相当于k8s的一个虚拟机。 同时pod每次消亡重建之后都会分配一个虚拟的ip,这个ip可供集群内部访问,但是如果要对外访问呢? 我们可以给他暴露ip出来,但是如果pod宕机后重建ip就发生了变化,所以不能对pod进行ip的暴露。 那应该对什么进行

    2024年02月03日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包