本地快速搭建Kubernetes单机版实验环境(含问题解决方案)

Kubernetes是一个Google开发的开源容器编排系统,用于自动化应用部署、扩展和管理。文中介绍了Kubernetes的基本概念,如Pod、Deployment、Service等,并讲解了如何使用minikube在本地单机部署Kubernetes,以及如何创建和管理应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kubernetes是一个容器编排系统,用于自动化应用程序部署、扩展和管理。本指南将介绍Kubernetes的基础知识,包括基本概念、安装部署和基础用法。

一、什么是Kubernetes?

Kubernetes是Google开发的开源项目,是一个容器编排系统,可以自动化部署、扩展和管理容器化的应用程序。Kubernetes可以跨多个主机管理容器,并提供自动化负载均衡、弹性伸缩、自我修复和滚动更新等功能。

Kubernetes的基本架构由Master和Node组成。Master是集群控制中心,负责管理集群状态、控制应用程序部署和监控应用程序状态。Node是集群的工作节点,运行应用程序容器并将它们与Master通信。

二、Kubernetes的基本概念

在使用Kubernetes之前,需要了解一些基本概念。以下是一些Kubernetes的核心概念:

  1. Pod:是Kubernetes的最小部署单元,通常包含一个或多个容器。Pod中的容器共享网络和存储,并在同一个主机上运行。
  2. Deployment:是一种Kubernetes资源对象,用于管理Pod的副本数,并支持滚动更新。
  3. Service:是一种Kubernetes资源对象,用于将一组Pod公开为一个网络服务,并提供负载均衡。
  4. Namespace:是一种Kubernetes资源对象,用于隔离不同应用程序或团队的资源。
  5. ConfigMap:是一种Kubernetes资源对象,用于将应用程序配置信息与容器分离。
  6. Secret:是一种Kubernetes资源对象,用于存储敏感信息,如密码和API密钥。

三、Kuberntes单机本地部署

Kubernetes有多种安装方式:minikube、kubeadm和二进制包。

  1. minikube:是一种在本地环境中部署Kubernetes的工具,它可以在单个虚拟机中运行一个Kubernetes集群,一般用于开发、测试环境搭建。
  2. kubeadm:是一种在物理机或虚拟机中快速部署Kubernetes集群的工具,已被证明可以应用于生成环境的集群搭建。
  3. 二进制包:手工安装,流程复杂,容易出错,不建议。

这里以minikube为例,展示如何在单机上部署kubernetes,搭建一个本地演示环境。

3.1、安装minikube命令行工具

可以参考官方文档进行安装,具体安装方式可以根据自己的操作系统选择,这里以Centos为例,使用minikube version可以查看到版本信息。

[root@node1 kubernetes]# curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
[root@node1 kubernetes]# install minikube-linux-amd64 /usr/local/bin/minikube
[root@node1 kubernetes]# minikube version
minikube version: v1.29.0
commit: ddac20b4b34a9c8c857fc602203b6ba2679794d3
3.2、安装docker

minikube可以使用不同的驱动,例如Linux系统下支持Docker、KVM2、VirtualBox、QEMU、None、Podman、SSH。我们这里以最常用的Docker为例,所以需要先安装Docker。

Docker的版本不宜太旧,建议安装最新稳定版。

删除旧的Docker版本:

 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

设置repository:

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装最新版Docker:

 sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动并查询docker状态,看到状态是running代表已经运行起来了。

sudo systemctl start docker
sudo systemctl status docker

3.3、启动minikube

在命令行中输入以下命令启动minikube:

[k8s@node2 ~]$ minikube start --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=docker

其中--driver=docker指定了使用docker驱动,--image-mirror-country--image-repository是非必须的,只是考虑到国外的源下载速度比较慢,可以替换成国内的加快速度。

启动以后发现启动失败,提示以下问题The kubelet is not running

查看输出日志来辅助判断具体原因:

[k8s@node2 ~]$ sudo tail /var/log/messages

发现错误信息为DNS Server相关:

使用sudo vim /etc/resolv.conf查看DNS配置:

判断相关错误为前期其他实验设置了nameserver,删除相关配置恢复默认设置,然后重启minikube,发现正常启动了。

3.4、部署应用程序

可以使用kubectl命令行工具部署应用程序。以下是一个简单的示例:

kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4

这将创建一个Deployment,并在其中运行一个Pod,Pod中的容器将运行一个Web服务器。

3.5、公开服务

在Kubernetes中,服务是一种将Pod公开为网络服务的机制。可以使用kubectl创建一个服务,使应用程序可以通过Kubernetes集群中的其他Pod或外部客户端访问。以下是一个示例:

kubectl expose deployment hello-minikube --type=NodePort --port=8080

