以前的博客中有寫過k8s拉取官方鏡像,但在實際生產環境中,咱們一般都是利用Dockerfile構建的鏡像,再上傳到Harbor倉庫,因此,使用k8s拉取harbor私有倉庫的鏡像,是頗有必要學習的。node
IP地址 | 角色 | 部署軟件 |
---|---|---|
192.168.154.134 | master | docker 、k8s |
192.168.154.129 | node01 | docker 、k8s |
192.168.154.132 | node02 | docker 、k8s |
192.168.154.131 | mysql | mysql 5.7 |
參考博客 http://www.javashuo.com/article/p-zkznnblh-ve.htmlmysql
K8S在默認狀況下只能拉取Harbor倉庫中的公有鏡像,拉取私有鏡像會報錯:ErrImagePull 或 ImagePullBackOffdocker
兩種解決辦法:json
1.到 Harbor 倉庫中把該鏡像的項目設置成公開權限
2.建立認證登陸祕鑰,在拉取鏡像時帶上該祕鑰vim
docker login -u admin -p Harbor12345 192.168.154.129api
cat ~/.docker/config.jsontomcat
cat ~/.docker/config.json | base64 -w 0app
vim secret.yaml maven
apiVersion: v1 kind: Secret metadata: name: login type: kubernetes.io/dockerconfigjson data: #這裏添加加密後的密鑰 .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE1NC4xMjkiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2U0dGeVltOXlNVEl6TkRVPSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDkuNSAobGludXgpIgoJfQp9
kubectl create -f secret.yaml
vim tomcat-deploy.yml
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcat-dpm spec: replicas: 2 template: metadata: labels: # Pod副本擁有的標籤,對應RC的Selector app: tomcat-cluster spec: containers: - name: tomcat-cluster image: 192.168.154.129/maven-test01/maven-quartz:master #這裏鏡像就是harbor倉庫的項目鏡像 imagePullPolicy: Always ports: - containerPort: 8080 # 容器應用監聽的端口號 # 這裏指定建立的密鑰 imagePullSecrets: - name: login
注意:須要在建立容器時指定 imagePullSecrets 指標,指定剛纔建立的祕鑰
kubectl create -f tomcat-deploy.yml
kubectl get pod -o wide
kubectl describe pod tomcat-dpm-568ff775cf-l69s8
vim tomcat-service.yml
apiVersion: v1 kind: Service metadata: name: tomcat-service labels: app: tomcat-service spec: type: NodePort selector: app: tomcat-cluster ports: - port: 8000 targetPort: 8080 nodePort: 32500
kubectl create -f tomcat-service.yml # 建立service
kubectl get svc
kubectl describe service tomcat-service