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定義,從本地倉庫下載鏡像
注意增加方框的內容,並調整箭頭所指的地址。