这将创建一个服务,并将其公开为NodePort类型,使得可以通过Kubernetes集群中任何一个节点的IP地址和NodePort访问到服务。

3.6、访问应用程序:

可以使用kubectl命令行工具获取Minikube节点的IP地址和NodePort,然后在Web浏览器中访问该IP地址和NodePort,以访问应用程序。

minikube service hello-minikube --url

这将返回服务的URL,可以将其复制到Web浏览器中进行访问。

四、kubernetes的基础用法

使用Kubernetes,可以通过Kubernetes API和kubectl命令行工具进行操作。以下是一些基本用法:

4.1、创建和查询Deployment

以下命令创建一个deployment,名为my-deployment,使用镜像busybox。

kubectl create deployment my-deployment --image=busybox

创建完成后使用以下命令可以查看deployment

kubectl get deployments
4.2、创建和查询Pod

kubectl支持json或者yaml格式来创建pod,例如:

$ cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
  name: my-busybox
spec:
  containers:
  - name: busybox
    image: busybox
EOF

创建完成以后使用kubectl get pods --all-namespaces可以列出所有 namespace 中的所有 pod。

4.3、手动缩放Pod

可以使用kubectl命令行工具手动缩放Pod的数量,以满足当前的负载需求。例如,可以使用以下命令来将Pod的数量扩展到3个:

kubectl scale deployment my-app --replicas=3
4.4、删除资源

kubectl支持多种形式的删除资源的方法:

  1. 使用定义文件

    删除匹配 pod.json 文件中定义的类型和名称的 pod

    kubectl delete -f ./pod.json
    
  2. 使用名称

    删除指定名称的pod

    kubectl delete pod mypod
    
  3. 使用标签

    删除具有 name=mypod-label标签的pod

    kubectl delete pods -l name=mypod-label
    
  4. 使用namespace

    删除my-ns这个namespace下所有的pod

    kubectl -n my-ns delete po --all
    

kubernetes的用法还有很多,具体可以参考官方文档,不建议死记硬背,而是需要时使用,熟能生巧。

### 如何将 Milvus 单机版升级到集群版 Milvus 是一种高效的向量搜索引擎,支持从单机版本平滑过渡到分布式集群模式。以下是关于如何实现这一过程的具体方法: #### Helm Chart 方法 通过 Helm 工具可以轻松管理 Kubernetes 中的应用程序部署。对于 Milvus 而言,Helm 提供了一个便捷的方式来进行单机到集群的切换。 - **初始部署单机服务** 可以使用以下命令完成单机版 Milvus 的安装,并启用持久化存储功能: ```bash helm install --set persistence.enabled=true milvus-release . ``` 此操作会创建一个基于 Kubernetes 的单节点 Milvus 实例[^1]。 - **升级至 Mishards 集群** 当业务扩展需要更高的性能时,可以通过调整配置参数将其转换为集群模式。具体命令如下所示: ```bash helm upgrade --set cluster.enabled=true --set persistence.enabled=true milvus-release . ``` 这条指令不仅启用了集群特性还保留了原有的数据持久选项。 #### Python 库方式 (适用于轻量化场景) 如果目标环境并不依赖于 K8s 或者容器化架构,则可以选择利用 PyMilvus 来加载嵌入式的 Milvus Lite 版本。这种方式适合快速原型开发或者资源受限的小规模应用场合。 ```python from pymilvus import MilvusClient # 初始化本地文件夹内的Lite实例 client = MilvusClient("./milvus_demo.db") ``` 注意此路径下的所有操作均针对单一进程有效,在正式生产环境中不推荐采用此类做法除非确实满足特定条件[^2]。 #### 手动编译与定制化构建 对于追求极致控制权的情况来说,还可以考虑直接依据官方文档指导自行完成源码级别的修改及测试工作。尽管这种方法较为复杂耗时较长,但它允许开发者深入理解内部机制并作出相应优化改进[^3]。 #### Windows 平台特殊注意事项 考虑到部分用户可能运行在Windows操作系统之上,这里额外提到了有关该平台上的实践经历分享。值得注意的是并非所有的高级特性和最新进展都能立即应用于非Linux类系统之中;因此建议优先选用受支持更好的发行版如Ubuntu配合Docker共同搭建实验环境以便获得最佳体验效果[^4]。 最后提及一点关于跨不同版本间迁移过程中遇到的一些挑战解决方案概述,这涉及到诸如角色绑定、权限分配等方面的内容处理技巧[^5]。 ### 总结 综上所述,根据具体的项目背景和技术栈偏好,可以从多个角度出发探索适合自己团队的最佳实践途径来达成由简单的独立服务器结构逐步演变为强大灵活的企业级分布网络体系的目标。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MCNU云原生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值