认证方式有两种不过官方推介使用第二种
:
第一种
(配置节点以对专用注册表进行身份验证)
第二种
(在Pod上指定ImagePullSecrets)
部署方式第一种:
一、创建登录认证:
docker login -uadmin -pRoot123. https://192.168.11.128:4430/harbor
-u 用户
-p 密码
二、查看是否生成文件
ls -al $HOME/.docker/config.json
三、将生成的$HOME/.docker/config.json文件发给给集群机器
for n in `kubectl get nodes -o wide |awk '{print $6}' |grep -v INTERNAL-IP |xargs`;do scp ~/.docker/config.json root@$n:/var/lib/kubelet/config.json; done
四、测试
1)编写yaml文件进行测试
vim tomcat.yaml
apiVersion: apps/v1
kind: Deployment #控制器
metadata:
name: jenkins-tomcat #这个标签为启动pod时候的名字
spec:
replicas: 1 #启动副本数
selector: #设置标签
matchLabels:
app: jenkins-tomcat #这个标签相当于分组,查看(kubectl get pods --show-labels)
minReadySeconds: 5 #等待设置的时间后才进行升级,(如果没有设置该值,在某些极端情况下可能会造成服务不正常运行)
revisionHistoryLimit: 2 #要保留以允许回滚的旧复制集数
strategy: #策略
type: RollingUpdate #默认为滚动更新(可以不写)
rollingUpdate: #滚动更新
maxSurge: 1 #升级过程中最多可以比原先设置多出的POD数量
maxUnavailable: 1 #升级过程中最多有多少个POD处于无法提供服务的状态(该不为0)
template: #模板(相当于定义好的一个python中的模块)
metadata:
labels:
app: jenkins-tomcat #这个标签需要selector定义的标签一个,划分在同一个组
spec:
containers: #模板(容器模板)
- name: jenkins-tomcat #node节点启动的容器名字(kind控制器名字+标签名)
image: 192.168.11.128:4430/library/mogodb:20200303104829 #镜像名
imagePullPolicy: Always #拉取镜像(选择方式——直接使用本地拥有的镜像)
ports:
- containerPort: 80 #容器开放的监听端口
restartPolicy: Always #重新启动pod中所有容器的策略
---
apiVersion: v1
kind: Service
metadata:
name: jenkins-tomcat
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30110
selector:
app: jenkins-tomcat
2)、运行yaml文件
kubectl apply -f tomcat.yaml
pod运行失败提示镜像拉取不下来的提示信息将$HOME/.docker/config.json复制给其他node节点
for n in `kubectl get nodes -o wide |awk '{print $6}' |grep -v INTERNAL-IP |xargs`;do scp ~/.docker/config.json root@$n:~/.docker/config.json; done
缺点
: 如果增加一个节点需要将$HOME/.docker/config.json私仓发给给新增的节点,人工操作难免会有遗漏
部署方式第二种:
一、使用Docker配置创建机密(jenkins名称空间添加认证)
样例:
secret docker-registry <name> --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
#默认名称空间为default 其他名称空间认证需要添加 --namespaces=名称空间
1)创建jenkins名称空间
kubectl create namespace jenkins
2)创建Harbor的认证
kubectl create secret docker-registry docek-harbor --docker-server=https://192.168.11.128:4430 --docker-username=admin --docker-password=Root123. --docker-email=2216170040@qq.com --namespace=jenkins
二、测试:
1)、编写yaml文件
vim tomcat.yaml
apiVersion: apps/v1
kind: Deployment #控制器
metadata:
name: jenkins-tomcat #这个标签为启动pod时候的名字
namespace: jenkins
spec:
replicas: 1 #启动副本数
selector: #设置标签
matchLabels:
app: jenkins-tomcat #这个标签相当于分组,查看(kubectl get pods --show-labels)
minReadySeconds: 5 #等待设置的时间后才进行升级,(如果没有设置该值,在某些极端情况下可能会造成服务不正常运行)
revisionHistoryLimit: 2 #要保留以允许回滚的旧复制集数
strategy: #策略
type: RollingUpdate #默认为滚动更新(可以不写)
rollingUpdate: #滚动更新
maxSurge: 1 #升级过程中最多可以比原先设置多出的POD数量
maxUnavailable: 1 #升级过程中最多有多少个POD处于无法提供服务的状态(该不为0)
template: #模板(相当于定义好的一个python中的模块)
metadata:
labels:
app: jenkins-tomcat #这个标签需要selector定义的标签一个,划分在同一个组
spec:
containers: #模板(容器模板)
- name: jenkins-tomcat #node节点启动的容器名字(kind控制器名字+标签名)
image: 192.168.11.128:4430/library/mogodb:20200303104829 #镜像名
imagePullPolicy: Always #拉取镜像(选择方式——直接使用本地拥有的镜像)
ports:
- containerPort: 80 #容器开放的监听端口
imagePullSecrets:
- name: docek-harbor
restartPolicy: Always #重新启动pod中所有容器的策略
---
apiVersion: v1
kind: Service
metadata:
name: jenkins-tomcat
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30110
selector:
app: jenkins-tomcat
2)运行yaml文件
kubectl apply -f tomcat.yaml
3)可以查看正常运行
kubectl get po -n jenkins
4)查看详细信息
kubectl describe pod -n jenkins jenkins-tomcat-68fb8884f9-vqs7l
更多查看官方网址