本机搭建小巧完备的Kubernetes环境

本机搭建小巧完备的Kubernetes环境

什么是容器编排

  • 容器技术

    利用容器、镜像、仓库这三大基本要素,实现应用的打包、分发工作,实现“一次开发,到处运行”的梦想。

容器之上的管理、调度工作,就是容器编排,可以解决基本安装之外的比如服务发现、负载均衡、状态监控、健康检查、扩容缩容、应用迁移、高可用等功能。

什么是 Kubernetes

Kubernetes 就是一个生产级别的容器编排平台和集群管理系统

什么是 minikube

Kubernetes官网上推荐了两个快速搭建Kubernetes环境的工具:kindminikube

  • kind

    “Kubernetes in Docker”。它功能少,用法简单,也因此运行速度快,容易上手。不过它缺少很多 Kubernetes 的标准功能,例如仪表盘、网络插件,也很难定制化,所以我认为它比较适合有经验的 Kubernetes 用户做快速开发测试,不太适合学习研究

  • minikube

    它是一个“迷你”版本的 Kubernetes,最大的特点是“小而美”,可执行文件仅有不到100MB,运行镜像也不过1GB,集成了 Kubernetes 的绝大多数功能特性,不仅有核心的容器编排功能,还有丰富的插件,例如 Dashboard、GPU、Ingress、Istio、Kong、Registry 等等,综合来看非常完善。

如何搭建minikube环境

安装minikube

可以在官网中 找到详细的安装说明

 # Intel x86_64
 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
 ​
 # Apple arm64
 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
 ​
 sudo install minikube /usr/local/bin/
复制代码

查看版本号

 minikube version
复制代码

minikube version

安装kubectl

minikube只能够搭建Kubernetes环境,要操作Kubernetes,还需要另一个专门的客户端工具kubectl

 minikube kubectl
复制代码

这个命令会把与当前Kubernetes版本匹配的kubectl下载下来,存放在内部目录中(.minikube/cache/linux/amd64/v1.25.3/

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

img

实际验证minikube环境

使用minikube start会从Docker Hub上拉取镜像,以当前最新版本的Kubernetes启动集群。

不过不过为了保证实验环境的一致性,我们可以在后面再加上一个参数 --kubernetes-version,明确指定要使用 Kubernetes 版本

拉取镜像启动Kubernetes集群(1.23.9)

这里有一个关键的点,kubernetes-version为1.24+的时候,不再支持docker,要使用cri-docker,并添加--driver=docker

 minikube start --image-mirror-country=cn --registry-mirror=https://wki5sq9i.mirror.aliyuncs.com --kubernetes-version=v1.23.9
复制代码

image-20230127163952114

整个过程会比较长

查看集群的状态

 minikube status
 minikube node list
复制代码

image-20230126224456720

删除历史Kubernetes集群

如果要重新安装Kubernetes集群,可以执行下面的命令

 minikube stop
 minikube delete --all
复制代码

安装cri-docker

不使用kubernetes-version1.24+时,可以不用安装cri-docker,直接使用docker

如果要安装cri-docker,需要先安装go环境,可以直接在虚拟机上安装,也可以在容器内使用go的镜像

 # Run these commands as root
 ###虚拟机安装go环境###
 wget https://golang.google.cn/dl/go1.19.5.darwin-amd64.tar.gz
 ###首先删除以前的安装的 Go,然后将刚刚下载的存档解压缩到/usr/local,在 /usr/local/go中创建一个新的:
 rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
 ###配置环境变量/etc/profile 或 $HOME/.profile下增加:
 export PATH=$PATH:/usr/local/go/bin
 ### 应用
 source /etc/profile
 go env -w GOPROXY=https://goproxy.cn,direct
 ​
 ### 使用go容器 ### 
 docker pull golang
 # 下载cri-dockerd的源码,目录就是cri-dockerd
 git clone https://github.com/Mirantis/cri-dockerd.git
 docker run -it --rm -v $PWD/cri-dockerd:/usr/src/cri-dockerd -w /usr/src/cri-dockerd golang:latest
 ​
 ### 编译cri-docker并安装
 mkdir bin
 go build -o bin/cri-dockerd # 这一步耗时较长,需耐心等待
 mkdir -p /usr/local/bin
 install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
 cp -a packaging/systemd/* /etc/systemd/system
 sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
 sed -i 's,^ExecStart.*,& --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8,' /etc/systemd/system/cri-docker.service
 ​
 ## 启动cri-docker
 systemctl daemon-reload
 systemctl enable cri-docker.service
 systemctl enable --now cri-docker.socket
 systemctl start cri-docker
 ## 验证cri-docker
 systemctl status cri-docker
复制代码

查看minikube

 minikube ssh
复制代码

image-20230127164536850

kubectl的一些设置

不能直接使用kubectl version,因为使用 minikube 自带的 kubectl 有一点形式上的限制,要在前面加上 minikube 的前缀,后面再有个 --,像minikube kubectl -- version

配置.bashrc

 vim .bashrc
 ## 添加配置
 alias kubectl="minikube kubectl --"
 source .bashrc
复制代码

添加kubectl的命令补全

 source <(kubectl completion bash)
复制代码

image-20230127165228386

kubectl运行应用

相当于docker run

 kubectl run ngx --image=nginx:alpine
复制代码

image-20230127165606402

查看应用

相当于docker ps

 kubectl get pod
复制代码

image-20230127165548402

总结

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

img

《极客时间-Kubernetes入门实战课》学习笔记 Day9 极客课程分享

猜你喜欢

转载自juejin.im/post/7193263664676208698