1 Jenkins构建镜像并push到Harbor仓库
安装Jenkins参见官方文档:Jenkins文档
maven配置
创建一个Springboot项目,在pom文件里配置下面的maven插件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<!--镜像名,要符合harbor上的规则-->
<imageName>www.harbor.com/harbor/hello:v1</imageName>
<!--依赖的基础镜像-->
<baseImage>www.harbor.com/harbor/jdk1.8:v1</baseImage>
<!--需要执行的命令,此处是-->
<entryPoint>["java", "‐jar","/${project.build.finalName}.jar"]</entryPoint>
<!--相当于Dockerfile里的ADD-->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!--如果不配置,使用本地的镜像仓库-->
<dockerHost>http://192.168.75.10:2375</dockerHost>
</configuration>
</plugin>
在maven的settings.xml文件里需要指定插件
<pluginGroups>
<pluginGroup>com.spotify</pluginGroup>
</pluginGroups>
Jenkins配置
新增一个maven项目
配置git地址
配置构建命令
Harbor的用户名和密码也可以配在maven的settings文件里
此时docker-maven-plugin插件里需要加上
<configuration>
<serverId>my-docker-registry</serverId>
<registryUrl>https:www.harbor.com</registryUrl>
</configuration>
为了安全起见,可以将用户名和密码放在docker提供的credentials store里。
构建项目
出现以下信息表明镜像成功push到Harbor仓库
查看Harbor仓库
2 安装Helm
什么是Helm
在实际项目开发中,会有很多的yaml文件,这些yaml文件很可能会存在相互的依赖,部署和维护起来非常麻烦,通过Helm可以对这些yaml文件进行统一的管理。类似于linux里的yum指令,能够实现服务的一键安装。
Helm的工程结构
charts #依赖包,相当于Java项目里的lib
Chart.yaml
templates #资源文件模板
deployment.yaml
service.yaml
pvc.yaml
pod.yaml
Values.yaml #公共资源文件
安装
手动下载Helm包上传到服务器并解压。下载地址:Helm下载地址
把helm文件拷贝到/usr/local/bin/目录下
2.x版本还需要安装tiller,3.x版本不用安装
查看是否安装成功
3 安装Ingress
什么是Ingress
前面介绍过用Service来做pod的负载均衡,参见:kubernetes服务发现与集群负载均衡。用Service做负载均衡有一个弊端,一个Service就要开一个NodePort,随着业务的增多,Service和NodePort也会增多,管理起来就变得非常麻烦。所以k8s提供了Ingress来对集群向外暴露服务,所有的请求都由Ingress来做负载均衡,路由到Service上。
安装
下载地址:Ingress下载地址
将deploy文件夹打包上传到服务器
修改mandatory.yaml里的镜像地址,改为国内的镜像地址
将Deployment改为DaemonSet,每一个节点都部署一份,同时删除replicas,DaemonSet默认创建一个pod。
开始创建pod
查看是否创建成功
创建Service
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30060
protocol: TCP
- name: https
port: 443
targetPort: 443
nodePort: 30443
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
创建ingress资源对象,生成访问规则
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
namespace: default
labels:
app: nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: ingress.demo.com #定义访问的域名
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
3 安装Dashboard
通过Helm安装Dashboard
添加仓库
拉取kubernetes-dashboard的包,然后解压
仿照values.yaml文件自定义一个yaml文件,用于替代values.yaml,需要加一些自定义的配置。
image:
#如果下载的慢可以改用阿里云镜像
repository: kubernetesui/dashboard
tag: v2.0.3
pullPolicy: IfNotPresent
pullSecrets: []
replicaCount: 1
annotations: {}
labels: {}
extraEnv: []
podAnnotations:
seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'
nodeSelector: {}
tolerations: []
affinity: {}
resources:
requests:
cpu: 100m
memory: 200Mi
limits:
cpu: 2
memory: 200Mi
protocolHttp: false
service:
type: ClusterIP
externalPort: 443
annotations: {}
labels: {}
ingress:
enabled: true
hosts:
- ingress.demo.com #ingress资源对象的域名
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
tls:
#上传https证书,创建secret name,创建命令:
#kubectl creat secret tls dashboard-secret --key demo.key --cert demo.crt -n kube-system
- secretName: dashboard-secret #
hosts:
- ingress.demo.com
metricsScraper:
enabled: false
image:
repository: kubernetesui/metrics-scraper
tag: v1.0.4
resources: {}
containerSecurityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsUser: 1001
runAsGroup: 2001
metrics-server:
enabled: false
#授权
rbac:
clusterAdminRole: true
serviceAccount:
create: true
name:
livenessProbe:
initialDelaySeconds: 30
timeoutSeconds: 30
podDisruptionBudget:
enabled: false
minAvailable:
maxUnavailable:
containerSecurityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsUser: 1001
runAsGroup: 2001
networkPolicy:
enabled: false
开始创建
helm install -name kubernetes-dashboard --namespace kube-system -f dashboard.yaml .
给kubernetes-dashboard绑定一个物理端口
kubectl edit svc kubernetes-dashboard -n kube-system
将type改为NodePort
在浏览器中访问,https://192.168.75.10:31777/#/login
使用token的方式进行登录
查询token命令
kubectl get secrets -n kube-system | grep kubernetes-dashboard-token
kubectl describe secrets kubernetes-dashboard-token-qglzz -n kube-system
将token复制到表单里
点击上面的+号可以新建部署,容器镜像填下Harbor仓库的镜像地址