大家好,欢迎来到IT知识分享网。
文章目录
一、什么是容器编排?
容器技术的核心概念是容器、镜像、仓库,使用这三大基本要素我们就可以轻松地完成应用的打包、分发工作,实现“一次开发,到处运行”的梦想。
不过,当我们熟练地掌握了容器技术,信心满满地要在服务器集群里大规模实施的时候,却会发现容器技术的创新只是解决了运维部署工作中一个很小的问题。现实生产环境的复杂程度实在是太高了,除了最基本的安装,还会有各式各样的需求,比如服务发现、负载均衡、状态监控、健康检查、扩容缩容、应用迁移、高可用等等。
虽然容器技术开启了云原生时代,但它也只走出了一小步,再继续前进就无能为力了,因为这已经不再是隔离一两个进程的普通问题,而是要隔离数不清的进程,还有它们之间互相通信、互相协作的超级问题,困难程度可以说是指数级别的上升。
这些容器之上的管理、调度工作,就是这些年最流行的词汇:“容器编排”(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 了。
注意:这里我下载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
3.k8s命令客户端工具-kubectl
kubectl 是一个与 Kubernetes、minikube 彼此独立的项目,所以不包含在 minikube 里,但 minikube 提供了安装它的简化方式,你只需执行下面的这条命令:
# minikube kubectl
它就会把与当前 Kubernetes 版本匹配的 kubectl 下载下来,存放在内部目录(例如 .minikube/cache/linux/amd64/v1.23.3),然后我们就可以使用它来对 Kubernetes“发号施令”了。
所以,在 minikube 环境里,我们会用到两个客户端:minikube 管理 Kubernetes 集群环境,kubectl 操作实际的 Kubernetes 功能,和 Docker 比起来有点复杂。
4.实际验证 minikube 环境
前面的工作都做完之后,我们就可以在本机上运行 minikube,创建 Kubernetes 实验环境了。
注意:使用命令 minikube start 会从 Docker Hub 上拉取镜像,以当前最新版本的 Kubernetes 启动集群。不过为了保证实验环境的一致性,我们可以在后面再加上一个参数 --kubernetes-version,明确指定要使用 Kubernetes 版本。
[root@k8s-minkube ~]# minikube start --image-mirror-country='cn' --kubernetes-version=v1.23.3 --force
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"}
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、如何理解容器编排?
先拆成两个部分,什么是容器?什么是编排?以前,程序运行在物理机或虚拟机中。容器,是现代程序的运行方式。编排就是部署、管理应用程序的系统,能动态地响应变化,例如以下部分功能。
- 回滚
- 滚动升级
- 故障自愈
- 自动扩缩容
自动完成以上所有任务。需要人工最初进行一些配置,就可以一劳永逸。回顾一下,什么是容器编排,运行容器形式的应用程序,这些应用程序的构建方式,使它们能够实现回滚、滚动升级、故障自愈、自动扩缩容等。
总结
- 容器技术只解决了应用的打包、安装问题,面对复杂的生产环境就束手无策了,解决之道就是容器编排,它能够组织管理各个应用容器之间的关系,让它们顺利地协同运行。
- Kubernetes 源自 Google 内部的 Borg 系统,也是当前容器编排领域的事实标准。minikube 可以在本机搭建 Kubernetes 环境,功能很完善,适合学习研究。
- 操作 Kubernetes 需要使用命令行工具 kubectl,只有通过它才能与 Kubernetes 集群交互。
- kubectl 的用法与 docker 类似,也可以拉取镜像运行,但操作的不是简单的容器,而是 Pod。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136238.html