jk罗琳,互联网大数据/云计算技术就业者必读,Kubernetes运维管理之布署流行JAVA运用-安博电竞网站-安博电竞app下载-安博电竞

西甲联赛 289℃ 0

依据kubernetes布置JAVA项目

将项目迁移到k8s渠道是怎样完结的?

1制造镜像

2 控制器办理Pod

3 Pod数据耐久化

4 露出运用

5 对外发布运用

6 日志/监控

1制造镜像分为三步:榜首根底镜像,是依据哪个操作体系,比方Centos7或许其他的

第二步中间件镜像,比方服务镜像,跑的像nginx服务,tomcat服务

第三步项目镜像,它是服务镜像之上的,将你的项目打包进去,那么这个项目就能在你这个服务镜像里尿蛋白高是怎样回事面运转了

一般咱们运维人员都是提早将咱们的镜像做好,而开发人员就能直接拿这个镜像去用,这个镜像一定要契合现在环境布置的环境,

2 控制器办理pod

也便是k8s去布置这个镜像了,一般咱们都会去拿控制器去布置,用的最多的便是deployment

• Deployment:无状况布置

• StatefulSet:有状况布置

• DaemonSet:看护进程布置

• Job & CronJob:批处理

无状况和有状况的有什么差异?

有状况的是有身份的,比方网络ID、存储、这个两个是提早规划好的,有序发动/中止

耐久化与非recover耐久化

3 Pod数据耐久化

pod数据耐久化首要是因对一个运用程序说的,比方开发一个项目,这个项目有没有落地到本地文件,如果有落的话,就确保他耐久的有了,那就必需求龙知网用到pod数据的耐久化了。

容器布置过程中一般有以下三种数据:

• 发动时需求的初始数据,可所以装备文件

• 发动过程中发生的暂时数据,该暂时数据需求多个容器间同享

• 发动过程中发生的耐久化数据

4 露出运用

在k8s中,布置一个deployment,它是无法对外进行拜访的,便是其他运用程序要想拜访布置的deployment,它找不到该怎样去拜访,为什么去这么讲,由于deployment一般都是多副本的去布置,有或许会散布在不同的节点之上,并且重建pod ip也会变,从头发布一下也会变了,所以没有办法去固定去拜访哪个pod,即便固定了,其他的pod也拜访不了,要想做到多个pod都去供给服务的话,前面有必需求加一个负载均衡,供给一个拜访进口,只需这个拜访这个一致进口,才干转发到后端多个pod上,只需拜访这个Cluster IP就能转发到后端的pod上

Service

• Service界说了Pod的逻辑调集和拜访这个调集的战略

• Service引进为了处理Pod的动态改变,供给服务发现和负载均衡

• 运用CoreDNS解析Service称号

5 对外发布运用

露出出去之后呢,也便是需求让用户去拜访,比方建立一个电商网站,让用户去拜访,ingress相对于service,它是一个互补的状况,弥补了各自,service首要供给了集群内部的拜访,也能够露出一个TCP/UDP的端口,而ingress首要是一个7层的转发,也便是供给一个一致的进口,只需拜访ingress controller金华火腿,它就能帮你转发你布置一切的项目,也便是一切的项目都运用域名去拜访。

传统布置与K8S布置差异

首要开发者将代码布置到你的代码库房中,干流的用的Git或许gitlab,提交完代码经过CI/CD葳蕤渠道需求对代码进行拉取、编译、构建,发生一个War包,然后交给Ansible然后发送到云主机上/物理机,然后经过负载均衡将项目露出出去,然后会有数据库,监控体系,日志体系来供给相关的服务。

首要也是开发将代码放在代码库房,然后经过jenkins去完结拉取代码,编译,上传到咱们的镜像库房这儿是将代码打包成一个镜像,而不是故意履行的war或许jar包,这个镜像包含了你的项目的运转环境和项目代码,中公高科中签号这个镜像能够放在任何docker上去run起来,都能够去拜访,首要得确保能够在docker上去布置起来,再布置到k8s上,打出来的镜像去放在镜像库房中,来会集的去办理这些镜像,由于每天会发生几十个或许上百个镜像,有必要经过镜像库房去办理,这儿或许会去写一个脚本去衔接k8smaster,而k8s会依据自己的布置去调度这些pod,然后经过ingress去发布咱们的运用,让用户去拜访,每个ingress会相关一组pod,而service会创立这组pod的负载均衡,经过service去区别这些节点上的Pod,然后数据库是放在集群之外,监控体系日志体系也能够放在k8s集群放在去布置,也能够放在之外

,咱们是放在k8s集群内的,也不是特别灵敏,首要用来运维和开发调试用的,不会影响到咱们的事务,所以咱们优先去k8s中去布置。

现在咱们去布置一个JAVA项目到咱们的k8s中

