久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

Kubernetes運(yùn)維之部署主流JAVA應(yīng)用-創(chuàng)新互聯(lián)

基于kubernetes部署JAVA項目
將項目遷移到k8s平臺是怎樣實(shí)現(xiàn)的?

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、成都響應(yīng)式網(wǎng)站建設(shè)公司、程序開發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、微信小程序開發(fā)等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等多方位專業(yè)化運(yùn)作于一體。

1制作鏡像
2 控制器管理Pod
3 Pod數(shù)據(jù)持久化
4 暴露應(yīng)用
5 對外發(fā)布應(yīng)用
6 日志/監(jiān)控

Kubernetes運(yùn)維之部署主流JAVA應(yīng)用

1制作鏡像分為三步:第一基礎(chǔ)鏡像,是基于哪個操作系統(tǒng),比如Centos7或者其他的
第二步中間件鏡像,比如服務(wù)鏡像,跑的像nginx服務(wù),tomcat服務(wù)
第三步項目鏡像,它是服務(wù)鏡像之上的,將你的項目打包進(jìn)去,那么這個項目就能在你這個服務(wù)鏡像里面運(yùn)行了

一般我們運(yùn)維人員都是提前將我們的鏡像做好,而開發(fā)人員就能直接拿這個鏡像去用,這個鏡像一定要符合現(xiàn)在環(huán)境部署的環(huán)境,

2 控制器管理pod
也就是k8s去部署這個鏡像了,一般我們都會去拿控制器去部署,用的最多的就是deployment

? Deployment:無狀態(tài)部署
? StatefulSet:有狀態(tài)部署
? DaemonSet:守護(hù)進(jìn)程部署
? Job & CronJob:批處理

無狀態(tài)和有狀態(tài)的有什么區(qū)別?
有狀態(tài)的是有身份的,比如網(wǎng)絡(luò)ID、存儲、這個兩個是提前規(guī)劃好的,有序啟動/停止
持久化與非持久化

3 Pod數(shù)據(jù)持久化

pod數(shù)據(jù)持久化主要是因?qū)σ粋€應(yīng)用程序說的,比如開發(fā)一個項目,這個項目有沒有落地到本地文件,如果有落的話,就保證他持久的有了,那就必須要用到pod數(shù)據(jù)的持久化了。

Kubernetes運(yùn)維之部署主流JAVA應(yīng)用
容器部署過程中一般有以下三種數(shù)據(jù):
? 啟動時需要的初始數(shù)據(jù),可以是配置文件
? 啟動過程中產(chǎn)生的臨時數(shù)據(jù),該臨時數(shù)據(jù)需要多個容器間共享
? 啟動過程中產(chǎn)生的持久化數(shù)據(jù)

4 暴露應(yīng)用
在k8s中,部署一個deployment,它是無法對外進(jìn)行訪問的,就是別的應(yīng)用程序要想訪問部署的deployment,它找不到該怎么去訪問,為什么去這么講,因為deployment一般都是多副本的去部署,有可能會分布在不同的節(jié)點(diǎn)之上,而且重建pod ip也會變,重新發(fā)布一下也會變了,所以沒有辦法去固定去訪問哪個pod,即使固定了,其他的pod也訪問不了,要想做到多個pod都去提供服務(wù)的話,前面有必須要加一個負(fù)載均衡,提供一個訪問入口,只有這個訪問這個統(tǒng)一入口,才能轉(zhuǎn)發(fā)到后端多個pod上,只要訪問這個Cluster IP就能轉(zhuǎn)發(fā)到后端的pod上
Kubernetes運(yùn)維之部署主流JAVA應(yīng)用
Service
? Service定義了Pod的邏輯集合和訪問這個集合的策略
? Service引入為了解決Pod的動態(tài)變化,提供服務(wù)發(fā)現(xiàn)和負(fù)載均衡
? 使用CoreDNS解析Service名稱

5 對外發(fā)布應(yīng)用
Kubernetes運(yùn)維之部署主流JAVA應(yīng)用
暴露出去之后呢,也就是需要讓用戶去訪問,比如搭建一個電商網(wǎng)站,讓用戶去訪問,ingress相對于service,它是一個互補(bǔ)的狀態(tài),彌補(bǔ)了各自,service主要提供了集群內(nèi)部的訪問,也可以暴露一個TCP/UDP的端口,而ingress主要是一個7層的轉(zhuǎn)發(fā),也就是提供一個統(tǒng)一的入口,只要訪問ingress controller,它就能幫你轉(zhuǎn)發(fā)你部署所有的項目,也就是所有的項目都使用域名去訪問。

