目录

K8S单机版解决方案——minikube安装部署及实践

什么是K8S(Kubernetes)

Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

通过Kubernetes你可以:

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用

什么是minikube

Minikube 是一种轻量级的 Kubernetes 实现,可在本地计算机上创建 VM 并部署仅包含一个节点的简单集群。 Minikube 可用于 Linux , macOS 和 Windows 系统。Minikube CLI 提供了用于引导集群工作的多种操作,包括启动、停止、查看状态和删除。

Minikube一般用于本地开发、测试和学习。

服务器配置

实验的服务器配置
操作系统:CentOS7.6
CPU核心数:2核
内存:4G
一般2核2G应该是足够支撑

安装Docker

卸载旧版本(如果安装过旧版本的话)

1
yum remove docker docker-common docker-selinux docker-engine

安装需要的软件包

1
yum install -y yum-utils device-mapper-persistent-data lvm2

设置yum源

1
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

查看可安装版本

1
yum list docker-ce --showduplicates | sort -r

安装

这里我选择了20.10.9的版本,因为minikube对Docker有版本要求,太高会不支持

1
yum install -y docker-ce-20.10.9-3.el7

安装minikube

这里使用了阿里云的镜像,官方包需要翻墙或者速度贼慢

1
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.23.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

启动minikube

方法一(不建议)

需要良好网络环境,最好是科学上网,不然等待时间会很久而且不一定能成功

1
minikube start

方法二(使用国内镜像)

1
minikube start --image-mirror-country='cn'

方法三

如果启动失败·,可以尝试使用以下命令

1
minikube start --registry-mirror=https://registry.docker-cn.com --image-mirror-country='cn' --kubernetes-version=v1.23.3

方法四(本人成功启动)

1
minikube start --force --driver=docker --image-repository=http://registry.cn-hangzhou.aliyuncs.com/google_containers
minikube常用配置参数

–driver=*** 从1.5.0版本开始,Minikube缺省使用系统优选的驱动来创建Kubernetes本地环境,比如您已经安装过Docker环境,minikube 将使用 docker 驱动

–cpus=2: 为minikube虚拟机分配CPU核数

–memory=2048mb: 为minikube虚拟机分配内存数,如果有足够的资源,可以考虑分配多一点cpu和内存。

–registry-mirror=*** 为了提升拉取Docker Hub镜像的稳定性,可以为 Docker daemon 配置镜像加速,参考阿里云镜像服务

–kubernetes-version=***: minikube 虚拟机将使用的 kubernetes 版本

如下命令将自动使用阿里云服务来支持minikube的环境配置

1
minikube start --image-mirror-country='cn'

安装kubectl

1
2
3
curl -Lo kubectl    http://kubernetes.oss-cn-hangzhou.aliyuncs.com/kubernetes-release/release/v1.22.1/bin/linux/amd64/kubectl
mv kubectl /usr/bin
chmod a+x /usr/bin/kubectl

验证Pod和Node是否正常启用

1
2
3
4
5
6
7
8
9
[root@VM-20-4-centos ~]# kubectl get pods -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS        AGE
kube-system   coredns-7d89d9b6b8-jh8br           1/1     Running   0               5m14s
kube-system   etcd-minikube                      1/1     Running   0               5m26s
kube-system   kube-apiserver-minikube            1/1     Running   0               5m26s
kube-system   kube-controller-manager-minikube   1/1     Running   0               5m26s
kube-system   kube-proxy-88l8s                   1/1     Running   0               5m14s
kube-system   kube-scheduler-minikube            1/1     Running   0               5m28s
kube-system   storage-provisioner                1/1     Running   1 (4m43s ago)   5m25s
1
2
3
[root@VM-20-4-centos ~]# kubectl get node
NAME       STATUS   ROLES                  AGE     VERSION
minikube   Ready    control-plane,master   6m58s   v1.22.1

卸载minikube

1
2
3
4
5
6
7
8
minikube stop
minikube delete
docker stop (docker ps -aq)
rm -r ~/.kube ~/.minikube
sudo rm /usr/local/bin/localkube /usr/local/bin/minikube
systemctl stop '*kubelet*.mount'
sudo rm -rf /etc/kubernetes/
docker system prune -af –volumes(清理docker没有使用的数据,包括镜像数据,已经停止的容器)

常见问题

ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables

临时解决办法:(重启消失

1
2
3
echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
 
echo "1">/proc/sys/net/bridge/bridge-nf-call-ip6tables

永久解决方法:

在/etc/sysctl.conf中添加:

1
2
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

执行sysctl -p 时刷新

1
sysctl -p

Sorry, Kubernetes 1.22.1 requires conntrack to be installed in root's path

这是缺少conntrack,使用yum安装即可

1
2
yum install epel-release
yum install conntrack-tools
failed to pull image gcr.azk8s.cn/google-containers/kube-apiserver:v1.23.3: output: Error response from daemon: error parsing HTTP 403 response body
这个出现在用方法二启动minikube,改为方法四则能成功启动

常用命令

minikube 常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 检查安装结果
minikube help
minikube status
kubectl version
kubectl get nodes
kubectl get pods -A

# 查询运行的 pod
minikube kubectl -- get po -A

# 挂起虚拟机
minikube pause

# 停止虚拟机
minikube stop

# 修改虚拟机内存配置
minikube config set memory 16384

# 查看 minikube 的安装目录列表
minikube addons list

# 启动 dashboard 控制台
minikube dashboard
curl 127.0.0.1:23341

# 删除所有 minikube 虚拟机
minikube delete --all

# 部署目录
/var/lib/kubelet
/var/lib/minikube

# 使用minikube导入镜像,当本地镜像总是无法找到时,可以留意这个这种方式
minikube load xxx.tar

# 启动minikube
minikube start --force --driver=docker --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

K8S 常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 创建带有终端的 Pod,并进入(后续测试用)
kubectl run busybox --image=busybox -it

# 部署 app 进行测试
kubectl run nginx02 --image=nginx
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8081

# deployment
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment hello-minikube --type=NodePort --port=8080
kubectl get service hello-minikube

# 使用 minikube 访问服务
minikube service hello-minikube

# 使用端口映射访问服务
kubectl port-forward service/hello-minikube 7080:8080
curl http://localhost:7080/

# 使用 LB 类型的 deployment 测试
kubectl create deployment balanced --image=k8s.gcr.io/echoserver:1.4  
kubectl expose deployment balanced --type=LoadBalancer --port=8080
minikube tunnel
kubectl get services balanced

参考文章

参考文章1:https://zhuanlan.zhihu.com/p/574759499
参考文章2:https://zhuanlan.zhihu.com/p/567603673