本篇文章基于VM Centos7 环境部署Go应用
前置准备工作
1.安装 minikube、kubectl
2.配置docker镜像源,配置内部仓库方便pod启动。
安装minikube
curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64
// 执行测试
minikube version
安装kubectl
curl -LO https://dl.k8s.io/release/v1.32.0/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
// 执行测试
kubectl version --client
Docker相关配置
配置docker镜像源
配置docker镜像源提高docker拉取镜像速度
vi /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.imgdb.de","https://docker-0.unsee.tech","https://docker.hlmirror.com"]
}
配置私有仓库
避免本地已有镜像但是还是从远程拉取
docker pull registry
docker images registry
docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry
修改私有镜像tag 以指定上传的仓库
docker tag go-web:latest localhost:5000/go-web:latest
docker push localhost:5000/go-web:latest
上传成功后可以查看推到仓库的镜像
curl localhost:5000/v2/_catalog
将私有仓库配置到docker配置文件中
{"insecure-registries":["私有仓库地址:5000"]}
配置完重启docker
systemctl restart docker
启动minikube
启动这一步问题很多,注意携带的参数
minikube start --driver=docker --insecure-registry="私有仓库地址:5000" --force
// --image-mirror-country='cn' 不加这个参数,无法从私有仓库拉取镜像
部署项目
好的现在minikube已经启动,现在我们要基于镜像部署一个项目
kubectl create deployment go-web --image=私有仓库地址:5000/go-web:latest
kubectl get pods //查看启动的pod状态
如果READY是0,就要去排查没启动的原因
1. Failed to pull image "xxxx:5000/go-web:latest": Error response from daemon: Get "https://xxxx:5000/v2/": http: server gave HTTP response to HTTPS client。判断是否是更改了docker配置文件没有重启docker导致的。
2.connect refuse 这种一般是 镜像的tag没打对,按照 私有仓库ip:端口/镜像名:版本 格式打
启动成功后,把容器内的项目端口暴露出来,让宿主机可以访问
kubectl expose deployment go-web --type=NodePort --port=项目端口
执行minikube service启动项目
虚拟机内通过curl命令访问该url,就能正确访问到项目了
宿主机访问的话,通过nginx反向代理到该url,也能实现外部访问