本机搭建小巧完备的Kubernetes环境
什么是容器编排
-
容器技术
利用容器、镜像、仓库这三大基本要素,实现应用的打包、分发工作,实现“一次开发,到处运行”的梦想。
容器之上的管理、调度工作,就是容器编排,可以解决基本安装之外的比如服务发现、负载均衡、状态监控、健康检查、扩容缩容、应用迁移、高可用等功能。
什么是 Kubernetes
Kubernetes 就是一个生产级别的容器编排平台和集群管理系统
什么是 minikube
Kubernetes官网上推荐了两个快速搭建Kubernetes环境的工具:kind 和 minikube
-
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
复制代码
安装kubectl
minikube只能够搭建Kubernetes环境,要操作Kubernetes,还需要另一个专门的客户端工具kubectl
minikube kubectl
复制代码
这个命令会把与当前Kubernetes版本匹配的kubectl下载下来,存放在内部目录中(.minikube/cache/linux/amd64/v1.25.3/
)
在 minikube 环境里,我们会用到两个客户端:minikube 管理 Kubernetes 集群环境,kubectl 操作实际的 Kubernetes 功能,和 Docker 比起来有点复杂
实际验证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
复制代码
整个过程会比较长
查看集群的状态
minikube status
minikube node list
复制代码
删除历史Kubernetes集群
如果要重新安装Kubernetes集群,可以执行下面的命令
minikube stop
minikube delete --all
复制代码
安装cri-docker
不使用kubernetes-version
1.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
复制代码
kubectl的一些设置
不能直接使用kubectl version
,因为使用 minikube 自带的 kubectl 有一点形式上的限制,要在前面加上 minikube 的前缀,后面再有个 --,像minikube kubectl -- version
配置.bashrc
vim .bashrc
## 添加配置
alias kubectl="minikube kubectl --"
source .bashrc
复制代码
添加kubectl的命令补全
source <(kubectl completion bash)
复制代码
kubectl运行应用
相当于docker run
kubectl run ngx --image=nginx:alpine
复制代码
查看应用
相当于docker ps
kubectl get pod
复制代码
总结
- 容器技术只解决了应用的打包、安装问题,面对复杂的生产环境就束手无策了,解决之道就是容器编排,它能够组织管理各个应用容器之间的关系,让它们顺利地协同运行。
- Kubernetes 源自 Google 内部的 Borg 系统,也是当前容器编排领域的事实标准。minikube 可以在本机搭建 Kubernetes 环境,功能很完善,适合学习研究。
- 操作 Kubernetes 需要使用命令行工具 kubectl,只有通过它才能与 Kubernetes 集群交互。
- kubectl 的用法与 docker 类似,也可以拉取镜像运行,但操作的不是简单的容器,而是 Pod。
《极客时间-Kubernetes入门实战课》学习笔记 Day9