一、装置一个openjdk仍是maven用来编译

[root@k8s-master ~]# yum -y install java-1.8.0-openjdk.x86_64 maven
[root@k8s-master ~]# ja外婆家va -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

然后咱们将代码拉到本地一般Dockerfile中跟咱们的代码都放林清玄散文在同一目录下,

[root@k8s-master tomcat-java-demo-master]# ls
db Dockerfile LICENSE pom.xml README.md src
[root@k8s-master tomcat-java-demo-master]# vim Dockerfile
FROM lizhenliang/tomcat
LABEL maintainer zhaochengcheng
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war

二、进行编译

然后这儿咱们需求装备maven的国内源,这样的话就比较快一点

[root@k8s-master CI]# vim /etc/maven/settings.xml

 
central
central
aliyun maven
https://maven.aliyun.com/repository/public


[root@k8s-master tomcat-java-demo-master]# mvn clean package -D maven test.skip=true
[root@k8s-master tomcat-java-demo-master]# ls
db Dockerfile LICENSE pom.xml README.md src target
[root证券从业资格证@k8s-master tomcat-java-demo-master]# cd target/
[root@k8s-master target]# ls
classes generated-sources ly-simple-tomcat-0.0.1-SNAPSHOT ly-simple-tomcat-0.0.1-SNAPSHOT.war maven-archiver maven-status
[root@k8s-mastjk罗琳,互联网大数据/云计算技术就业者必读,Kubernetes运维办理之布署盛行JAVA运用-安博电竞网站-安博电竞app下载-安博电竞er tomcat-java-demo-master]# cd target/

咱们就运用这个编译好的war包,然后打成镜像,上传到咱们的Harbor库房里

[root@k8s-master targe穿越前方体会服t]# ls
classes ly-simple-tomcat-0.0.1-SN容纳APSHOT maven-archiver
generated-sources ly-simple-tomcat-0.0.1-SNAPSHOT.war maven-status
[root@k8s-master tomcat-java-demo-master]# docker build -t 192.168.30.24/library/java-demo:latest .

三、然后上传到咱们的镜像库房

[root@k8s-master tomcat-java-d闲听落花emo-master]# docker login 192.168.30.24
Username: admin
Password:
Error response from daemon: Get https://192.168.30.24/v2/: dial tcp 192.168.30.24:443: connect: connection refused

这儿报错,其实咱们需求在每台docker下都要写入对harbor库房的信赖才能够,后边上传镜像也会用

[root@k8s-master java-demo]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud红景天.io"],
"insecure-registries": ["192.168.30.24"]
}

再等录一下push就能够了

[root@k8s-master tomcat-java-demo-master]# docker push 192.168.30.24/library/java-demo:latest

四、控制器办理pod

编写deployment,一般项目都写到自界说的命名空间下,称号写项目称号,便利回忆, name: tomcat-java-demo

namespace: test

别的便是下一个项目称号,这儿分为多个,一般有许多的组件组成,所以下面能够写个app的称号,比方组件1、2、3,最少标签有这两个维度

project: www

app: java-demo

别的便是镜像拉取,在哪个库房去下载,这儿我主张镜像库房的项目称号和咱们界说的是一种,防止混了

我从头打个标签,并传到咱们的私有镜像库房中

[root@k8s-master java-demo]# docker tag 192.168.30.24/library/java-demo 192.168.30.24/tomcat-java-demo/java-demo 
[root@k8s-master java-demo]# docker push 192.168.30.24/tomcat-java-demo/java-demo:latest

镜像地址也改一下地址

imagePullSecrets:
- name: registry-pull-secret
containers:
- name: tomcat
image: 192.168.30.24/tomcat-java-demo/java-demo:latest

现在开端创立咱们的yaml

创立项目的命名空间

[root@k8s-master java-demo]# vim namespace.yaml 
apiVersion: v1
kind: Namespace
metadata:
name: test
[root@k8s-master java-demo]# kubectl create -f namespace.yaml
namespace/test created
[root@k8s-master java-demo]# kubectl get ns
NAME STATUS AGE
default Active 22h
kube-node-lease Active 22h
kube-public Active 22h
kube-system Active 22h
test Active 5s

创立一个secret来确保咱们harbor镜像库房的认证信息,这儿一定要写上咱们的项目的命名空间

