kubernetes使用本地仓库
k8s与docker的安装
我参考的是
https://kuboard.cn/install/install-k8s.html#%E6%96%87%E6%A1%A3%E7%89%B9%E7%82%B9
我搭建的服务器有三台,一台master、两台worker。master会直接使用docker相关命令创建镜像、并直接在docker里运行和测试容器。以下我将在master上建立本地仓库。
自建本地仓库
我参考的是
https://www.cnblogs.com/justmine/p/8666907.html
https://www.cnblogs.com/justmine/p/8678758.html
kubernetes我装的是1.16.3的版本,仓库源必须来自使用https的服务器。所以自建的本地仓库也必须要有SSL证书。有两个办法解决证书问题
使用通用域名的证书
如果在运营中的域名购买过通用域名证书,那就好办了。如购买的证书是*.mydomain.com,那么我们只需要想办法将一个二级域名解释为本地的IP地址,举例,使用localdocker.mydomain.com指向本地IP192.168.100.100。为此需要修改master机与work机的/etc/hosts文件,增加以下内容
192.168.100.100 localdocker.mydomain.com
运行本地仓库。注意其中的/opt/data/registry是master放本地仓库的实质文件的目录,请自行创建目录。
docker run -d --restart=always --name registry \ -v /opt/data/registry:/var/lib/registry \ -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ -p 443:443 registry:2
你可能想,这是不是跑一个镜像吗?没错,本地仓库在容器里跑。
使用自制证书
如果没有买过证书,或没有通用域名证书。可以自己做一个。我的docker版本是18.9,过程简述如下
创建证书,在master上录入以下命令,我将使用安装k8s时脚本创建的master的本地名称“apiService.demo”来创建,在安装k8s时各大服务器的/etc/hosts已加入该条目指向master,master也是我的本地仓库服务器。
openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt
命令会提示你需要录入几个要素,看到hostname时,需要录入“apiService.demo”
将当前目录的拷贝到 /opt/certs目录下,以下命令会用到
运行本地仓库
docker run -d \ --restart=always \ --name apiService.demo \ -v /opt/data/registry:/var/lib/registry \ -v /opt/certs:/certs \ -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ -p 443:443 registry:2
因为是自制的证书,所在需要自己手工分发到各大本地的服务器。因为只在docker里使用,master 下执行以下命令
mkdir -p /etc/docker/certs.d/apiService.demo cp /opt/certs/domain.crt /etc/docker/certs.d/apiService.demo/ca.crt
其他服务器就想办法拷贝该master服务器上生成的domain.crt为各服务器自己的/etc/docker/certs.d/apiService.demo/ca.crt。
以此docker准备好了,如何上传到本地仓库?需要两个命令
docker tag kevin2y/site-d-p apiserver.demo/site-d-p docker push apiserver.demo/site-d-p
Kubernetes的准备工作
1.创建命名空间
kubectl create namespace localdocker-apps
2.创建Secret
kubectl -n localdocker-apps create secret docker-registry registry-key \ --docker-server=apiService.demo \ --docker-username=<your-docker-name> \ --docker-password=<your-docker=password> \ --docker-email=<you-docker-email>
注意上面三个your-docker开头的内容需要使用自己在docker上注册的相关信息录入
修改yaml定义,从本地仓库下载镜像
注意增加方框的内容,并调整箭头所指的地址。