写在前面
之前的博客中有写过k8s拉取官方镜像,但在实际生产环境中,我们通常都是利用Dockerfile构建的镜像,再上传到Harbor仓库,所以,使用k8s拉取harbor私有仓库的镜像,是很有必要学习的。
实验环境
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 |
实验步骤
一、部署k8s群集
参考博客 https://blog.51cto.com/13760351/2488508
二、部署harbor仓库
参考博客 https://blog.51cto.com/13760351/2532347
三、创建登录秘钥
K8S在默认情况下只能拉取Harbor仓库中的公有镜像,拉取私有镜像会报错:ErrImagePull 或 ImagePullBackOff
两种解决办法:
1.到 Harbor 仓库中把该镜像的项目设置成公开权限 2.创建认证登录秘钥,在拉取镜像时带上该秘钥
1.先登录 Harbor 仓库:
docker login -u admin -p Harbor12345 192.168.154.129
2.查看登录的秘钥数据:
cat ~/.docker/config.json
3.进行base64加密
cat ~/.docker/config.json | base64 -w 0
4.创建 secret.yaml 文件:
vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: login
type: kubernetes.io/dockerconfigjson
data:
#这里添加加密后的密钥
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE1NC4xMjkiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2U0dGeVltOXlNVEl6TkRVPSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDkuNSAobGludXgpIgoJfQp9
5.创建对象
kubectl create -f secret.yaml
四、创建应用
1.编写deploy.yml文件
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 指标,指定刚才创建的秘钥
2.创建,拉取私有镜像:
kubectl create -f tomcat-deploy.yml
3.查看pod
kubectl get pod -o wide
4.查看pod详情
kubectl describe pod tomcat-dpm-568ff775cf-l69s8
五、对外暴露端口
1.编写service文件
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
2.查看service
kubectl get svc
3.查看service详情
kubectl describe service tomcat-service
六、测试项目
1.node01访问测试项目
2.node02 访问测试项目