[root@k8s-master java-demo]# kubectl create secret docker年月是朵双生花-registry registry-pull-secret --docker-username=admin --docker-password=Harbor12345 --docker-email=111@qq.com --docker-server=192.168.30.24 -n test
secret/registry-pull-secret肾疼是怎样回事 created
[root@k8s-master java-demo]# kubectl get ns
NAME STATUS AGE
default Active 23h
kube-node-lease Active 23h
kube-public Active 23h
kube-system Active 23h
test Active 6m39s
[root@k8s-master java-demo]# kubectl ge黄色暴力t jk罗琳,互联网大数据/云计算技术就业者必读,Kubernetes运维办理之布署盛行JAVA运用-安博电竞网站-安博电竞app下载-安博电竞secret
NAME TYPE DATA AGE
default-token-2vtgm kubernetes.io/service-account-token 3 23h
registry-pull-secret kubernetes.io/dockerconfigjson 1 46s
[root@k8s-mastexiannuhur java-demo]# vim deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: tomcat-java-demo
namespace: test
spec:
replicas: 3
selector:
matchLabels:
project: www
app: java-demo
template:
metadata:
labels:
project: www
app: java-demo
spec:
imagePullSecrets:
- name: registry-pull-secret
containers:
- name: tomcat
image: 192.168.30.24/tomcat-java-demo/java-demo:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
name: web
protocol: jk罗琳,互联网大数据/云计算技术就业者必读,Kubernetes运维办理之布署盛行JAVA运用-安博电竞网站-安博电竞app下载-安博电竞TCP
resources:
requests:
cpu: 0.5
memory: 1Gi
limits:
cpu: 1
memory: 2Gi
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 20
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 20
[root@k8s-master java-demo]# kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
tomcat-java-demo-6d798c6996-fjjvk 1/1 Running 0 2m58s
tomcat-java-demo-6d798c6996-lbklf 1/1 Runnijk罗琳,互联网大数据/云计算技术就业者必读,Kubernetes运维办理之布署盛行JAVA运用-安博电竞网站-安博电竞app下载-安博电竞ng 0 2m58s
tomcat-java-demo-6d798c6996-strth 1/1 Running 0 2m58s

别的便是露出一个Service,这儿的标签也要保持一致,否则他找不到相应的标签就供给不了服务,这儿咱们是运用ingress来拜访发布应该,直接运用ClusterIP就可jk罗琳,互联网大数据/云计算技术就业者必读,Kubernetes运维办理之布署盛行JAVA运用-安博电竞网站-安博电竞app下载-安博电竞以

[root@k8s-master java-demo]# vim service.yaml 
apiVersion: v1
kind: Service
metadata:
name: tomcat-java-demo
namespace: test
spec:
selector:
project: www
app: java-demo
ports:
- name: web
port: 80
targetPort: 8080
[root@k8s-master java-demo]# kubectl get pod,svc -n test
NAME READY STATUS RESTARTS AGE
pod/tomcat-java-demo-6d798c6996-fjjvk 1/1 Running 0 37m
pod/tomcat-java-demo-6d798c6996-lbklf 1/1 Running 0 37m
pod/tomcat-java-demo-6djk罗琳,互联网大数据/云计算技术就业者必读,Kubernetes运维办理之布署盛行JAVA运用-安博电竞网站-安博电竞app下载-安博电竞798c6996-strth 1/1 Running 0 37m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/tomcat-java-demo ClusterIP 10.1.175.191 80/TCP 19s

测验拜访咱们的项目,是能够的,现在要发布出去经过ingress

[root@k8s-master java-demo]# curl 10.1.175.191








现在布置一个ingress-nginx的控制器,这个网上都能够找到,官方也有,我这儿是按DaemonSet的方法去布置的,所以每个节点都会跑一个控制器

[root不能说的隐秘歌词@k8s-master java-demo]# kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingr莅临ess-controller-g95pp 1/1 Running 0 3m6s
nginx-ingress-controller-wq6l6 1/1 Running 0 3m6s

发布运用

这儿留意两点,榜首个便是网站域名,一个是service的命名空间

[root@k8s-master java-demo]# kubectl get pjk罗琳,互联网大数据/云计算技术就业者必读,Kubernetes运维办理之布署盛行JAVA运用-安博电竞网站-安博电竞app下载-安博电竞od,svc -n test
NAME READY STATUS RESTARTS AGE
pod/tomcat-java-demo-6d798c6996-fjjvk 1/1 Running 0 53m
pod/tomcat-java-demo-6d798c6996-lbklf 1/1 Running 0 53m
pod/tomcat-java-demo-6d798c6996-strth 1/1 Running 0 53m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/tomcat-java-demo ClusterIP 10.1.175.191 80/TCP 16m
[root@k8s-master java-demo]# vim service.yaml
[root@k8s-master java-demo]# kubectl create -f ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tomcat-java-demo
namespace: test
spec:
rules:
- host: java.maidikebi.com
http:
paths:
- path: /
backend:
serviceName: tomcat-java-demo
servicePort: 80

别的我这边是测验的,所以绑定我本地的hosts来进行拜访

在hosts文件里边参加域名和和节点ip就能拜访到咱们的项目了

著作权归作者一切:来自51CTO博客作者wx5c1cfd6e22842的原创著作,如需转载,请注明出处,否则将追查法律责任