傳統(tǒng)部署與K8S部署區(qū)別
Kubernetes運(yùn)維之部署主流JAVA應(yīng)用
首先開發(fā)者將代碼部署到你的代碼倉庫中,主流的用的Git或者gitlab,提交完代碼通過CI/CD平臺需要對代碼進(jìn)行拉取、編譯、構(gòu)建,產(chǎn)生一個War包,然后交給Ansible然后發(fā)送到云主機(jī)上/物理機(jī),然后通過負(fù)載均衡將項目暴露出去,然后會有數(shù)據(jù)庫,監(jiān)控系統(tǒng),日志系統(tǒng)來提供相關(guān)的服務(wù)。
Kubernetes運(yùn)維之部署主流JAVA應(yīng)用
首先也是開發(fā)將代碼放在代碼倉庫,然后通過jenkins去完成拉取代碼,編譯,上傳到我們的鏡像倉庫這里是將代碼打包成一個鏡像,而不是刻意執(zhí)行的war或者jar包,這個鏡像包含了你的項目的運(yùn)行環(huán)境和項目代碼,這個鏡像可以放在任何docker上去run起來,都可以去訪問,首先得保證能夠在docker上去部署起來,再部署到k8s上,打出來的鏡像去放在鏡像倉庫中,來集中的去管理這些鏡像,因為每天會產(chǎn)生幾十個或者上百個鏡像,必須通過鏡像倉庫去管理,這里可能會去寫一個腳本去連接k8smaster,而k8s會根據(jù)自己的部署去調(diào)度這些pod,然后通過ingress去發(fā)布我們的應(yīng)用,讓用戶去訪問,每個ingress會關(guān)聯(lián)一組pod,而service會創(chuàng)建這組pod的負(fù)載均衡,通過service去區(qū)分這些節(jié)點(diǎn)上的Pod,然后數(shù)據(jù)庫是放在集群之外,監(jiān)控系統(tǒng)日志系統(tǒng)也可以放在k8s集群放在去部署,也可以放在之外
,我們是放在k8s集群內(nèi)的,也不是特別敏感,主要用來運(yùn)維和開發(fā)調(diào)試用的,不會影響到我們的業(yè)務(wù),所以我們優(yōu)先去k8s中去部署。

現(xiàn)在我們?nèi)ゲ渴鹨粋€JAVA項目到我們的k8s中
一、安裝一個openjdk還是maven用來編譯

[root@k8s-master ~]# yum -y install java-1.8.0-openjdk.x86_64 maven
[root@k8s-master ~]# java -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

二、進(jìn)行編譯
然后這里我們需要配置maven的國內(nèi)源,這樣的話就比較快一點(diǎn)
[root@k8s-master CI]# vim /etc/maven/settings.xml

 <mirror>
      <id>central</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
  </mirrors>
[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-master tomcat-java-demo-master]# cd target/

我們就使用這個編譯好的war包,然后打成鏡像,上傳到我們的Harbor倉庫里

[root@k8s-master target]# ls
classes            ly-simple-tomcat-0.0.1-SNAPSHOT      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-demo-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

這里報錯,其實(shí)我們需要在每臺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
Kubernetes運(yùn)維之部署主流JAVA應(yīng)用
四、控制器管理pod
編寫deployment,一般項目都寫到自定義的命名空間下,名稱寫項目名稱,方便記憶, name: tomcat-java-demo
namespace: test
另外就是下一個項目名稱,這里分為多個,一般有很多的組件組成,所以下面可以寫個app的名稱,比如組件1、2、3,起碼標(biāo)簽有這兩個維度
project: www
app: java-demo
另外就是鏡像拉取,在哪個倉庫去下載,這里我建議鏡像倉庫的項目名稱和我們定義的是一種,避免混了
我重新打個標(biāo)簽,并傳到我們的私有鏡像倉庫中

[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

現(xiàn)在開始創(chuàng)建我們的yaml
創(chuàng)建項目的命名空間

[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

創(chuàng)建一個secret來保證我們harbor鏡像倉庫的認(rèn)證信息,這里一定要寫上我們的項目的命名空間

[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 get 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-master 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: 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     Running   0          2m58s
tomcat-java-demo-6d798c6996-strth   1/1     Running   0          2m58s

另外就是暴露一個Service,這里的標(biāo)簽也要保持一致,不然他找不到相應(yīng)的標(biāo)簽就提供不了服務(wù),這里我們是使用ingress來訪問發(fā)布應(yīng)該,直接使用ClusterIP就可以

[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-6d798c6996-strth   1/1     Running   0          37m

NAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/tomcat-java-demo   ClusterIP   10.1.175.191   <none>        80/TCP    19s

測試訪問我們的項目,是可以的,現(xiàn)在要發(fā)布出去通過ingress

[root@k8s-master java-demo]# curl 10.1.175.191
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>把美女帶回家應(yīng)用案例</title>
    <meta name="description" content="把美女帶回家應(yīng)用案例">
    <meta name="keywords" content="index">

現(xiàn)在部署一個ingress-nginx的控制器,這個網(wǎng)上都可以找到,官方也有,我這里是按DaemonSet的方式去部署的,所以每個節(jié)點(diǎn)都會跑一個控制器

[root@k8s-master java-demo]# kubectl get pod -n ingress-nginx
NAME                             READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-g95pp   1/1     Running   0          3m6s
nginx-ingress-controller-wq6l6   1/1     Running   0          3m6s

發(fā)布應(yīng)用
這里注意兩點(diǎn),第一個就是網(wǎng)站域名,一個是service的命名空間

[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          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   <none>        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來進(jìn)行訪問
在hosts文件里面加入域名和和節(jié)點(diǎn)ip就能訪問到我們的項目了
Kubernetes運(yùn)維之部署主流JAVA應(yīng)用

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享名稱:Kubernetes運(yùn)維之部署主流JAVA應(yīng)用-創(chuàng)新互聯(lián)
本文路徑:http://sd-ha.com/article14/djpgde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、虛擬主機(jī)、網(wǎng)站制作、關(guān)鍵詞優(yōu)化企業(yè)網(wǎng)站制作、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計